MySQL字符串的长度

时间:2019-11-20 08:52:24  来源:igfitidea点击:

简介:在本教程中,您将学习MySQL字符串长度函数,该函数允许您获取以字节和字符为单位的字符串长度。

MySQL支持各种字符集,例如latin1,utf8等。
您可以使用SHOW CHARACTER SET语句来获取MySQL数据库服务器支持的所有字符集。

SHOW CHARACTER SET;

Maxlen列存储字符集的字节数。
在MySQL中,字符串可以是任何字符集。
如果字符串包含1个字节的字符,则其长度(以字符为单位)和长度(以字节为单位)相等。
但是,如果字符串包含多字节字符,则其长度(以字节为单位)通常大于其长度(以字符为单位)。

要获取以字节为单位的字符串长度,请使用LENGTH函数,如下所示:

LENGTH(str);

您可以使用CHAR_LENGTH函数来获取以字符为单位的字符串长度,如下所示:

CHAR_LENGTH(str);

LENGTH和CHAR_LENGTH函数的示例

让我们看一下以下语句:

SET @s = CONVERT('MySQL String Length' USING ucs2);
SELECT CHAR_LENGTH(@s), LENGTH(@s);

这个怎么运作。

  • 首先,我们将MySQL字符串长度字符串转换为ucs2字符集,这是UCS-2 Unicode,包含2个字节的字符。

  • 其次,我们使用CHAR_LENGTH和LENGTH函数来获取@s字符串的长度(以字节和字符为单位)。
    由于@s字符串包含2个字节的字符,因此其字符长度为19,而其字节长度为38。

以下语句演示了如何使用1字节字符的LENGTH和CHAR_LENGTH函数:

SET @s = CONVERT('MySQL string length' USING latin1);
SELECT LENGTH(@s), CHAR_LENGTH(@s);

我们为@s字符串使用latin1字符集。
latin1字符集包含1个字节的字符;因此,它的字节长度和字符长度相等。

请注意,某些字符集包含的字符其字节数可以更改,例如,对于utf8字符集:

SET @s = CONVERT('MySQL String Length' USING utf8);
SELECT CHAR_LENGTH(@s), LENGTH(@s);

CHAR_LENGTH和LENGTH返回相同的结果。
但是,如果字符串包含特殊字符,则结果会有所不同。
请参见以下示例:

SET @s = CONVERT('á' USING utf8);
SELECT CHAR_LENGTH(@s), LENGTH(@s);

MySQL字符串长度函数的应用

假设我们有一个posts表,该表存储博客文章,其中postid,title,excertpt和content四列。
(出于演示目的,我们使posts表尽可能简单)。

首先,我们使用CREATE TABLE语句创建posts表:

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函数来检查except是否超过20个字符,我们在摘录中附加省略号(...)作为以下查询:

SELECT postid,
       title,
       IF(CHAR_LENGTH(excerpt) > 20,
          CONCAT(LEFT(excerpt,20), '...'),
          excerpt) summary
FROM posts;

在SELECT语句中,我们使用IF函数来检查摘录列的长度是否大于20,通过使用CONCAT语句将摘录与省略号(...)连接起来,否则就可以得到摘录。

在本教程中,我们向您展示了如何使用MySQL字符串长度函数来获取字符串的长度(以字节和字符为单位)。

参考

  • http://dev.mysql.com/doc/refman/5.7/zh-CN/string-functions.html#function_length – MySQL LENGTH函数
  • http://dev.mysql.com/doc/refman/5.7/zh-CN/string-functions.html#function_char-length – MySQL CHAR_LENGTH函数