MySQL cung cấp một sự lựa chọn về công cụ lưu trữ. Việc lưu trữ vật lý của dữ liệu phụ thuộc vào công cụ lưu trữ.
MyISAM lưu trữ VARCHAR
Trong MyISAM, VARCHAR
s thường chỉ chiếm chiều dài thực của chuỗi cộng với một hoặc hai byte. Điều này được thực hiện bởi giới hạn thiết kế của MyISAM đối với khóa bảng thay vì khả năng khóa hàng. Hậu quả về hiệu suất bao gồm cấu hình bộ nhớ cache nhỏ gọn hơn, nhưng cũng phức tạp hơn (chậm hơn) tính toán hiệu suất bản ghi.
(Trên thực tế, MyISAM cung cấp cho bạn mức độ lựa chọn giữa kích thước hàng vật lý cố định và định dạng bảng kích thước hàng vật lý thay đổi tùy thuộc vào loại cột xuất hiện trong toàn bộ bảng. Sự xuất hiện của VARCHAR
chỉ thay đổi phương thức mặc định, nhưng sự hiện diện của TEXT
blob lực lượng VARCHAR
s trong cùng một bảng để sử dụng cả phương pháp độ dài thay đổi.)
Phương pháp lưu trữ vật lý đặc biệt quan trọng với các chỉ mục, đây là một câu chuyện khác với các bảng. MyISAM sử dụng tính năng nén không gian cho cả hai CHAR
và VARCHAR
, nghĩa là dữ liệu ngắn hơn chiếm ít không gian hơn trong chỉ mục trong cả hai trường hợp.
Bộ nhớ InnoDB của VARCHAR
InnoDB, giống như hầu hết các cơ sở dữ liệu quan hệ hiện tại khác, sử dụng một cơ chế phức tạp hơn. VARCHAR
các cột có chiều rộng tối đa nhỏ hơn 768 byte sẽ được lưu trữ nội tuyến, với chỗ dành riêng phù hợp với chiều rộng tối đa đó. Chính xác hơn tại đây
:
InnoDB hiện không nén không gian trong các chỉ mục của nó, ngược lại với MyISAM như được mô tả ở trên.
Quay lại câu hỏi
Tuy nhiên, tất cả những điều trên chỉ là một chi tiết triển khai thậm chí có thể thay đổi giữa các phiên bản. Sự khác biệt thực sự giữa CHAR
và VARCHAR
là ngữ nghĩa, và cũng là ngữ nghĩa giữa VARCHAR(20)
và VARCHAR(50)
. Bằng cách đảm bảo rằng không có cách nào để lưu trữ chuỗi 30 ký tự trong VARCHAR(20)
, cơ sở dữ liệu làm cho cuộc sống dễ dàng hơn và được xác định tốt hơn cho các bộ xử lý và ứng dụng khác nhau mà nó được cho là tích hợp vào một giải pháp hoạt động có thể đoán trước được. Đây là vấn đề lớn.
Cụ thể về tên cá nhân, câu hỏi này có thể cung cấp cho bạn một số hướng dẫn thực tế. Những người có tên đầy đủ trên 70 ký tự UTF-8 vẫn gặp rắc rối.