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 set

Maxlen列存储字符集的字节数。在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函数来获取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字符集来存储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 set

CHAR_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字符串长度函数来获取字符串的长度(以字节为单位)。

¥ 我要打赏

纠错/补充

收藏

加QQ群啦,易百教程官方技术学习群

注意:建议每个人选自己的技术方向加群,同一个QQ最多限加 3 个群。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值