首页 > 数据库 > SQL > 正文

LENGTH()与CHAR_LENGTH()有何不同?中文字符长度计算的特殊处理

蓮花仙者
发布: 2025-07-07 13:33:02
原创
883人浏览过

length() 计算字节数,char_length() 计算字符数。一、length() 返回字符串所占字节数,在 utf8mb4 中一个中文占 3 或 4 字节,如 '你好' 的 length() 为 6;二、char_length() 返回实际字符个数,不受编码影响,如 '你好' 的 char_length() 为 2;三、应用场景:验证用户输入字符数用 char_length(),判断字节限制用 length();四、编码不同结果不同,在 latin1 中两者一致,在 utf8mb4 中则有差异。

LENGTH()与CHAR_LENGTH()有何不同?中文字符长度计算的特殊处理

在处理中文字符时,LENGTH() 和 CHAR_LENGTH() 看起来都是用来计算字符串长度的函数,但它们之间有一个非常关键的区别一个看字节,一个看字符。

LENGTH()与CHAR_LENGTH()有何不同?中文字符长度计算的特殊处理

这个区别在操作中文、日文、韩文等使用多字节编码的语言时尤其重要。

LENGTH()与CHAR_LENGTH()有何不同?中文字符长度计算的特殊处理

一、LENGTH() 计算的是字节数

MySQL 中的 LENGTH() 函数返回的是字符串所占的字节数,而不是字符数。

比如你用的是 utf8mb4 编码(支持中文和表情),一个中文字符通常占用 3 或 4 个字节。所以如果你写:

LENGTH()与CHAR_LENGTH()有何不同?中文字符长度计算的特殊处理
SELECT LENGTH('你好');
登录后复制

结果是 6(每个“你”和“好”各占 3 字节)。

常见误区:很多人以为字符串长度就是字符个数,但在数据库里,LENGTH() 并不是这么工作的。

二、CHAR_LENGTH() 看的是字符数量

而 CHAR_LENGTH() 返回的是字符串中字符的实际个数,不管它用了多少字节。

还是上面的例子:

SELECT CHAR_LENGTH('你好');
登录后复制

结果是 2,因为“你好”就是两个字符。

这点在做内容限制或截断逻辑的时候特别重要。比如你要判断某个字段是否超过 10 个汉字,用 CHAR_LENGTH() 才靠谱。


三、常见应用场景对比

  • ✅ 验证用户输入的中文字符数是否符合要求(如昵称最多 10 个字) → 使用 CHAR_LENGTH()
  • ✅ 判断数据是否超出列的字节限制(如 varchar(255) 在 utf8mb4 下只能存 85 个中文) → 使用 LENGTH()
  • ❌ 错误地用 LENGTH() 来限制字符数,可能导致误判

举个例子:

-- 想判断是否超过 10 个中文?
SELECT * FROM users WHERE CHAR_LENGTH(name) > 10;

-- 想检查 name 是否超出了 30 字节?
SELECT * FROM users WHERE LENGTH(name) > 30;
登录后复制

四、小细节:编码不同,结果也不同

  • 如果你的表用的是 latin1 编码,那每个字符就是一个字节,这时候 LENGTH() 和 CHAR_LENGTH() 结果一样。
  • 但如果用了 utf8mb4,像中文、emoji 这类字符就会占用更多字节,两者差距就出来了。

总的来说,需要关心具体有多少个汉字、字母、符号时,用 CHAR_LENGTH();需要考虑存储空间、字节限制时,用 LENGTH()

基本上就这些,不复杂但容易搞混。

以上就是LENGTH()与CHAR_LENGTH()有何不同?中文字符长度计算的特殊处理的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号