สาเหตุของข้อผิดพลาด
ใน MySQL VARCHAR ต้องระบุขนาด (Length) เสมอ ไม่สามารถใช้ VARCHAR โดยไม่มีวงเล็บได้ ซึ่งต่างจากบาง Database อื่นที่อนุญาตให้ใช้ VARCHAR แบบไม่ระบุขนาด
ตัวอย่างข้อผิดพลาด
CREATE TABLE DemoTable (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
FirstName VARCHAR, -- ❌ ผิด: ไม่มีขนาด
LastName VARCHAR -- ❌ ผิด: ไม่มีขนาด
);
-- ERROR 1064 (42000): You have an error in your SQL syntax...
-- near ', LastName varchar )' at line 4
วิธีแก้ไข
ระบุขนาดในวงเล็บหลัง VARCHAR:
CREATE TABLE DemoTable (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
FirstName VARCHAR(100), -- ✅ ถูกต้อง
LastName VARCHAR(100) -- ✅ ถูกต้อง
);
ตัวอย่างการทำงานหลังแก้ไข
INSERT INTO DemoTable (FirstName, LastName) VALUES ('Adam', 'Smith');
INSERT INTO DemoTable (FirstName, LastName) VALUES ('John', 'Doe');
INSERT INTO DemoTable (FirstName, LastName) VALUES ('Chris', 'Brown');
SELECT * FROM DemoTable;
+----+-----------+----------+
| Id | FirstName | LastName |
+----+-----------+----------+
| 1 | Adam | Smith |
| 2 | John | Doe |
| 3 | Chris | Brown |
+----+-----------+----------+
ข้อมูลเพิ่มเติมเกี่ยวกับ VARCHAR
| คุณสมบัติ | รายละเอียด |
|---|---|
| ขนาดสูงสุด | 65,535 bytes (ร่วมกับคอลัมน์อื่นในแถวเดียวกัน) |
| การจัดเก็บ | 1-2 bytes สำหรับความยาว + ข้อมูลจริง |
| Trailing spaces | รักษา space ท้ายสตริง (ต่างจาก CHAR) |
| Character Set | ส่งผลต่อขนาดจริง (utf8mb4 = 4 bytes/ตัวอักษร) |
Data Type 字串ที่ใช้บ่อยใน MySQL
| Type | ขนาดสูงสุด | ใช้เมื่อไหร่ |
|---|---|---|
| VARCHAR(M) | 65,535 bytes | ข้อความความยาวไม่คงที่ (ทั่วไป) |
| CHAR(M) | 255 chars | ข้อความความยาวคงที่ (เช่น รหัสไปรษณีย์) |
| TEXT | 65,535 bytes | ข้อความยาว ไม่ต้องการ index ทั้งหมด |
| LONGTEXT | 4 GB | ข้อความยาวมาก |
สรุป
VARCHAR ต้องมีขนาดเสมอ เช่น VARCHAR(255), VARCHAR(100) หากลืมระบุจะเกิด ERROR 1064 ทันที