Saya memiliki data karakter panjang variabel dan ingin menyimpan dalam database SQL Server (2005). Saya ingin mempelajari beberapa praktik terbaik tentang cara memilih tipe SQL TEXT atau memilih tipe VARCHAR SQL, pro dan kontra dalam kinerja / jejak / fungsi.
sql-server
text
varchar
sqldatatypes
George2
sumber
sumber
Jawaban:
Jika Anda menggunakan SQL Server 2005 atau lebih baru, gunakan
varchar(MAX)
. Tipetext
data sudah usang dan tidak boleh digunakan untuk pekerjaan pengembangan baru. Dari dokumen :sumber
TEXT
digunakan untuk potongan besar data string. Jika panjang bidang melebihi ambang tertentu, teks disimpan di luar baris.VARCHAR
selalu disimpan dalam baris dan memiliki batas 8000 karakter. Jika Anda mencoba membuatVARCHAR(x)
, di mana x> 8000 , Anda mendapatkan kesalahan:Batasan panjang ini tidak terkait
VARCHAR(MAX)
dengan SQL Server 2005 , yang mungkin disimpan di luar baris, sama sepertiTEXT
.Perhatikan bahwa
MAX
ini bukan jenis konstanta di sini,VARCHAR
danVARCHAR(MAX)
merupakan tipe yang sangat berbeda, yang terakhir sangat dekatTEXT
.Dalam versi SQL Server sebelumnya Anda tidak dapat mengakses
TEXT
secara langsung, Anda hanya bisa mendapatkanTEXTPTR
dan menggunakannya diREADTEXT
danWRITETEXT
fungsinya.Di SQL Server 2005 Anda dapat langsung mengakses
TEXT
kolom (meskipun Anda masih membutuhkan pemeran eksplisit untukVARCHAR
untuk menetapkan nilai bagi mereka).TEXT
itu baik:VARCHAR
itu baik:Dengan memilih di sini, saya bermaksud mengeluarkan pertanyaan apa pun yang mengembalikan nilai kolom.
Dengan mencari di sini, saya bermaksud mengeluarkan pertanyaan apa pun yang hasilnya tergantung pada nilai kolom
TEXT
atauVARCHAR
. Ini termasuk menggunakannya dalam kondisiJOIN
atau apa punWHERE
.Karena
TEXT
disimpan di luar baris, kueri yang tidak melibatkanTEXT
kolom biasanya lebih cepat.Beberapa contoh apa
TEXT
yang baik untuk:Beberapa contoh apa
VARCHAR
yang baik untuk:Sebagai aturan praktis, jika Anda membutuhkan nilai teks melebihi 200 karakter DAN jangan gunakan gabung di kolom ini, gunakan
TEXT
.Kalau tidak gunakan
VARCHAR
.PS Hal yang sama berlaku untuk
UNICODE
diaktifkanNTEXT
danNVARCHAR
juga, yang harus Anda gunakan untuk contoh di atas.PPS Hal yang sama berlaku untuk
VARCHAR(MAX)
danNVARCHAR(MAX)
yang digunakan oleh SQL Server 2005+ alih-alihTEXT
danNTEXT
. Anda harus mengaktifkannyalarge value types out of row
dengansp_tableoption
jika Anda ingin mereka selalu disimpan di luar baris.Seperti yang disebutkan di atas dan di sini ,
TEXT
akan ditinggalkan dalam rilis mendatang:sumber
Dalam SQL server 2005 tipe data baru diperkenalkan:
varchar(max)
dannvarchar(max)
Mereka memiliki kelebihan dari jenis teks lama: mereka dapat berisi op 2GB data, tetapi mereka juga memiliki sebagian besar kelebihanvarchar
dannvarchar
. Di antara kelebihan ini adalah kemampuan untuk menggunakan fungsi manipulasi string seperti substring ().Juga, varchar (maks) disimpan di ruang (disk / memori) tabel sementara ukurannya di bawah 8Kb. Hanya ketika Anda menempatkan lebih banyak data di bidang, itu disimpan di luar ruang tabel. Data yang disimpan dalam ruang tabel (biasanya) diambil lebih cepat.
Singkatnya, jangan pernah menggunakan Teks, karena ada alternatif yang lebih baik: (n) varchar (maks). Dan hanya menggunakan varchar (maks) ketika varchar biasa tidak cukup besar, yaitu jika Anda mengharapkan string yang akan Anda simpan akan melebihi 8000 karakter.
Seperti disebutkan, Anda dapat menggunakan SUBSTRING pada tipe data TEXT, tetapi hanya selama bidang TEXT berisi kurang dari 8000 karakter.
sumber
Ada beberapa perubahan besar dalam ms 2008 -> Mungkin patut dipertimbangkan artikel berikut saat membuat keputusan tentang tipe data apa yang akan digunakan. http://msdn.microsoft.com/en-us/library/ms143432.aspx
Bytes per
sumber