ใน SQLite คำสั่งต่อไปนี้จะประสบความสำเร็จและสตริงจะถูกแทรก / ปรับปรุงลงในSALARY
คอลัมน์ซึ่งเป็นประเภทINTEGER
:
update employee set salary='TOO MUCH' where emp_id=1;
โปรดทราบว่าศูนย์จะไม่ถูกแทรก / อัปเดต แต่เป็นสตริง"TOO MUCH" ที่แท้จริงดังนั้นนี่จึงไม่เกี่ยวกับการแปลงประเภทอัตโนมัติ
สถานะคำถามที่พบบ่อย:
นี่คือคุณสมบัติไม่ใช่ข้อผิดพลาด SQLite ใช้การพิมพ์แบบไดนามิก มันไม่บังคับใช้ข้อ จำกัด ชนิดข้อมูล สามารถแทรกข้อมูลประเภทใดก็ได้ (โดยปกติ) ลงในคอลัมน์ใดก็ได้ คุณสามารถใส่สตริงความยาวโดยพลการลงในคอลัมน์จำนวนเต็มจำนวนจุดลอยตัวในคอลัมน์บูลีนหรือวันที่ในคอลัมน์อักขระ ประเภทข้อมูลที่คุณกำหนดให้กับคอลัมน์ในคำสั่ง CREATE TABLE ไม่ได้ จำกัด ข้อมูลที่สามารถใส่ลงในคอลัมน์นั้นได้ ทุกคอลัมน์สามารถเก็บสตริงความยาวได้ตามใจชอบ (มีข้อยกเว้นหนึ่งประการ: คอลัมน์ประเภท INTEGER Primary KEY อาจเก็บไว้เป็นจำนวนเต็มแบบ 64 บิตเท่านั้นข้อผิดพลาดจะเกิดขึ้นหากคุณพยายามใส่สิ่งอื่นที่ไม่ใช่จำนวนเต็มลงในคอลัมน์ INTEGER Primary KEY)
ดังนั้นพฤติกรรมนี้มีเจตนาชัดเจน แต่ฉันสงสัยว่าทำไม SQLite จึงมีพฤติกรรมนี้เนื่องจากฐานข้อมูล SQL อื่น ๆ ส่วนใหญ่ที่ฉันรู้จักประพฤติแตกต่างกันมากพวกเขาจะเกิดข้อผิดพลาดขึ้นหรือแปลงสตริง 0 เมื่อพยายามแทรกสตริงที่ไม่ใช่ตัวเลขลงใน คอลัมน์ตัวเลข
ไลบรารี SQLite จะมีประโยชน์น้อยลงหรือไม่หากไม่มีพฤติกรรมนี้
สิ่งนี้ทำโดยการออกแบบเพื่อให้ห้องสมุดมีขนาดเล็กและรวดเร็วหรือไม่?
ไลบรารี SQLite จะช้าลงหรือใหญ่ขึ้นอย่างเห็นได้ชัดหรือไม่เพื่อเพิ่มข้อผิดพลาดเมื่อพยายามแทรกสตริงลงในคอลัมน์ตัวเลข