摘要:在本教程中,您将了解MySQL 字符串长度函数,这些函数允许您获取以字节和字符为单位的字符串长度。
MySQL支持多种字符集,如latin1
、 utf8
等。您可以使用SHOW CHARACTER SET
语句来获取MySQL数据库服务器支持的所有字符集。
SHOW CHARACTER SET;
Code language: SQL (Structured Query Language) (sql)
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 String Length
字符串转换为ucs2
字符集,即保存 2 字节字符的UCS-2
Unicode。 - 其次,我们使用
CHAR_LENGTH
和LENGTH
函数来获取the @s
字符串的长度(以字节和字符为单位)。因为@s
字符串包含2个字节的字符,所以它的字符长度是19,而它的字节长度是38。
以下语句演示了LENGTH
和CHAR_LENGTH
函数如何处理 1 字节字符:
SET @s = CONVERT('MySQL string length' USING latin1);
SELECT LENGTH(@s), CHAR_LENGTH(@s);
Code language: SQL (Structured Query Language) (sql)
我们对@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)
CHAR_LENGTH
和LENGTH
返回相同的结果。但是,如果字符串中有特殊字符,则结果不同。请参见以下示例:
SET @s = CONVERT('á' USING utf8);
SELECT CHAR_LENGTH(@s), LENGTH(@s);
Code language: SQL (Structured Query Language) (sql)
MySQL字符串长度函数的应用
假设我们有一个posts
表,用于存储包含四列postid
、 title
、 excerpt
和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;
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)
在SELECT 语句中,我们使用IF
函数检查excerpt
列的长度是否大于 20,我们使用CONCAT
语句将excerpt
与省略号 (…) 连接起来,否则我们只得到excerpt
。
在本教程中,我们向您展示了如何使用 MySQL 字符串长度函数来获取字符串的长度(以字节和字符为单位)。
参考
- http://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_length – MySQL LENGTH 函数
- http://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_char-length – MySQL CHAR_LENGTH 函数