Hướng dẫn varchar max mysql

Độ dài tối đa của một varchar tùy thuộc vào kích thước hàng tối đa trong MySQL, là 64KB (không tính BLOB):

VARCHAR(65535)

Tuy nhiên, lưu ý rằng giới hạn thấp hơn nếu bạn sử dụng bộ ký tự nhiều byte:

VARCHAR(21844) CHARACTER SET utf8

Dưới đây là một số ví dụ:

Kích thước hàng tối đa là 65535, nhưng một varchar cũng bao gồm một hoặc hai byte để mã hóa độ dài của một chuỗi đã cho. Vì vậy, bạn thực sự không thể khai báo một biến thể của kích thước hàng tối đa, ngay cả khi đó là cột duy nhất trong bảng.

mysql> CREATE TABLE foo ( v VARCHAR(65534) );
ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs

Nhưng nếu chúng ta thử giảm độ dài, chúng ta sẽ tìm thấy độ dài lớn nhất hoạt động:

mysql> CREATE TABLE foo ( v VARCHAR(65532) );
Query OK, 0 rows affected (0.01 sec)

Bây giờ nếu chúng ta cố gắng sử dụng bộ ký tự đa bào ở cấp bảng, chúng ta thấy rằng nó tính mỗi ký tự là nhiều byte. Các chuỗi UTF8 không nhất thiết phải sử dụng nhiều byte cho mỗi chuỗi, nhưng MySQL không thể cho rằng bạn sẽ hạn chế tất cả các lần chèn trong tương lai của mình thành các ký tự một byte.

mysql> CREATE TABLE foo ( v VARCHAR(65532) ) CHARSET=utf8;
ERROR 1074 (42000): Column length too big for column 'v' (max = 21845); use BLOB or TEXT instead

Mặc dù lỗi cuối cùng đã nói với chúng tôi, InnoDB vẫn không giống như chiều dài 21845.

mysql> CREATE TABLE foo ( v VARCHAR(21845) ) CHARSET=utf8;
ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs

Điều này có ý nghĩa hoàn hảo, nếu bạn tính toán rằng 21845 * 3 = 65535, dù sao thì nó cũng không hoạt động. Trong khi đó 21844 * 3 = 65532, không hoạt động.

mysql> CREATE TABLE foo ( v VARCHAR(21844) ) CHARSET=utf8;
Query OK, 0 rows affected (0.32 sec)

173 hữu ích 5 bình luận chia sẻ