Chọn VARCHAR2(size)
qua CHAR(size)
, vì đây là nhiều không gian và thời gian hiệu quả:
Đáng ngạc nhiên hay không, CHAR(size)
cho phép chuyển nhượng các chuỗi với chiều dài ngắn hơn len
size
. Trong trường hợp này, ORACLE gắn thêm size-len
dấu cách vào chuỗi cho các kiểu dữ liệu CHAR
và VARCHAR
và các cửa hàng size
ký tự. Kiểu dữ liệu VARCHAR2
không có đệm, chỉ len
ký tự được lưu trữ.
CREATE TABLE Demo(col1 CHAR(4), col2 VARCHAR2(4));
INSERT INTO Demo (col1, col2) VALUES ('c', 'v');
Kết quả là,
col1='c '
(đệm với 3 dấu không gian, kể từ khi size
của col1
là 4
và độ dài của 'c'
chỉ là 1). col1='c'
đánh giá FALSE, chỉ TRIM(col1)='c'
đánh giá TRUE,
trong khi
col2='v'
đánh giá TRUE mà không TRIM()
, làm cho việc so sánh hiệu quả hơn.
Hơn nữa, so sánh giữa hai giá trị VARCHAR2
không thành công nếu độ dài của chúng khác nhau (độc lập với số size
). Trong trường hợp này, không cần so sánh nhân vật. Với CHAR
và cùng một size
, kiểm tra độ dài luôn thất bại do đệm. Do đó, mọi ký tự phải được so sánh cho đến khi ký tự không khớp đầu tiên hoặc kết thúc chuỗi đã đạt được, tùy theo điều kiện nào xảy ra trước.
Kể từ khi cả hai CHAR(size)
và VARCHAR2(size)
không ngăn chặn phân công của giá trị ngắn hơn size
, xác định một hạn chế chiều dài nếu bạn cần phải đảm bảo rằng chỉ có giá trị với chiều dài được xác định trước (mà phải bằng size
) có thể được giao.
Nguồn
2016-04-05 13:32:32
Err ... không gian thừa trong các trường VARCHAR2? Hoặc bạn có nghĩa là so sánh OldTable/CHAR = NewTable/VARCHAR2? –