Saat menggunakan T-SQL di SQL Server (atau Azure) LEN()
dan DATALENGTH()
fungsi akan sering mengembalikan hasil yang sama, tetapi tidak selalu. Ada beberapa kasus di mana fungsi-fungsi ini akan mengembalikan hasil yang sama sekali berbeda untuk apa yang tampak sebagai data yang sama. Ini karena ada perbedaan penting antara cara LEN()
dan DATALENGTH()
fungsi berfungsi, seperti yang akan kita lihat di sini.
Pertama, inilah definisi singkat dari masing-masing:
LEN()
- Mengembalikan jumlah karakter dari ekspresi string yang ditentukan, tidak termasuk trailing blank.
DATALENGTH()
- Mengembalikan jumlah byte yang digunakan untuk mewakili ekspresi apa pun.
Catatan "karakter" vs "byte". Perhatikan juga bahwa “tidak termasuk trailing blank” hanya berlaku untuk satu.
Berikut adalah beberapa contoh untuk menunjukkan perbedaan antara LEN()
dan DATALENGTH()
.
Trailing Blank
Satu perbedaan antara LEN()
dan DATALENGTH()
fungsinya adalah LEN()
fungsi tidak termasuk trailing blank (spasi di belakang, tab, dll) sedangkan DATALENGTH()
termasuk tertinggal kosong. Perhatikan, kita hanya berbicara tentang kekosongan yang muncul di akhir string – bukan di awal atau di tengah.
Berikut ini contoh tanpa trailing blank:
SELECT LEN('Lit') AS Len, DATALENGTH('Lit') AS DataLength;
Hasil:
Len DataLength --- ---------- 3 3
Dan inilah contoh dengan trailing blank:
SELECT LEN('Lit ') AS Len, DATALENGTH('Lit ') AS DataLength;
Hasil:
Len DataLength --- ---------- 3 4
Namun, spasi awal dihitung oleh kedua fungsi:
SELECT LEN(' Lit') AS Len, DATALENGTH(' Lit') AS DataLength;
Hasil:
Len DataLength --- ---------- 4 4
Byte vs Karakter
Perbedaan utama lainnya antara LEN()
dan DATALENGTH()
apakah itu LEN()
fungsi mengembalikan jumlah karakter dalam sebuah string. Di sisi lain, DATALENGTH()
mengembalikan jumlah byte dalam sebuah ekspresi.
Ini adalah perbedaan penting karena jumlah byte dalam ekspresi tidak selalu cocok dengan jumlah karakter dalam string. Saat memproses string unicode, DATALENGTH()
akan mengembalikan dua kali jumlah karakter. Ini karena string unicode menyimpan 2 byte per karakter.
Pada contoh di atas, kita melihat bahwa keduanya LEN()
dan DATALENGTH()
mengembalikan hasil yang sama untuk kata Lit
(
3
). Namun, begitu kita mulai mengkueri database, hasilnya akan bergantung pada cara data disimpan. Misalnya, jika disimpan sebagai varchar , hasilnya akan sama. Jika disimpan sebagai nvarchar DATALENGTH()
fungsi akan mengembalikan dua kali jumlah karakter. Dan jika disimpan sebagai katakanlah, char(25) , DATALENGTH()
akan mengembalikan tepat 25 karakter.
Contoh
Mari kita jalankan kueri berikut:
SELECT ArtistName, LEN(ArtistName) AS Len, DATALENGTH(ArtistName) AS DataLength FROM Artists WHERE ArtistName = 'Lit';
Hasil kueri ini akan bergantung pada cara data disimpan.
nvarchar(255)
Jika ArtistName
kolom menyimpan data sebagai nvarchar(255) :
ArtistName Len DataLength ---------- --- ---------- Lit 3 6
varchar(255)
Jika kita mengubah kolom itu menjadi varchar(255) , kita mendapatkan hasil sebagai berikut:
ArtistName Len DataLength ---------- --- ---------- Lit 3 3
char(25)
Jika kita mengubah kolom itu menjadi char(25) , kita mendapatkan hasil sebagai berikut:
ArtistName Len DataLength ------------------------- --- ---------- Lit 3 25
Jadi mungkin moral untuk semua ini adalah, jika Anda mendapati diri Anda mendapatkan hasil yang aneh saat mencoba mengambil panjang string, dll, periksa apakah Anda menggunakan fungsi yang benar.