length() 计算字节数,char_length() 计算字符数。一、length() 返回字符串所占字节数,在 utf8mb4 中一个中文占 3 或 4 字节,如 '你好' 的 length() 为 6;二、char_length() 返回实际字符个数,不受编码影响,如 '你好' 的 char_length() 为 2;三、应用场景:验证用户输入字符数用 char_length(),判断字节限制用 length();四、编码不同结果不同,在 latin1 中两者一致,在 utf8mb4 中则有差异。
在处理中文字符时,LENGTH() 和 CHAR_LENGTH() 看起来都是用来计算字符串长度的函数,但它们之间有一个非常关键的区别:一个看字节,一个看字符。
这个区别在操作中文、日文、韩文等使用多字节编码的语言时尤其重要。
MySQL 中的 LENGTH() 函数返回的是字符串所占的字节数,而不是字符数。
比如你用的是 utf8mb4 编码(支持中文和表情),一个中文字符通常占用 3 或 4 个字节。所以如果你写:
SELECT LENGTH('你好');
结果是 6(每个“你”和“好”各占 3 字节)。
常见误区:很多人以为字符串长度就是字符个数,但在数据库里,LENGTH() 并不是这么工作的。
而 CHAR_LENGTH() 返回的是字符串中字符的实际个数,不管它用了多少字节。
还是上面的例子:
SELECT CHAR_LENGTH('你好');
结果是 2,因为“你好”就是两个字符。
这点在做内容限制或截断逻辑的时候特别重要。比如你要判断某个字段是否超过 10 个汉字,用 CHAR_LENGTH() 才靠谱。
举个例子:
-- 想判断是否超过 10 个中文? SELECT * FROM users WHERE CHAR_LENGTH(name) > 10; -- 想检查 name 是否超出了 30 字节? SELECT * FROM users WHERE LENGTH(name) > 30;
总的来说,需要关心具体有多少个汉字、字母、符号时,用 CHAR_LENGTH();需要考虑存储空间、字节限制时,用 LENGTH()。
基本上就这些,不复杂但容易搞混。
以上就是LENGTH()与CHAR_LENGTH()有何不同?中文字符长度计算的特殊处理的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号