Apakah varchar
hanya sisa dari sebelum text
datang, atau ada kasus penggunaan di mana Anda ingin menggunakan varchar
? (Atau char
dalam hal ini ..)
(Saya menggunakan Postgres dan MySQL (MyISAM) setiap hari, jadi itulah yang paling saya minati, tetapi jawaban untuk database lain tentu saja diterima. ^ _-)
database
performance
mysql
efficiency
postgres
Izkata
sumber
sumber
text
sudah usang. Ada juga pertimbangan penggunaan yang terkait dengan tempat data disimpan dan bagaimana hal itu diakses.Jawaban:
Secara umum
text
kolom tidak standar dan spesifik untuk implementasi. Dalam banyak kasus, tergantung pada database mereka mungkin memiliki kombinasi dari satu atau lebih dari pembatasan berikut: tidak dapat diindeks , tidak dapat dicari dan tidak dapat diurutkan .Dalam Postgres
Semua tipe ini disimpan secara internal menggunakan struktur data C yang sama. .
Di MySQL
The
text
kolom adalah versi khususBLOB
dan memiliki pembatasan pengindeksan.Hanya dua contoh ini dapat diekstrapolasi ke sistem RDBMS SQL lainnya dan harus menjadi alasan yang cukup untuk memahami kapan harus memilih satu jenis di atas yang lain.
CHAR
ketika Anda tahu Anda memiliki jumlah karakter tetap untuk setiap entri.VARCHAR
saat Anda memiliki jumlah karakter yang bervariasi untuk setiap entri.VARCHAR
dapat disediakan,CLOB
denganUTF-8
penyandian atau tipe standar yang setara.TEXT
karena ini non-standar.sumber
non standard and implementation specific
dannot indexable, not searchable and not sortable
, yang tidak kusadari. Aku berada di bawah kesantext
itu standar.text
standar ASCII atau standar UNICODEtext
:-) atau salah satu dari setengah lusintext
standar pengkodean lainnya?text
sebagai tipe karakter. Saya belum melihat apa-apa, beberapa vendor menyebutnyalong char
dan sejenisnya, pada dasarnya adalah BLOB dengan encoding yang melekat padanya.TEXT
". Jika Anda akan bermigrasi ke database yang berbeda, itu hampir tidak merupakan deal breaker, terutama karena Anda harus mempertimbangkan bahwa postgres tidak terbatasVARCHAR
(karena TOAST tidak ada batasan baris seperti misalnya dengan MySQL) tidak dapat diterjemahkan menjadi tidak terbatasVARCHAR
di database lain tetap.text
,varchar
danchar
semuanya digunakan karena berbagai alasan. Tentu saja ada perbedaan implementasi (berapa ukuran yang mereka tempati .. dll), tetapi ada juga pertimbangan penggunaan dan niat . Jenis apa yang Anda gunakan juga memberi tahu Anda sesuatu tentang jenis data yang akan disimpan di dalamnya (atau kita semua akan gunakantext
untuk semuanya ). Jika sesuatu memiliki panjang yang tetap, kami gunakanchar
. Jika memiliki panjang variabel dengan batas atas yang didefinisikan dengan baik maka gunakanvarchar
. Jika sebagian besar teks yang Anda miliki sedikit kontrol makatext
mungkin akan menjadi taruhan terbaik Anda.sumber
char
,varchar
, dantext
semua dirancang untuk menyimpan sama jenis data. Jadi kedua jawaban di sini adalah tentang batas memeriksa. Jika ada perbedaan efisiensi, apakah itu? Mengapa saya menggunakanvarchar
lebihtext
?Database sangat memperhatikan kinerja - kecepatan dan meminimalkan penyimpanan. Di sebagian besar bagian lain dunia komputer, Anda tidak akan terganggu dengan berapa banyak karakter dalam string karakter Anda; bisa jadi satu, bisa juga seluruh isi ensiklopedia; itu semua hanya string. Bahkan, banyak bahasa bahkan tidak mengganggu Anda apakah itu string atau angka.
Tetapi ketika komputer menjadi lebih cepat dan mendapatkan lebih banyak memori, orang memasukkan lebih banyak data ke dalam basis data mereka dan melakukan permintaan yang lebih menarik. Untuk basis data, CPU dan memori hanya membatasi hari ini seperti pada hari-hari memori utama 64Kb dan 10 MB hard drive (pada komputer mainframe ).
Jumlah byte yang pasti jauh lebih mudah untuk ditangani daripada jumlah panjang variabel. 10 byte jauh lebih mudah untuk ditangani dari 1.000.000. Jadi basis data Anda ingin Anda memberikannya petunjuk sehingga dapat memberi Anda satu gigabyte hasil dari terrabytes data dalam mikrodetik. Jika Anda tidak menggunakan database Anda dengan susah payah, Anda tidak akan membutuhkan kecepatan yang ditawarkannya dan akan terganggu dengan pertanyaan yang tidak perlu. Tetapi jika Anda benar-benar membutuhkan kinerja, Anda akan dengan senang hati memberikan beberapa petunjuk.
Seperti disebutkan dalam jawaban lain, gunakan
char
jika selalu menggunakan sejumlah karakter tertentu,varchar
jika panjangnya dapat bervariasi tetapi tidak terlalu besar ( tebakan saya kebanyakan DB memperlakukannya sebagaichar
atautext
tergantung pada ukuran), dantext
jika itu bisa berapa pun panjangnya. Jika SQL Anda mencoba menggunakantext
kolom, mungkin lebih baik untuk meringkasnya entah bagaimana dan meletakkannya di kolomchar
kecilvarchar
juga, lalu lakukanwhere
dan lakukanorder by
itu. Tentu saja, itu hanya jika kinerja penting bagi Anda.sumber