MySQL 的 LENGTH() 函式和 CHAR_LENGTH() 函式有什麼區別?
這兩個函式都是字串函式,都返回字串中存在的字元數量。但它們在概念上有所不同:CHAR_LENGTH() 函式以“字元”為單位測量字串長度,而 LENGTH() 函式以“位元組”為單位測量字串長度。換句話說,我們可以說 CHAR_LENGTH() 函式是多位元組安全的,即它忽略字元是單位元組還是多位元組。例如,如果一個字串包含四個 2 位元組字元,那麼 LENGTH()。
函式將返回 8,而 CHAR_LENGTH() 函式將返回 4。從這個意義上說,我們可以說 CHAR_LENGTH() 比 LENGTH() 函式給出更精確的結果。
這種差異對於 Unicode 尤其重要,在 Unicode 中,大多數字符都編碼為兩個位元組,或者對於 UTF-8 尤其重要,在 UTF-8 中,位元組數是可變的。以下示例演示了這一點:
示例
在下面的這個例子中,首先,字串“Gaurav”被轉換為 **ucs2**,它是 Unicode 並且包含 2 位元組字元的字元集。然後我們可以從結果集中觀察到差異,即 LENGTH() 返回以位元組數表示的長度,而 CHAR_LENGTH() 返回以字元數表示的長度。
mysql> SET @A = CONVERT('Gaurav' USING ucs2);
Query OK, 0 rows affected (0.15 sec)
mysql> Select Char_length(@A), LENGTH(@A);
+-----------------+------------+
| Char_length(@A) | LENGTH(@A) |
+-----------------+------------+
| 6 | 12 |
+-----------------+------------+
1 row in set (0.03 sec)現在,在下面的示例中,我們正在使用 **UTF-8** 中的一個特殊字元,其中位元組數是可變的,字元集。然後我們可以從結果集中觀察到差異。
mysql> SET @B = CONVERT('©' USING utf8);
Query OK, 0 rows affected (0.15 sec)
mysql> Select CHAR_LENGTH(@B);
+-----------------------+
| CHAR_LENGTH(@B) |
+-----------------------+
| 1 |
+-----------------------+
1 row in set (0.00 sec)
mysql> Select LENGTH(@B);
+---------------+
| LENGTH(@B) |
+---------------+
| 2 |
+---------------+
1 row in set (0.00 sec)
廣告
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP