這兩個函數都是字串函數,並且傳回字串中存在的字元數。但它們的不同之處在於 CHAR_LENGTH() 函數以「字元」為單位測量字串長度,而 LENGTH() 函數以「位元組」為單位測量字串長度。換句話說,我們可以說 CHAR_LENGTH() 函數是多位元組安全的,也就是它忽略字元是單字節還是多位元組。例如,如果一個字串包含四個 2 位元組字符,則 LENGTH()。
函數會傳回 8,而 CHAR_LENGTH() 函數將會傳回 4。從這個意義上來說,我們可以說 CHAR_LENGTH()給出的結果比 LENGTH() 函數更精確。
這種差異與 Unicode 特別相關,其中大多數字元都以兩個位元組進行編碼,或與 UTF-8 相關,其中位元組數各不相同。下面的範例示範了-
在下面的範例中,首先,字串'Gaurav' 被轉換為ucs2 strong>,即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)
以上是MySQL LENGTH() 和 CHAR_LENGTH() 函數有什麼不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!