Apa perbedaan antara tipe "varchar" dan "teks" di PostgreSQL?

15

Yang saya tahu tentang perbedaan adalah varcharada batasnya, dan texttidak. The dokumentasi tidak menyebutkan tentang hal ini.

Apakah itu satu-satunya perbedaan? Tidak ada pertimbangan tentang kinerja atau sebagainya?

Eonil
sumber
1
Ini benar-benar harus dimigrasikan ke Administrator Database . Tidak ada hubungannya dengan administrasi server.
Evan Carroll

Jawaban:

22

Latar belakangnya adalah: Sistem Postgres lama menggunakan bahasa PostQUEL dan menggunakan tipe data bernama text(karena seseorang berpikir itu nama yang bagus untuk tipe yang menyimpan teks). Kemudian, Postgres dikonversi untuk menggunakan SQL sebagai bahasanya. Untuk mencapai kompatibilitas SQL, alih-alih mengganti nama texttipe, tipe baru varcharditambahkan. Tetapi kedua jenis menggunakan rutin C yang sama secara internal.

Sekarang, untuk beberapa derajat dan di beberapa tempat, texthardcoded sebagai tipe default, kalau-kalau tidak ada lagi yang bisa diturunkan. Juga, sebagian besar fungsi hanya tersedia sebagai mengambil textargumen atau kembali text. Kedua tipe ini kompatibel dengan biner, jadi casting adalah operasi waktu-parse sepele. Tetapi menggunakan textkeseluruhan masih lebih alami untuk sistem.

Tetapi selain dari poin-poin bagus ini, tidak ada perbedaan yang nyata. Gunakan mana pun yang terlihat lebih cantik untuk Anda. ;-)

Peter Eisentraut
sumber
Oh penjelasan yang bagus. Saya akan menggunakan 'teks' karena saya tidak peduli tentang kompatibilitas yang menghalangi penggunaan produk tertentu. Terima kasih!
Eonil
1

Lihat pertanyaan serupa ini . Intinya adalah bahwa tidak ada perbedaan, tetapi menentukan panjang maksimum seperti varchar(n)umumnya tidak menguntungkan Anda, karena menggunakan lebih banyak ruang tetapi tidak meningkatkan kinerja.

singkong
sumber
0

http://www.postgresql.org/docs/8.4/interactive/datatype-character.html

character varying(n), varchar(n)        variable-length with limit
text                                    variable unlimited length

teks tanpa panjang yang dinyatakan. Tidak ada perbedaan kinerja antara kedua jenis ini.

ooshro
sumber
5
Anda juga dapat menggunakan varchar tanpa bagian (), yang akan membuatnya panjang tanpa batas juga, dan dengan demikian kurang lebih setara dengan teks.
Magnus Hagander