MySQL 的 LENGTH() 函式如何測量字串長度?


MySQL LENGTH() 函式以“位元組”為單位測量字串長度,這意味著它不是多位元組安全的。多位元組安全函式(如 CHAR_LENGTH() 或 CHARACTER_LENGTH())與 LENGTH() 函式的結果差異,尤其體現在 Unicode 中(大多數字符使用兩個位元組編碼)或 UTF-8 中(位元組數可變)。例如,如果一個字串包含四個 2 位元組字元,則 LENGTH() 函式將返回 8,而 CHAR_LENGTH() 或 CHARACTER_LENGTH() 函式將返回 4。如下例所示:

示例

mysql> Select LENGTH('tutorialspoint');
+--------------------------+
| LENGTH('tutorialspoint') |
+--------------------------+
|                       14 |
+--------------------------+
1 row in set (0.00 sec)

上述結果集顯示字串“tutorialspoint”的長度為 14,因為它尚未轉換為 Unicode 字元。以下查詢將其轉換為 Unicode 字元:

mysql> SET @A = CONVERT('tutorialspoint' USING ucs2);
Query OK, 0 rows affected (0.02 sec)

將字串轉換為 Unicode 後,結果為 28 而不是 14,因為在 Unicode 中,單個字元佔用 2 個位元組,如下所示:

mysql> Select LENGTH(@A);
+------------+
| LENGTH(@A) |
+------------+
|         28 |
+------------+
1 row in set (0.00 sec)

但是 CHAR_LENGTH() 返回的結果為 14,因為它是一個多位元組安全函式,如下所示:

mysql> Select CHAR_LENGTH(@A);
+-----------------+
| CHAR_LENGTH(@A) |
+-----------------+
|              14 |
+-----------------+
1 row in set (0.00 sec)

更新於:2020年6月20日

201 次檢視

開啟您的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.