Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

เพิ่มเลข 0 นำหน้า (Zero-padding) ใน MySQL ด้วย ZEROFILL

ใช้ Attribute ZEROFILL ร่วมกับชนิดข้อมูลตัวเลข (INT, BIGINT, DECIMAL) เพื่อแสดงเลข 0 นำหน้าอัตโนมัติจนครบความยาวที่กำหนด

Syntax

CREATE TABLE table_name (
    column_name INT(display_width) ZEROFILL
);
  • display_width - จำนวนหลักที่ต้องการ (เช่น INT(4) = 4 หลัก)
  • ZEROFILL - เติม 0 ด้านหน้าอัตโนมัติ
  • จะเพิ่ม UNSIGNED อัตโนมัติ (ค่าไม่ติดลบ)

ตัวอย่างการใช้งาน

1. สร้างตารางพร้อม ZEROFILL

mysql> create table DemoTable1913 ( 
    -> Code int(4) ZEROFILL AUTO_INCREMENT NOT NULL, 
    -> PRIMARY KEY(Code) 
    -> ); Query OK, 0 rows affected (0.00 sec)

2. เพิ่มข้อมูล (ให้ AUTO_INCREMENT ทำงาน)

mysql> insert into DemoTable1913 values(1); Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1913 values(2); Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1913 values(3); Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1913 values(4); Query OK, 1 row affected (0.00 sec)

3. แสดงผล (Zero-padded อัตโนมัติ)

mysql> select * from DemoTable1913;
+------+
| Code |
+------+
| 0001 |
| 0002 |
| 0003 |
| 0004 |
+------+
4 rows in set (0.00 sec)

รายละเอียด ZEROFILL

วิธีอื่น: ใช้ LPAD() ใน SELECT (ไม่เปลี่ยนโครงสร้างตาราง)

SELECT LPAD(CAST(Code AS CHAR), 4, '0') FROM DemoTable1913;

⚠️ ข้อควรระวัง

  • ZEROFILL เป็น Display Attribute เท่านั้น - ค่าจริงใน DB ยังคงเป็นตัวเลข (1, 2, 3...) การเปรียบเทียบ/คำนวณใช้ค่าจริง
  • Deprecated ใน MySQL 8.0.17+ - อาจถูกลบในอนาคต แนะนำใช้ LPAD() หรือ FORMAT() ใน Application Layer แทน
  • ทำให้ Column กลายเป็น UNSIGNED อัตโนมัติ (ไม่เก็บค่าลบได้)

Best Practice แทน ZEROFILL

-- ใน Application (PHP, Python, Java, etc.)
String.format("%04d", number);  // Java
str(number).zfill(4)            // Python
sprintf("%04d", $number)        // PHP

สรุป: ใช้ INT(n) ZEROFILL เพื่อแสดงเลข 0 นำหน้าอัตโนมัติ แต่เป็น Feature แบบ Legacy แนะนำจัดการ Padding ที่ Application Layer แทน

ค่าที่ InsertINT(4) ZEROFILLINT(6) ZEROFILL
10001000001
420042000042
12341234001234
1234512345 (เกิน 4 หลัก)012345