Nguyên nhân
Trong MySQL, kiểu dữ liệu VARCHAR **bắt buộc** phải chỉ định độ dài tối đa trong ngoặc đơn, ví dụ: VARCHAR(100). Nếu bỏ qua, MySQL báo lỗi ERROR 1064 (42000).
Ví dụ lỗi
mysql> CREATE TABLE DemoTable (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
FirstName VARCHAR, -- ❌ Thiếu kích thước
LastName VARCHAR -- ❌ Thiếu kích thước
);
ERROR 1064 (42000): You have an error in your SQL syntax...
near ', LastName VARCHAR )' at line 4
Sửa lỗi: Thêm kích thước
mysql> CREATE TABLE DemoTable (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
FirstName VARCHAR(100), -- ✅ Đúng
LastName VARCHAR(100) -- ✅ Đúng
);
Query OK, 0 rows affected (0.60 sec)
Chèn và kiểm tra
mysql> INSERT INTO DemoTable (FirstName, LastName) VALUES
('Adam', 'Smith'), ('John', 'Doe'), ('Chris', 'Brown');
mysql> SELECT * FROM DemoTable;
+----+-----------+----------+ | Id | FirstName | LastName | +----+-----------+----------+ | 1 | Adam | Smith | | 2 | John | Doe | | 3 | Chris | Brown | +----+-----------+----------+
Lưu ý về VARCHAR(n)
nlà số ký tự tối đa (0 - 65,535).- Lưu trữ thực tế: độ dài chuỗi + 1-2 byte overhead.
- Khác với
CHAR(n): CHAR cố định độ dài, pad khoảng trắng; VARCHAR độ dài biến đổi. - MySQL 8.0: VARCHAR(65535) chia sẻ giới hạn 64KB row size với các cột khác.
Các kiểu dữ liệu string khác cần size
CHAR(n)VARBINARY(n)BINARY(n)
Kiểu TEXT, BLOB và biến thể (TINYTEXT, MEDIUMTEXT, LONGTEXT) **không** cần/k cho phép khai báo size trong ngoặc.