這兩個函數都是字符串函數,并返回字符串中存在的字符數。但它們的不同之處在于 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() 函數有什么區別?的詳細內容,更多請關注www.92cms.cn其它相關文章!