Di MySQL, ada banyak waktu di mana length()
fungsi dan char_length()
fungsi akan memberikan hasil yang persis sama. Namun, ada juga saat-saat di mana hasilnya akan sangat berbeda. Inilah alasannya.
Pertama, inilah definisi untuk masing-masing fungsi ini:
char_length()
- Mengembalikan panjang string, diukur dalam karakter.
length()
- Mengembalikan panjang string, diukur dalam byte.
Perhatikan “karakter” vs “byte” – satu diukur dalam karakter , yang lainnya diukur dalam byte .
Dalam banyak kasus, jumlah byte akan sama dengan jumlah karakter dalam string, tetapi ini tidak selalu terjadi. Jumlah byte yang digunakan per karakter tergantung pada bagaimana data disimpan. Misalnya, jika string disimpan sebagai data Unicode, akan ada 2 byte per karakter.
Berikut adalah contoh dasar menggunakan teks ASCII (di mana kedua fungsi mengembalikan hasil yang sama):
SELECT CHAR_LENGTH('Lit'), LENGTH('Lit');
Hasil:
+--------------------+---------------+ | CHAR_LENGTH('Lit') | LENGTH('Lit') | +--------------------+---------------+ | 3 | 3 | +--------------------+---------------+
Dan seringkali kita akan mendapatkan hasil yang sama jika string tersebut disimpan dalam database:
SELECT CHAR_LENGTH(ArtistName), LENGTH(ArtistName) FROM Artists WHERE ArtistName = 'Lit';
Hasil:
+-------------------------+--------------------+ | CHAR_LENGTH(ArtistName) | LENGTH(ArtistName) | +-------------------------+--------------------+ | 3 | 3 | +-------------------------+--------------------+
Namun, jika kita mengubah kolom database untuk menyimpan data sebagai unicode:
ALTER TABLE Artists MODIFY COLUMN ArtistName VARCHAR(255) unicode;
Dan kemudian jalankan kueri yang sama lagi:
SELECT CHAR_LENGTH(ArtistName), LENGTH(ArtistName) FROM Artists WHERE ArtistName = 'Lit';
Kami mendapatkan hasil yang berbeda:
+-------------------------+--------------------+ | CHAR_LENGTH(ArtistName) | LENGTH(ArtistName) | +-------------------------+--------------------+ | 3 | 6 | +-------------------------+--------------------+
Ini karena unicode menyimpan setiap karakter sebagai 2 byte.
Ini mirip dengan perbedaan antara datalength()
dan len()
di T-SQL.
MySQL juga memiliki octet_length()
fungsi, yang merupakan sinonim untuk length()
.