MySQL String Length

摘要:在本教程中,您将了解MySQL 字符串长度函数,这些函数允许您获取以字节和字符为单位的字符串长度。

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

SHOW CHARACTER SET;Code language: SQL (Structured Query Language) (sql)
mysql 字符集

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

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

LENGTH(str);Code language: SQL (Structured Query Language) (sql)

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

CHAR_LENGTH(str);Code language: SQL (Structured Query Language) (sql)

LENGTH 和 CHAR_LENGTH 函数的示例

我们来看看以下的说法:

SET @s = CONVERT('MySQL String Length' USING ucs2);
SELECT CHAR_LENGTH(@s), LENGTH(@s);Code language: SQL (Structured Query Language) (sql)
MySQL 字符串长度 - LENGTH 和 CHAR_LENGTH

怎么运行的。

  • 首先,我们将MySQL String Length字符串转换为ucs2字符集,即保存 2 字节字符的UCS-2 Unicode。
  • 其次,我们使用CHAR_LENGTHLENGTH函数来获取the @s字符串的长度(以字节和字符为单位)。因为@s字符串包含2个字节的字符,所以它的字符长度是19,而它的字节长度是38。

以下语句演示了LENGTHCHAR_LENGTH函数如何处理 1 字节字符:

SET @s = CONVERT('MySQL string length' USING latin1);
SELECT LENGTH(@s), CHAR_LENGTH(@s);Code language: SQL (Structured Query Language) (sql)
MySQL 字符串长度 - 1 字节字符

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

请注意,某些字符集保存的字符的字节数可以变化,例如,对于utf8字符集:

SET @s = CONVERT('MySQL String Length' USING utf8);
SELECT CHAR_LENGTH(@s), LENGTH(@s);Code language: SQL (Structured Query Language) (sql)
MySQL String Length - multi-byte characters

CHAR_LENGTHLENGTH返回相同的结果。但是,如果字符串中有特殊字符,则结果不同。请参见以下示例:

SET @s = CONVERT('á' USING utf8);
SELECT CHAR_LENGTH(@s), LENGTH(@s);Code language: SQL (Structured Query Language) (sql)
MySQL 字符串长度 - 2 字节字符

MySQL字符串长度函数的应用

假设我们有一个posts表,用于存储包含四列postidtitleexcerptcontent博客文章。 (出于演示目的,我们使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;Code language: SQL (Structured Query Language) (sql)

其次,我们使用INSERT 语句将一些博客文章插入posts表中:

INSERT INTO posts(title,excerpt,content)
VALUES('MySQL Length','MySQL string length function tutorial','dummy'),
      ('Second blog post','Second blog post','dummy');Code language: SQL (Structured Query Language) (sql)

我们可以使用CHAR_LENGTH函数来检查 except 是否超过 20 个字符,我们在摘录中附加省略号 (…),如下查询:

SELECT postid,
       title,
       IF(CHAR_LENGTH(excerpt) > 20,
          CONCAT(LEFT(excerpt,20), '...'),
          excerpt) summary
FROM posts;Code language: SQL (Structured Query Language) (sql)
MySQL字符串长度应用

SELECT 语句中,我们使用IF函数检查excerpt列的长度是否大于 20,我们使用CONCAT语句将excerpt与省略号 (…) 连接起来,否则我们只得到excerpt

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

参考

本教程有帮助吗?