Thoạt nhìn, có vẻ như TEXT và VARCHAR có thể lưu trữ cùng một thông tin. Tuy nhiên, có những khác biệt cơ bản giữa cách hoạt động của trường TEXT và trường VARCHAR, điều quan trọng cần được xem xét.
VARCHAR tiêu chuẩn thực sự là một phần của tiêu chuẩn ISO SQL: 2003; Các kiểu dữ liệu TEXT, bao gồm TINYTEXT, là không chuẩn.
Lưu trữ Các kiểu dữ liệu TEXT được lưu trữ dưới dạng các đối tượng riêng biệt từ các bảng và tập kết quả chứa chúng. Bộ nhớ này là trong suốt - không có sự khác biệt về cách viết một truy vấn liên quan đến trường TEXT so với truy vấn liên quan đến trường VARCHAR. Vì TEXT không được lưu trữ như một phần của hàng, việc truy xuất các trường TEXT yêu cầu thêm chi phí bộ nhớ [đã chỉnh sửa 1/22].
Độ dài VARCHAR tối đa Độ dài hàng tối đa của VARCHAR bị giới hạn bởi độ dài hàng tối đa của bảng. Đây là 65,535 byte cho hầu hết các công cụ lưu trữ (NDB có giá trị hàng tối đa khác). Về mặt lý thuyết, độ dài tối đa của VARCHAR là 65,536 byte. Overhead tiếp tục giới hạn kích thước tối đa thực tế của VARCHAR.
Lưu trữ độ dài của trường VARCHAR mất 1 byte nếu trường VARCHAR có độ dài tối đa là 0-255 byte; nếu nó lớn hơn 255 byte, chi phí để lưu trữ độ dài là 2 byte. Nếu trường VARCHAR cho phép giá trị NULL, điều đó sẽ thêm chi phí bổ sung - mọi bảng sử dụng 1 byte chi phí cho mỗi tập hợp 8 trường cho phép giá trị NULL. Nếu VARCHAR là hàng duy nhất trong bảng và không cho phép giá trị NULL, thì độ dài tối đa cho phép đối với VARCHAR là 65,532 byte.
Hãy nhớ rằng số trong VARCHAR (x) đại diện cho số ký tự, không phải số byte. Do đó, bạn có thể gặp khó khăn khi cố gắng xác định bảng chỉ có VARCHAR (65532) nếu bộ ký tự sử dụng các ký tự nhiều byte, chẳng hạn như UTF-8.
Nếu bạn cố gắng xác định giá trị VARCHAR dài hơn cho phép, bạn sẽ gặp phải lỗi như 1118 hoặc 1074:
ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. You have to change some columns to TEXT or BLOBs.
ERROR 1074 (42000): Column length too big for column 'col_name' (max=[max number here]); use BLOB or TEXT instead
Độ dài TEXT tối đa Kích thước tối đa của kiểu dữ liệu TEXT phụ thuộc vào kiểu dữ liệu TEXT nào đang được sử dụng. Bởi vì chúng được lưu trữ dưới dạng đối tượng, chi phí hàng duy nhất trong đối tượng bảng là một con trỏ (8 hoặc 16 byte). Đây là danh sách độ dài TEXT tối đa và chi phí (trong đối tượng TEXT):
TINYTEXT – up to 255 bytes, 1 byte overhead
TEXT – up to 64 Kb, 2 bytes overhead
MEDIUMTEXT – up to 16 Mb, 3 bytes overhead
LONGTEXT – up to 4 Gb, 4 bytes overhead
Giá trị DEFAULT MySQL không cho phép kiểu dữ liệu TEXT có giá trị mặc định khác với NULL. Các trường VARCHAR được phép tạo với giá trị DEFAULT.
Kết luận Vì ý nghĩa lưu trữ, nên sử dụng VARCHAR thay vì TINYTEXT.
Nếu bạn cần có giá trị DEFAULT không phải là NULL, bạn phải sử dụng VARCHAR (hoặc CHAR).
Nếu bạn cần lưu trữ chuỗi dài hơn khoảng 64 Kb, hãy sử dụng MEDIUMTEXT hoặc LONGTEXT. VARCHAR không thể hỗ trợ lưu trữ các giá trị lớn.
Đảm bảo rằng bạn nhận thức được tác dụng của bộ ký tự nhiều byte. VARCHAR (255) lưu trữ 255 ký tự, có thể nhiều hơn 255 byte.