Từ MySQL Tài liệu :
Sự khác biệt giữa CHAR
và VARCHAR
là cách chúng được lưu trữ, CHAR (10)
yêu cầu dung lượng lưu trữ 10 byte cho dù bạn sử dụng bao nhiêu ký tự vì dữ liệu được đệm bên phải bằng dấu cách, VARCHAR (10)
chỉ chiếm 1 byte (trong bộ ký tự 1 byte) + tiền tố độ dài (1 khi độ dài là 255 trở xuống, 2 nếu không ... Tôi không biết tại sao key_len cho EXPLAIN
thêm 2 byte)
Tôi không hiểu ý bạn với khoảng trống ở cuối, mặc dù tôi có thể tưởng tượng bạn đang nói đến việc thừa khoảng trắng ở cuối, với VARCHAR
chúng được cắt ngắn với một cảnh báo, trong khi đó trong CHAR
các cột này bị cắt ngắn một cách âm thầm, điều này có lý do nào đó CHAR
được lưu trữ với các khoảng trống ở cuối.
Về bộ ký tự trong liên kết này bạn có thể thấy rằng số ký tự cho CHAR
hoặc VARCHAR
giống nhau, mặc dù vậy, bộ nhớ của bạn sẽ yêu cầu từ 1 đến 4 byte cho mỗi ký tự, tại đây
là danh sách bộ ký tự được hỗ trợ và tại đây byte cho mỗi ký tự.
Những gì tôi đã đọc về định dạng hàng khác nhau cho InnoDB
Đặc điểm định dạng hàng dự phòng :
Đặc điểm định dạng hàng NHỎ GỌN :