Tất cả những gì tôi biết về sự khác biệt của chúng là varchar
có giới hạn, và text
không. Các tài liệu không đề cập về điều này.
Đó thực sự là sự khác biệt duy nhất? Không xem xét về hiệu suất hoặc vv?
Tất cả những gì tôi biết về sự khác biệt của chúng là varchar
có giới hạn, và text
không. Các tài liệu không đề cập về điều này.
Đó thực sự là sự khác biệt duy nhất? Không xem xét về hiệu suất hoặc vv?
Câu trả lời:
Nền tảng của điều này là: Hệ thống Postgres cũ đã sử dụng ngôn ngữ PostQUEL và sử dụng một loại dữ liệu có tên text
(vì ai đó nghĩ rằng đó là một tên hay cho một loại lưu trữ văn bản). Sau đó, Postgres đã được chuyển đổi để sử dụng SQL làm ngôn ngữ của nó. Để đạt được khả năng tương thích SQL, thay vì đổi tên text
loại, một loại mới varchar
đã được thêm vào. Nhưng cả hai loại đều sử dụng cùng một thói quen C trong nội bộ.
Bây giờ, ở một mức độ nào đó và ở một số nơi, text
được mã hóa cứng như một loại mặc định, trong trường hợp không có gì khác có thể được dẫn xuất. Ngoài ra, hầu hết các chức năng chỉ có sẵn khi lấy một text
đối số hoặc trả về text
. Hai loại tương thích nhị phân, do đó, đúc là một hoạt động phân tích thời gian phân tích tầm thường. Nhưng sử dụng text
vẫn là tổng thể tự nhiên hơn cho hệ thống.
Nhưng ngoài những điểm tốt này, không có sự khác biệt đáng chú ý. Sử dụng bất cứ ai trông đẹp hơn đối với bạn. ;-)
Xem câu hỏi tương tự này . Điểm chính là không có sự khác biệt, nhưng chỉ định độ dài tối đa varchar(n)
thường không có lợi cho bạn, vì nó sử dụng nhiều không gian hơn nhưng không cải thiện hiệu suất.
http://www.postgresql.org/docs/8.4/interactive/datatype-character.html
character varying(n), varchar(n) variable-length with limit
text variable unlimited length
văn bản không có độ dài khai báo. Không có sự khác biệt hiệu suất giữa hai loại này.