Quy tắc chung là chọn CHAR nếu tất cả các hàng sẽ có cùng độ dài . Chọn VARCHAR (hoặc NVARCHAR ) khi độ dài thay đổi đáng kể. CHAR cũng có thể nhanh hơn một chút vì tất cả các hàng có cùng độ dài.
Nó thay đổi theo cách triển khai DB, nhưng nói chung, VARCHAR (hoặc NVARCHAR ) sử dụng thêm một hoặc hai byte dung lượng lưu trữ (cho độ dài hoặc kết thúc) ngoài dữ liệu thực tế. Vì vậy, (giả sử bạn đang sử dụng bộ ký tự một byte) lưu trữ từ "FooBar"
- CHAR (6) =6 byte (không có chi phí)
- VARCHAR (100) =8 byte (chi phí 2 byte)
- CHAR (10) =10 byte (4 byte rác thải)
Điểm mấu chốt là CHAR can được nhanh hơn và hơn thế nữa tiết kiệm không gian cho dữ liệu có độ dài tương đối giống nhau (chênh lệch độ dài hai ký tự).
Lưu ý :Microsoft SQL có 2 byte chi phí cho một VARCHAR. Điều này có thể khác nhau giữa các DB, nhưng nhìn chung, cần có ít nhất 1 byte chi phí để chỉ ra độ dài hoặc EOL trên VARCHAR.
Như đã được chỉ ra bởi Gaven trong phần nhận xét:Mọi thứ thay đổi khi nói đến các bộ ký tự nhiều byte và có trường hợp VARCHAR trở thành lựa chọn tốt hơn nhiều.
Lưu ý về độ dài đã khai báo của VARCHAR :Bởi vì nó lưu trữ độ dài của nội dung thực tế, do đó bạn không lãng phí độ dài không sử dụng. Vì vậy, lưu trữ 6 ký tự trong VARCHAR (6), VARCHAR (100), hoặc VARCHAR (MAX) sử dụng cùng một lượng dung lượng lưu trữ. Đọc thêm về sự khác biệt khi sử dụng VARCHAR (MAX). Bạn khai báo một tối đa kích thước trong VARCHAR để giới hạn dung lượng được lưu trữ.
Trong các nhận xét AlwaysLearning chỉ ra rằng tài liệu Microsoft Transact-SQL dường như nói ngược lại. Tôi cho rằng đó là một lỗi hoặc ít nhất là tài liệu không rõ ràng.