這兩個(gè)函數(shù)都是字符串函數(shù),并返回字符串中存在的字符數(shù)。但它們的不同之處在于 CHAR_LENGTH() 函數(shù)以“字符”為單位測(cè)量字符串長度,而 LENGTH() 函數(shù)以“字節(jié)”為單位測(cè)量字符串長度。換句話說,我們可以說 CHAR_LENGTH() 函數(shù)是多字節(jié)安全的,即它忽略字符是單字節(jié)還是多字節(jié)。例如,如果一個(gè)字符串包含四個(gè) 2 字節(jié)字符,則 LENGTH()。
該函數(shù)將返回 8,而 CHAR_LENGTH() 函數(shù)將返回 4。從這個(gè)意義上說,我們可以說 CHAR_LENGTH()給出的結(jié)果比 LENGTH() 函數(shù)更精確。
這種差異與 Unicode 尤其相關(guān),其中大多數(shù)字符都以兩個(gè)字節(jié)進(jìn)行編碼,或者與 UTF-8 相關(guān),其中字節(jié)數(shù)各不相同。下面的示例演示了 –
示例
在下面的示例中,首先,字符串 ‘Gaurav’ 被轉(zhuǎn)換為 ucs2 strong>,即 Unicode,保存 2 字節(jié)字符,字符集。然后我們可以觀察結(jié)果集的差異,即 LENGTH() 返回以字節(jié)數(shù)為單位的長度,而 CHAR_LENGTH() 返回以字符數(shù)為單位的長度。
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)
登錄后復(fù)制
現(xiàn)在,在下面的示例中,我們使用 UTF-8 中的特殊字符,字符集的字節(jié)數(shù)有所不同。然后我們可以從結(jié)果集中觀察差異。
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)
登錄后復(fù)制
以上就是MySQL LENGTH() 和 CHAR_LENGTH() 函數(shù)有什么區(qū)別?的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注www.92cms.cn其它相關(guān)文章!