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)

更新於: 2020年6月20日

3K+ 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.