Sự khác biệt giữa CHAR và VARCHAR trong PostgreSQL
Trong PostgreSQL, CHAR
(hoặc CHARACTER
) và VARCHAR
(hoặc CHARACTER VARYING
) đều là kiểu dữ liệu chuỗi được sử dụng để lưu trữ văn bản, nhưng chúng có những đặc điểm khác nhau mà bạn nên biết để chọn kiểu dữ liệu phù hợp cho ứng dụng của mình.
CHAR
là kiểu dữ liệu chuỗi cố định. Khi bạn định nghĩa một cột là CHAR(n)
, nó sẽ luôn giữ độ dài cố định n
ký tự. Nếu chuỗi bạn lưu trữ ngắn hơn n
ký tự, PostgreSQL sẽ tự động thêm các ký tự khoảng trắng ở cuối để đạt độ dài cố định này.CHAR(5)
và lưu giá trị 'abc'
, PostgreSQL sẽ lưu trữ nó dưới dạng 'abc '
(với 2 ký tự khoảng trắng ở cuối).CHAR
có thể mang lại hiệu suất tốt hơn trong một số trường hợp nhất định, đặc biệt là khi lưu trữ các chuỗi có độ dài giống nhau.VARCHAR
là kiểu dữ liệu chuỗi biến đổi. Khi bạn định nghĩa một cột là VARCHAR(n)
, nó có thể chứa chuỗi với độ dài tối đa là n
ký tự, nhưng không yêu cầu độ dài cố định. Nếu chuỗi bạn lưu trữ ngắn hơn n
, PostgreSQL chỉ lưu trữ chuỗi thực tế mà không thêm khoảng trắng.VARCHAR(5)
và lưu giá trị 'abc'
, PostgreSQL sẽ chỉ lưu trữ nó dưới dạng 'abc'
mà không có ký tự khoảng trắng.VARCHAR
có thể sử dụng bộ nhớ hiệu quả hơn khi bạn không chắc chắn về độ dài tối đa của dữ liệu, đặc biệt là khi lưu trữ các chuỗi có độ dài khác nhau.CHAR(n)
có độ dài cố định, trong khi VARCHAR(n)
có độ dài biến đổi.CHAR(n)
sẽ luôn chiếm n ký tự trong bộ nhớ, ngay cả khi chuỗi thực tế ngắn hơn.VARCHAR(n)
chỉ sử dụng bộ nhớ cho chuỗi thực tế, cộng thêm một số byte để lưu trữ độ dài chuỗi.CHAR
khi bạn biết chắc chắn rằng tất cả các giá trị sẽ có cùng một độ dài (ví dụ: mã bưu điện, mã sản phẩm).VARCHAR
khi bạn muốn lưu trữ các chuỗi có độ dài khác nhau và muốn tiết kiệm bộ nhớ.VARCHAR
có thể định nghĩa chiều dài tối đa (ví dụ: VARCHAR(255)
), trong khi CHAR
không có chiều dài tối đa, nó luôn là n ký tự mà bạn đã chỉ định.Việc chọn giữa CHAR
và VARCHAR
trong PostgreSQL phụ thuộc vào nhu cầu cụ thể của ứng dụng của bạn. CHAR
là sự lựa chọn tốt khi bạn cần độ dài cố định và VARCHAR
là lựa chọn linh hoạt hơn cho các chuỗi có độ dài không xác định. Hiểu rõ sự khác biệt này sẽ giúp bạn thiết kế cơ sở dữ liệu hiệu quả hơn.