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)
以上是MySQL LENGTH() 函數如何測量字串長度?的詳細內容。更多資訊請關注PHP中文網其他相關文章!