MySQL字符串长度
轉載自??MySQL字符串長度
在本教程中,您將了解MySQL字符串長度函數,使您可以以字節為單位獲取字符串的長度。
MySQL支持各種字符集,如latin1,utf8等。可以使用SHOW CHARACTER SET語句來獲取MySQL數據庫服務器支持的所有字符集。
mysql> SHOW CHARACTER SET; +----------+---------------------------------+---------------------+--------+ | Charset | Description | Default collation | Maxlen | +----------+---------------------------------+---------------------+--------+ | big5 | Big5 Traditional Chinese | big5_chinese_ci | 2 | | dec8 | DEC West European | dec8_swedish_ci | 1 | | cp850 | DOS West European | cp850_general_ci | 1 | | hp8 | HP West European | hp8_english_ci | 1 | | koi8r | KOI8-R Relcom Russian | koi8r_general_ci | 1 | | latin1 | cp1252 West European | latin1_swedish_ci | 1 | | latin2 | ISO 8859-2 Central European | latin2_general_ci | 1 | | swe7 | 7bit Swedish | swe7_swedish_ci | 1 | | ascii | US ASCII | ascii_general_ci | 1 | | ujis | EUC-JP Japanese | ujis_japanese_ci | 3 | | sjis | Shift-JIS Japanese | sjis_japanese_ci | 2 | | hebrew | ISO 8859-8 Hebrew | hebrew_general_ci | 1 | | tis620 | TIS620 Thai | tis620_thai_ci | 1 | | euckr | EUC-KR Korean | euckr_korean_ci | 2 | | koi8u | KOI8-U Ukrainian | koi8u_general_ci | 1 | | gb2312 | GB2312 Simplified Chinese | gb2312_chinese_ci | 2 | | greek | ISO 8859-7 Greek | greek_general_ci | 1 | | cp1250 | Windows Central European | cp1250_general_ci | 1 | | gbk | GBK Simplified Chinese | gbk_chinese_ci | 2 | | latin5 | ISO 8859-9 Turkish | latin5_turkish_ci | 1 | | armscii8 | ARMSCII-8 Armenian | armscii8_general_ci | 1 | | utf8 | UTF-8 Unicode | utf8_general_ci | 3 | | ucs2 | UCS-2 Unicode | ucs2_general_ci | 2 | | cp866 | DOS Russian | cp866_general_ci | 1 | | keybcs2 | DOS Kamenicky Czech-Slovak | keybcs2_general_ci | 1 | | macce | Mac Central European | macce_general_ci | 1 | | macroman | Mac West European | macroman_general_ci | 1 | | cp852 | DOS Central European | cp852_general_ci | 1 | | latin7 | ISO 8859-13 Baltic | latin7_general_ci | 1 | | utf8mb4 | UTF-8 Unicode | utf8mb4_general_ci | 4 | | cp1251 | Windows Cyrillic | cp1251_general_ci | 1 | | utf16 | UTF-16 Unicode | utf16_general_ci | 4 | | utf16le | UTF-16LE Unicode | utf16le_general_ci | 4 | | cp1256 | Windows Arabic | cp1256_general_ci | 1 | | cp1257 | Windows Baltic | cp1257_general_ci | 1 | | utf32 | UTF-32 Unicode | utf32_general_ci | 4 | | binary | Binary pseudo charset | binary | 1 | | geostd8 | GEOSTD8 Georgian | geostd8_general_ci | 1 | | cp932 | SJIS for Windows Japanese | cp932_japanese_ci | 2 | | eucjpms | UJIS for Windows Japanese | eucjpms_japanese_ci | 3 | | gb18030 | China National Standard GB18030 | gb18030_chinese_ci | 4 | +----------+---------------------------------+---------------------+--------+ 41 rows in setMaxlen列存儲字符集的字節數。在MySQL中,一個字符串可以是任何字符集。 如果一個字符串包含1個字節的字符,則其字符長度和以字節為單位測量的長度相等。 但是,如果字符串包含多字節字符,則其字節長度通常大于字符長度。
要獲取以字節為單位的字符串長度,請使用LENGTH函數,如下所示:
LENGTH(str);可以使用CHAR_LENGTH函數獲取字符串的長度,以字符為單位計算長度,如下所示:
CHAR_LENGTH(str);?
LENGTH和CHAR_LENGTH函數的示例
我們來看看下面的內容:
mysql> SET @s = CONVERT('MySQL String Length' USING ucs2); SELECT CHAR_LENGTH(@s), LENGTH(@s); Query OK, 0 rows affected+-----------------+------------+ | CHAR_LENGTH(@s) | LENGTH(@s) | +-----------------+------------+ | 19 | 38 | +-----------------+------------+ 1 row in set上面查詢語句是如何工作的?
- 首先,我們將MySQL字符串長度字符串轉換為ucs2字符集,這是UCS-2 Unicode,指定一個字符存儲為2個字節。
- 其次,分別使用CHAR_LENGTH和LENGTH函數來獲取@s字符串的長度(以字節為單位)。因為@s字符串以2個字節來存儲每個字符,所以其字符長度為19,而字節長度為38?。
以下語句演示了LENGTH和CHAR_LENGTH函數如何使用1個字節來存儲每個字符:
SET @s = CONVERT('MySQL string length' USING latin1); SELECT LENGTH(@s), CHAR_LENGTH(@s);執行上面查詢語句,得到以下結果 -
+------------+-----------------+ | LENGTH(@s) | CHAR_LENGTH(@s) | +------------+-----------------+ | 19 | 19 | +------------+-----------------+ 1 row in set我們使用latin1字符集來存儲@s字符串。?latin1字符集是使用1個字節來存儲每個字符的; 因此,其字節長度和字符長度相等。
請注意,某些字符集可以更改字符的存儲字節數,例如,utf8字符集:
SET @s = CONVERT('MySQL String Length' USING utf8); SELECT CHAR_LENGTH(@s), LENGTH(@s);執行上面查詢語句,得到以下結果 -
mysql> SET @s = CONVERT('MySQL String Length' USING utf8); SELECT CHAR_LENGTH(@s), LENGTH(@s); Query OK, 0 rows affected+-----------------+------------+ | CHAR_LENGTH(@s) | LENGTH(@s) | +-----------------+------------+ | 19 | 19 | +-----------------+------------+ 1 row in setCHAR_LENGTH和LENGTH返回相同的結果。 但是,如果一個字符串有特殊字符,結果是不同的。 請參閱以下示例:
mysql> SET @s = CONVERT('á' USING utf8); SELECT CHAR_LENGTH(@s), LENGTH(@s); Query OK, 0 rows affected+-----------------+------------+ | CHAR_LENGTH(@s) | LENGTH(@s) | +-----------------+------------+ | 1 | 2 | +-----------------+------------+ 1 row in set中文字符串存儲多少位?看看下面查詢就知道了 -
mysql> SET @s = CONVERT('易百教程' USING utf8); SELECT CHAR_LENGTH(@s), LENGTH(@s); Query OK, 0 rows affected+-----------------+------------+ | CHAR_LENGTH(@s) | LENGTH(@s) | +-----------------+------------+ | 4 | 12 | +-----------------+------------+ 1 row in set?
一個應用程序的MySQL字符串長度函數
假設我們有一個posts表,用于存儲具有四列:postid,?title,?excerpt?和?content(為了演示目的,所以posts表盡可能簡單)。
首先,我們使用CREATE TABLE語句創建posts表:
USE testdb; CREATE TABLE posts(postid int auto_increment primary key,title varchar(255) NOT NULL,excerpt varchar(255) NOT NULL,content text,pubdate datetime )Engine=InnoDB;其次,通過使用INSERT語句將一些博客帖子插入到posts表中:
INSERT INTO posts(title,excerpt,content) VALUES('MySQL Length','MySQL string length function tutorial','dummy'),('Second blog post','Second blog post','dummy');我們可以使用CHAR_LENGTH函數來檢查是否有超過20個字符,如果超過了,則附加省略號(...),如下查詢語句:
SELECT postid,title,IF(CHAR_LENGTH(excerpt) > 20,CONCAT(LEFT(excerpt,20), '...'),excerpt) summary FROM posts;執行上面查詢語句,得到以下結果 -
+--------+------------------+-------------------------+ | postid | title | summary | +--------+------------------+-------------------------+ | 1 | MySQL Length | MySQL string length ... | | 2 | Second blog post | Second blog post | +--------+------------------+-------------------------+ 2 rows in set在SELECT語句中,我們使用IF函數來檢查摘錄列的長度是否大于20,并使用CONCAT語句將excerpt列的值與省略號(...)連接起來,否則只是獲取全部摘錄(excerpt)內容。
在本教程中,我們向您展示了如何使用MySQL字符串長度函數來獲取字符串的長度(以字節為單位)。
總結
以上是生活随笔為你收集整理的MySQL字符串长度的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL concat()函数
- 下一篇: 2500的电脑配置清单(2500的电脑配