คุณจะใช้อันไหนในกรณีใด มีความแตกต่างกันมากหรือไม่? ที่ฉันมักใช้โดยเครื่องมือคงอยู่ในการจัดเก็บบูลีน
คุณจะใช้อันไหนในกรณีใด มีความแตกต่างกันมากหรือไม่? ที่ฉันมักใช้โดยเครื่องมือคงอยู่ในการจัดเก็บบูลีน
คำตอบ:
TINYINT คือค่าจำนวนเต็ม 8 บิตฟิลด์ BIT สามารถจัดเก็บระหว่าง 1 บิต BIT (1) และ 64 บิต BIT (64) สำหรับค่าบูลีน BIT (1) นั้นค่อนข้างธรรมดา
บิต [(M)]
ประเภทบิตฟิลด์ M ระบุจำนวนบิตต่อค่าตั้งแต่ 1 ถึง 64 ค่าดีฟอลต์คือ 1 ถ้า M ถูกละไว้
ชนิดข้อมูลนี้ถูกเพิ่มใน MySQL 5.0.3 สำหรับ MyISAM และขยายใน 5.0.5 เป็น MEMORY, InnoDB, BDB และ NDBCLUSTER ก่อน 5.0.3 BIT เป็นคำพ้องความหมายของ TINYINT (1)
TINYINT [(M)] [UNSIGNED] [ZEROFILL]
จำนวนเต็มขนาดเล็กมาก ช่วงที่เซ็นชื่อคือ -128 ถึง 127 ช่วงที่ไม่ได้ลงชื่อคือ 0 ถึง 255
นอกจากนี้พิจารณาสิ่งนี้
บูลบูลีน
ประเภทเหล่านี้เป็นคำพ้องความหมายของ TINYINT (1) ค่าศูนย์ถือเป็นเท็จ ค่าที่ไม่ใช่ศูนย์ถือว่าเป็นจริง
boolean
จะใช้ไบต์แม้ว่ามันจะเป็นบิตจริงๆดังนั้น BIT (1) จะดีกว่าหลังจาก v5.0.3?
BOOL
/ BOOLEAN
มีนามแฝงสำหรับแทนTINYINT(1)
BIT
แน่นอนว่าพวกเขาทั้งหมดครอบครองไบต์ทั้งหมด แต่ความหมายBIT
จะเหมาะสมกว่ามาก
การอภิปรายเชิงทฤษฎีทั้งหมดนี้เป็นเรื่องที่ดี แต่ในความเป็นจริงอย่างน้อยถ้าคุณใช้ MySQL และสำหรับ SQLServer ด้วยเช่นกันคุณควรยึดติดกับข้อมูลที่ไม่ใช่ไบนารีสำหรับบูลีนของคุณด้วยเหตุผลง่ายๆที่ง่ายต่อการทำงานเมื่อคุณ กำลังส่งออกข้อมูลการสืบค้นและอื่น ๆ เป็นสิ่งสำคัญอย่างยิ่งหากคุณกำลังพยายามบรรลุความสามารถในการทำงานร่วมกันระหว่าง MySQL และ SQLServer (เช่นคุณซิงค์ข้อมูลระหว่างทั้งสอง) เนื่องจากการจัดการประเภทข้อมูล BIT นั้นแตกต่างกันในสองประเภทนี้ ดังนั้นในทางปฏิบัติคุณจะมีความยุ่งยากน้อยลงมากหากคุณยึดติดกับประเภทข้อมูลที่เป็นตัวเลข ฉันอยากจะแนะนำให้ MySQL ติดกับ BOOL หรือ BOOLEAN ซึ่งได้รับการจัดเก็บเป็น TINYINT (1) แม้แต่วิธีที่ MySQL Workbench และ MySQL Administrator แสดงประเภทข้อมูล BIT ก็ไม่ดี (เป็นสัญลักษณ์เล็กน้อยสำหรับข้อมูลไบนารี)
BIT ควรอนุญาตเฉพาะ 0 และ 1 (และ NULL หากฟิลด์ไม่ได้กำหนดเป็น NOT NULL) TINYINT (1) อนุญาตให้มีค่าใด ๆ ที่สามารถจัดเก็บในไบต์เดียว -128..127 หรือ 0..255 ขึ้นอยู่กับว่าไม่ได้ลงนามหรือไม่ (ค่า 1 แสดงว่าคุณตั้งใจจะใช้ตัวเลขหลักเดียวเท่านั้น แต่ไม่ ไม่ป้องกันไม่ให้คุณจัดเก็บค่าที่มากขึ้น)
สำหรับเวอร์ชันที่เก่ากว่า 5.0.3 BIT จะตีความเป็น TINYINT (1) ดังนั้นจึงไม่มีความแตกต่าง
BIT มีความหมาย "นี่คือบูลีน" และบางแอปจะพิจารณา TINYINT (1) ในลักษณะเดียวกัน (เนื่องจากวิธีที่ MySQL ใช้ในการจัดการ) ดังนั้นแอปอาจจัดรูปแบบคอลัมน์เป็นช่องทำเครื่องหมายหากตรวจสอบประเภท และตัดสินใจเลือกรูปแบบตามนั้น
อาจจะผิด แต่:
Tinyint เป็นจำนวนเต็มระหว่าง 0 ถึง 255
บิตเป็น 1 หรือ 0
ดังนั้นสำหรับฉันบิตเป็นทางเลือกสำหรับบูลีน
จากประสบการณ์ของฉันฉันบอกคุณว่า BIT มีปัญหาในประเภท linux OS (Ubuntu สำหรับอดีต) ฉันพัฒนาฐานข้อมูลของฉันบน windows และหลังจากที่ฉันปรับใช้ทุกอย่างบน linux ฉันมีปัญหากับการสืบค้นที่แทรกหรือเลือกจากตารางที่มี BIT DATA TYPE
บิตไม่ปลอดภัยในตอนนี้ ฉันเปลี่ยนเป็น tinyint (1) และทำงานได้อย่างสมบูรณ์ ฉันหมายความว่าคุณต้องการค่าเพื่อแยกความแตกต่างถ้าเป็น 1 หรือ 0 และ tinyint (1) ก็ใช้ได้