ใน MySQL ต้องระบุขนาด (length) ของ VARCHAR เสมอ ไม่สามารถสร้างคอลัมน์ VARCHAR โดยไม่กำหนดขนาดได้ จะเกิด Syntax Error ทันที
ทดสอบ: สร้างตารางไม่ระบุขนาด VARCHAR
mysql> create table DemoTable1821 (
-> Id int,
-> FirstName varchar,
-> LastName varchar
-> );
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ', LastName varchar )' at line 4
แก้ไข: ระบุขนาด VARCHAR
mysql> create table DemoTable1821 (
-> Id int,
-> FirstName varchar(10),
-> LastName varchar(10)
-> );
Query OK, 0 rows affected (0.00 sec)
เพิ่มข้อมูลทดสอบ
mysql> insert into DemoTable1821 values(1,'John','Smith'); Query OK, 1 row affected (0.00 sec) mysql> insert into DemoTable1821 values(2,'John','Doe'); Query OK, 1 row affected (0.00 sec) mysql> insert into DemoTable1821 values(3,'Adam','Smith'); Query OK, 1 row affected (0.00 sec)
แสดงผลลัพธ์
mysql> select * from DemoTable1821;
+------+-----------+----------+ | Id | FirstName | LastName | +------+-----------+----------+ | 1 | John | Smith | | 2 | John | Doe | | 3 | Adam | Smith | +------+-----------+----------+ 3 rows in set (0.00 sec)
ข้อจำกัด VARCHAR ใน MySQL
| เวอร์ชัน | ขนาดสูงสุด (Bytes) | หมายเหตุ |
|---|---|---|
| MySQL 5.0.3+ | 65,535 | แบ่งปันกับคอลัมน์อื่นในแถวเดียวกัน |
| ก่อน 5.0.3 | 255 | เก่ามาก ไม่ควรพบแล้ว |
| ลักษณะ | VARCHAR(n) | CHAR(n) |
|---|---|---|
| จัดเก็บ | ความยาวจริง + 1-2 bytes | คงที่ n bytes (pad spaces) |
| เหมาะสำหรับ | ความยาวแปรผัน (ชื่อ, อีเมล, ที่อยู่) | ความยาวคงที่ (รหัสไปรษณีย์, ISO code) |
| Performance | ดิวนพื้นที่ แต่อาจช้ากว่าเล็กน้อย | เร็วกว่าสำหรับ fixed-length |
สรุป: MySQL บังคับ ให้ระบุขนาด VARCHAR(n) เสมอ ไม่มี DEFAULT หรือการละขนาดได้ ต่างจาก PostgreSQL ที่มี VARCHAR (ไม่ระบุขนาด) หรือ TEXT ได้