ประโยชน์ของการใช้บูลีนมากกว่า TINYINT (1) คืออะไร


16

จากคู่มือ MySQL บอกว่า:

บูลบูลลีน

ประเภทเหล่านี้เป็นคำพ้องความหมายสำหรับ TINYINT (1) ค่าศูนย์ถือเป็นเท็จ ค่าที่ไม่ใช่ศูนย์ถือว่าเป็นจริง:

ฉันสร้างคอลัมน์บูลีนด้วย0เป็นค่าเริ่มต้น 2แล้วฉันจะปรับปรุงค่าไป ฉันคาดหวังว่า MySQL จะยอมรับอย่างใดอย่างหนึ่ง0หรือ1เพราะมันเป็นบูลีน อย่างไรก็ตาม MySQL ไม่ได้มีข้อผิดพลาดหรือป้องกันไม่ให้ฉันทำการอัปเดต

หากบูลีนทำงานเหมือนกับ TINYINT (1) ทุกอย่างจะสร้างความแตกต่างไม่ว่าฉันจะใช้ TINYINT (1) หรือบูลีนหรือไม่?

คำตอบ:


11

ทั้งสองนั้นเป็นคำพ้องความหมายจริงๆดังนั้นคุณสามารถใช้มันสลับกันได้ คุณจะไม่เห็นความแตกต่างระหว่างพวกเขา

หากคุณต้องการอนุญาต 0 และ 1 เท่านั้นคุณยังคงสามารถใช้งานbitประเภทนี้ได้


1
@QuestionOverflow โปรดจำไว้ว่าBITเป็นเขตข้อมูลบิตที่เก็บบิตหนึ่งถึงหกสิบสี่บิตไว้อย่างแน่นหนา
David Harkness

2

หากคุณกำลังทำงานกับคนอื่น (หรือคุณต้องการเตือนตัวเอง) คุณสามารถใช้ประเภทข้อมูลBOOLEANเพื่อแนะนำว่าข้อมูลมีจุดประสงค์เพื่อใช้กับค่า 1 หรือ 0 เท่านั้น


0

ดูเหมือนว่าฉันมีความแตกต่างแน่นอน

ในตารางฉันใช้ฉันมีคอลัมน์ที่กำหนดเป็น smallint กับดัชนีในคอลัมน์ เมื่อฉันเรียกใช้แบบสอบถามต่อไปนี้ "อธิบาย select * จากตารางที่คอลัมน์เป็นจริง" มันบ่งบอกว่ามันจะอ่านแถวทั้งหมดในตาราง (คอลัมน์ "possible_keys" และ "ref" เป็นโมฆะแม้จะมีคอลัมน์ "คีย์" แสดง ดัชนี).

การเปลี่ยนเคียวรีเป็น "อธิบาย select * จากตารางโดยที่ column = 1" ดัชนีเริ่มทำงานอย่างถูกต้องโดยมี "คีย์ที่เป็นไปได้" และ "ref" คอลัมน์ที่ถูกกำหนดค่าไว้และตั้งค่า "แถว" เป็นจำนวนที่ต่ำกว่ามาก

ฉันยังพยายามแทนที่ "true" ด้วย "false" และ 1 ด้วย 0 และได้ผลลัพธ์ที่เปรียบเทียบกันได้

การก้าวไปอีกขั้นฉันเปลี่ยนจากสีจิ๋วเป็นอินท์และมันก็ไม่ต่างอะไร

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.