ผมรู้ว่าบูลใน MySQL tinyint (1)
เป็น
วันนี้ผมดูตารางที่มีกำหนดเป็นจำนวนเต็มเหมือนtinyint(2)
และยังคนอื่น ๆ ชอบint(4)
, int(6)
...
ขนาดหมายถึงอะไรในฟิลด์ของจำนวนเต็มชนิดและ tinyint?
ผมรู้ว่าบูลใน MySQL tinyint (1)
เป็น
วันนี้ผมดูตารางที่มีกำหนดเป็นจำนวนเต็มเหมือนtinyint(2)
และยังคนอื่น ๆ ชอบint(4)
, int(6)
...
ขนาดหมายถึงอะไรในฟิลด์ของจำนวนเต็มชนิดและ tinyint?
คำตอบ:
มันหมายถึงความกว้างของจอแสดงผล
ไม่ว่าคุณจะใช้ Tinyint (1) หรือ Tinyint (2) ก็ไม่ได้สร้างความแตกต่าง
ฉันมักจะใช้ tinyint (1) และ int (11) ฉันใช้ไคลเอนต์ mysql หลายตัว (navicat, sequel pro)
มันไม่ได้มีความหมายอะไรเลย! ฉันทำการทดสอบทั้งหมดข้างต้นไคลเอนต์หรือแม้แต่ลูกค้าบรรทัดคำสั่งดูเหมือนจะไม่สนใจสิ่งนี้
แต่ความกว้างของจอแสดงผลสำคัญที่สุดหากคุณใช้ZEROFILL
ตัวเลือกตัวอย่างเช่นตารางของคุณมี 2 คอลัมน์ต่อไปนี้:
ซีโรฟิลขนาดจิ๋ว (2)
B tinyint (4) ซีโรฟิล
ทั้งสองคอลัมน์มีค่าเป็น 1 เอาท์พุทสำหรับคอลัมน์Aจะเป็น01
และ0001
สำหรับBตามที่เห็นในภาพหน้าจอด้านล่าง :)
(m)
แสดงให้เห็นความกว้างของจอแสดงผลคอลัมน์; แอปพลิเคชันเช่นไคลเอนต์ MySQL ใช้ประโยชน์จากสิ่งนี้เมื่อแสดงผลลัพธ์ของแบบสอบถาม
ตัวอย่างเช่น:
| v | a | b | c |
+-----+-----+-----+-----+
| 1 | 1 | 1 | 1 |
| 10 | 10 | 10 | 10 |
| 100 | 100 | 100 | 100 |
ที่นี่a
, b
และc
กำลังใช้TINYINT(1)
, TINYINT(2)
และTINYINT(3)
ตามลำดับ อย่างที่คุณเห็นมันเป็นแผ่นค่าทางด้านซ้ายโดยใช้ความกว้างของจอแสดงผล
มันเป็นสิ่งสำคัญที่จะต้องทราบว่ามันไม่ได้ส่งผลกระทบในช่วงที่ได้รับการยอมรับของค่าสำหรับประเภทโดยเฉพาะอย่างยิ่งคือยังคงยอมรับTINYINT(1)
[-128 .. 127]
mysql> CREATE TABLE tin3(id int PRIMARY KEY,val TINYINT(10) ZEROFILL);
Query OK, 0 rows affected (0.04 sec)
mysql> INSERT INTO tin3 VALUES(1,12),(2,7),(4,101);
Query OK, 3 rows affected (0.02 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> SELECT * FROM tin3;
+----+------------+
| id | val |
+----+------------+
| 1 | 0000000012 |
| 2 | 0000000007 |
| 4 | 0000000101 |
+----+------------+
3 rows in set (0.00 sec)
mysql>
mysql> SELECT LENGTH(val) FROM tin3 WHERE id=2;
+-------------+
| LENGTH(val) |
+-------------+
| 10 |
+-------------+
1 row in set (0.01 sec)
mysql> SELECT val+1 FROM tin3 WHERE id=2;
+-------+
| val+1 |
+-------+
| 8 |
+-------+
1 row in set (0.00 sec)
เกี่ยวกับ INT, TINYINT ... เหล่านี้เป็นชนิดข้อมูลที่แตกต่างกัน INT คือหมายเลข 4 ไบต์, TINYINT คือหมายเลข 1 ไบต์ ข้อมูลเพิ่มเติมที่นี่ - จำนวนเต็ม INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT
ไวยากรณ์ของประเภทข้อมูล TINYINT คือ TINYINT (M) โดย M ระบุความกว้างของการแสดงผลสูงสุด (ใช้เฉพาะเมื่อไคลเอนต์ MySQL ของคุณรองรับเท่านั้น)