ผมแค่อยากจะรู้ว่าสิ่งที่เป็นประโยชน์ / การใช้งานของการกำหนดZEROFILL
สำหรับINT
ชนิดข้อมูลในMySQL
?
`id` INT UNSIGNED ZEROFILL NOT NULL
ผมแค่อยากจะรู้ว่าสิ่งที่เป็นประโยชน์ / การใช้งานของการกำหนดZEROFILL
สำหรับINT
ชนิดข้อมูลในMySQL
?
`id` INT UNSIGNED ZEROFILL NOT NULL
คำตอบ:
เมื่อคุณเลือกคอลัมน์ที่มีประเภทZEROFILL
มันจะวางค่าที่แสดงของฟิลด์ด้วยค่าศูนย์จนถึงความกว้างของจอแสดงผลที่ระบุในคำจำกัดความของคอลัมน์ ค่าที่ยาวกว่าความกว้างหน้าจอจะไม่ถูกตัดทอน หมายเหตุ: การใช้งานที่ยังหมายถึงZEROFILL
UNSIGNED
การใช้ZEROFILL
และความกว้างในการแสดงผลไม่มีผลต่อวิธีการจัดเก็บข้อมูล มันมีผลต่อวิธีการแสดง
นี่คือตัวอย่างของ SQL ที่สาธิตการใช้ZEROFILL
:
CREATE TABLE yourtable (x INT(8) ZEROFILL NOT NULL, y INT(8) NOT NULL);
INSERT INTO yourtable (x,y) VALUES
(1, 1),
(12, 12),
(123, 123),
(123456789, 123456789);
SELECT x, y FROM yourtable;
ผลลัพธ์:
x y
00000001 1
00000012 12
00000123 123
123456789 123456789
ตัวอย่างหนึ่งเพื่อให้เข้าใจได้ว่าการใช้งานที่ZEROFILL
น่าสนใจ:
ในเยอรมนีเรามีรหัสไปรษณีย์ 5 หลัก อย่างไรก็ตามรหัสเหล่านั้นอาจเริ่มต้นด้วยศูนย์ดังนั้นจึง80337
เป็นรหัสไปรษณีย์ที่ถูกต้องสำหรับ munic 01067
เป็นรหัสไปรษณีย์ของกรุงเบอร์ลิน
อย่างที่คุณเห็นประชาชนชาวเยอรมันทุกคนคาดว่ารหัสไปรษณีย์จะแสดงเป็นรหัส 5 หลักจึง1067
ดูแปลก
ในการจัดเก็บข้อมูลเหล่านั้นคุณสามารถใช้ a VARCHAR(5)
หรือINT(5) ZEROFILL
ในขณะที่จำนวนเต็มเป็นศูนย์มีข้อดีสองประการ:
1067
คุณยังคงได้รับ01067
กลับZEROFILL
บางทีตัวอย่างนี้จะช่วยให้การทำความเข้าใจการใช้งานของ
มันเป็นคุณสมบัติสำหรับคนที่มีบุคลิกที่ชอบรบกวนกล่องสี่เหลี่ยม
คุณใส่
1
23
123
แต่เมื่อคุณเลือกมันจะเสริมค่า
000001
000023
000123
ช่วยในการเรียงลำดับที่ถูกต้องในกรณีที่คุณจะต้องเชื่อมต่อ "จำนวนเต็ม" นี้กับสิ่งอื่น (ตัวเลขหรือข้อความอื่น) ซึ่งจะต้องเรียงลำดับเป็น "ข้อความ" จากนั้น
ตัวอย่างเช่น,
ถ้าคุณจะต้องใช้หมายเลขฟิลด์จำนวนเต็ม (สมมติว่า 5) ตัดแบ่งเป็น A-005 หรือ 10/0005
ฉันรู้ว่าฉันมาปาร์ตี้ช้า แต่ฉันพบว่าซีโรฟิลล์มีประโยชน์สำหรับการเป็นตัวแทนบูลีนของ TINYINT (1) Null ไม่ได้หมายถึงเท็จเสมอไปบางครั้งคุณไม่ต้องการมัน คุณสามารถแปลงค่าเหล่านั้นให้เป็น INT ได้อย่างมีประสิทธิภาพและลบแอปพลิเคชันของคุณออกจากความสับสนที่อาจเกิดขึ้นจากการโต้ตอบ แอปพลิเคชันของคุณสามารถจัดการค่าเหล่านั้นในลักษณะที่คล้ายคลึงกับประเภทข้อมูลดั้งเดิม True = Not (0)
666
ดังนั้นฉันต้องการที่จะให้คำตอบนี้เป็น;-)
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)
เมื่อใช้ร่วมกับแอตทริบิวต์เสริม (ไม่เป็นมาตรฐาน) ZEROFILL การเว้นช่องว่างเริ่มต้นจะถูกแทนที่ด้วยค่าศูนย์ ตัวอย่างเช่นสำหรับคอลัมน์ที่ประกาศเป็น INT (4) ZEROFILL ค่า 5 จะถูกเรียกคืนเป็น 0005
หากคุณระบุ ZEROFILL สำหรับคอลัมน์ตัวเลข MySQL จะเพิ่มแอตทริบิวต์ UNSIGNED ลงในคอลัมน์โดยอัตโนมัติ
ชนิดข้อมูลตัวเลขที่อนุญาตให้ใช้คุณลักษณะ UNSIGNED ยังอนุญาตให้ลงชื่อ อย่างไรก็ตามชนิดข้อมูลเหล่านี้มีการลงชื่อโดยค่าเริ่มต้นดังนั้นแอตทริบิวต์ SIGNED จึงไม่มีผลกระทบใด ๆ
คำอธิบายข้างต้นนำมาจากเว็บไซต์อย่างเป็นทางการของ MYSQL
ZEROFILL
นี่หมายความว่าถ้าค่าจำนวนเต็ม 23 ถูกแทรกลงในคอลัมน์ INT ที่มีความกว้าง 8 ดังนั้นตำแหน่งที่เหลือจะถูกเติมด้วยศูนย์โดยอัตโนมัติ
ด้วยเหตุนี้
23
กลายเป็น:
00000023
zerofill
ไม่เป็นมาตรฐาน " แอตทริบิวต์ละเว้นเมื่อคอลัมน์มีส่วนร่วมในการแสดงออกหรือคำสั่ง. หากคุณเก็บค่าขนาดใหญ่กว่าความกว้างของจอแสดงผลในคอลัมน์จำนวนเต็มที่มีคุณลักษณะที่คุณอาจพบปัญหาเมื่อ MySQL สร้างตารางชั่วคราวสำหรับบางซับซ้อนร่วม. ในกรณีเหล่านี้ , MySQL ถือว่าค่าข้อมูลเหมาะสมภายในความกว้างของการแสดงผลคอลัมน์ "ZEROFILL
UNION
ZEROFILL