Chiều dài của cột varchar được cố định với độ dài bạn khai báo khi tạo bảng. Độ dài có thể là bất kỳ giá trị nào từ 0 đến 255 (trước MySQL 5.0.3) và từ 0 đến 65,535 (trong MySQL 5.0.3 trở lên).
Lưu trữ của varchar là các byte dữ liệu có thêm một hoặc hai byte để khai báo độ dài của chuỗi. Nếu độ dài tối đa là 255 trở xuống thì chỉ 1 byte độ dài sẽ được thêm vào.
Nếu bạn sử dụng bảng thay đổi và thay đổi độ dài tối đa thì kích thước lưu trữ dữ liệu sẽ không bị ảnh hưởng nếu độ dài tối đa được xác định dưới 255. Nếu bạn đang tăng độ dài tối đa trên 255 thì tùy thuộc vào công cụ lưu trữ nếu nó buộc hai byte hoặc không dành cho các giá trị dưới 255, trong trường hợp đó, nó sẽ tăng 1 byte cho mỗi hàng.
Kiểu char khác với varchar vì char luôn sử dụng không gian cần thiết, vì vậy nếu bạn có char (10) và varchar (10) nhưng chỉ lưu trữ "hello" trong mỗi kiểu, char sẽ sử dụng tất cả 10 byte, vharchar sẽ chứa 6 byte ( 5 cho hello và 1 cho chiều dài), do đó, việc thay đổi kích thước của các cột varchar sẽ không phân bổ thêm không gian lưu trữ như nếu nó là kiểu char.
Câu hỏi thực sự bây giờ là tại sao bạn lại muốn PHP thao tác với kích thước varchar? Bạn nên chỉ định kích thước vì một lý do, nếu bạn muốn trường có độ dài thay đổi có thể chứa nhiều văn bản (hơn 65,535 byte) và cũng động để nó chỉ sử dụng không gian tối thiểu cần thiết có thể các loại TEXT có thể tốt hơn cho tình huống của bạn ?