Apa perbedaan utama antara length()
dan char_length()
?
Saya percaya ini ada hubungannya dengan string biner dan non-biner. Apakah ada alasan praktis untuk menyimpan string sebagai biner?
mysql> select length('MySQL'), char_length('MySQL');
+-----------------+----------------------+
| length('MySQL') | char_length('MySQL') |
+-----------------+----------------------+
| 5 | 5 |
+-----------------+----------------------+
1 row in set (0.01 sec)
Jawaban:
LENGTH()
mengembalikan panjang string yang diukur dalam byte .CHAR_LENGTH()
mengembalikan panjang string yang diukur dalam karakter .Ini sangat relevan untuk Unicode, di mana sebagian besar karakter dikodekan dalam dua byte. Atau UTF-8, di mana jumlah byte bervariasi. Sebagai contoh:
Seperti yang Anda lihat tanda Euro menempati 3 byte (itu dikodekan seperti
0xE282AC
pada UTF-8) meskipun itu hanya satu karakter.sumber
0313 combining comma above
. Karena a = 61, 0x00610313 ditampilkan sebagai a̓, dan ini membutuhkan 4 byte.varchar (10) akan menyimpan 10 karakter, yang mungkin lebih dari 10 byte. Dalam indeks, itu akan mengalokasikan panjang maksimal bidang - jadi jika Anda menggunakan UTF8-mb4, itu akan mengalokasikan 40 byte untuk bidang 10 karakter.
sumber