Giả sử bộ ký tự cơ sở dữ liệu là UTF-8, đây là cài đặt được đề xuất trong các phiên bản Oracle gần đây. Trong trường hợp này, một số ký tự mất hơn 1 byte để lưu trữ trong cơ sở dữ liệu.
Nếu bạn xác định trường là VARCHAR2(11 BYTE)
, Oracle có thể sử dụng tối đa 11 byte để lưu trữ, nhưng bạn thực sự không thể lưu trữ 11 ký tự trong trường, vì một số trong số đó có nhiều hơn một byte để lưu trữ, ví dụ: các ký tự không phải tiếng Anh.
Bằng cách xác định trường là VARCHAR2(11 CHAR)
bạn nói với Oracle rằng nó có thể sử dụng đủ không gian để lưu trữ 11 ký tự, bất kể số byte cần để lưu trữ mỗi ký tự là bao nhiêu. Một ký tự đơn có thể yêu cầu tối đa 4 byte.
Nguồn
2008-09-17 09:34:39
Lưu ý rằng ngữ nghĩa độ dài ký tự không ảnh hưởng đến độ dài tối đa 4000 byte cho 'VARCHAR2'. Khai báo một 'VARCHAR2 (4000 CHAR)' sẽ cho phép ít hơn 4000 ký tự nếu một số ký tự yêu cầu nhiều byte lưu trữ. –
@David Sykes Đây có phải là ngữ nghĩa giống với NVARCHAR (11) không? – Nap
@Nap Không xa như tôi biết. Tôi tin rằng tham số kích thước trong khai báo kiểu NVARCHAR có ý nghĩa như trong VARCHAR2. tức là để đảm bảo đủ dung lượng lưu trữ cho 11 ký tự (không phải byte) trong bộ ký tự NVARCHAR, bạn sẽ nói NVARCHAR (11 CHAR). LƯU Ý: Tôi chưa thực sự kiểm tra điều này. Tôi chưa bao giờ sử dụng NVARCHAR. –