导读:本期聚焦于小伙伴创作的《如何使用 MySQL OCTET_LENGTH() 函数来计算数据列中存储的字符数?》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《如何使用 MySQL OCTET_LENGTH() 函数来计算数据列中存储的字符数?》有用,将其分享出去将是对创作者最好的鼓励。

MySQL的OCTET_LENGTH()函数用于返回字符串的字节长度,在明确字符集对应规则的前提下,可以通过该函数间接计算数据列中存储的字符数。该函数会直接返回参数对应的字节数,不同字符集下单个字符占用的字节数不同,因此计算字符数时需要结合字符集特性处理。

如何使用 MySQL OCTET_LENGTH() 函数来计算数据列中存储的字符数?

OCTET_LENGTH()函数基本语法

OCTET_LENGTH()函数的语法非常简单,接收一个字符串参数,返回该字符串的字节长度,语法格式如下:

-- 基本语法
OCTET_LENGTH(str)
-- str为需要计算字节长度的字符串,可以是字段名、字符串常量或者表达式

如果传入的参数为NULL,函数会直接返回NULL,使用时需要注意空值的处理。

不同场景下的使用示例

1. 计算字符串常量的字节长度

以常见的utf8mb4字符集为例,演示不同字符的字节长度计算:

-- 查看当前会话字符集
SELECT @@character_set_connection;

-- 计算英文字符的字节长度,utf8mb4下英文字符占1字节
SELECT OCTET_LENGTH('abc') AS byte_length;
-- 返回结果:3

-- 计算中文字符的字节长度,utf8mb4下中文占3字节
SELECT OCTET_LENGTH('测试') AS byte_length;
-- 返回结果:6

-- 计算表情符号的字节长度,utf8mb4下表情占4字节
SELECT OCTET_LENGTH('😊') AS byte_length;
-- 返回结果:4

2. 计算数据列的字节长度

假设存在一张用户表user_info,其中username字段存储用户名称,需要统计每个用户名称的字节长度,可执行以下查询:

-- 创建测试表
CREATE TABLE user_info (
    id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(50)
) CHARACTER SET utf8mb4;

-- 插入测试数据
INSERT INTO user_info (username) VALUES ('张三'), ('lisi'), ('王五abc');

-- 查询每个用户名的字节长度
SELECT id, username, OCTET_LENGTH(username) AS username_byte_length FROM user_info;

执行后可以得到每个username字段值的字节长度,结果如下:

idusernameusername_byte_length
1张三6
2lisi4
3王五abc9

如何计算实际字符数

OCTET_LENGTH()返回的是字节长度,要得到字符数需要结合当前字符集下单字符的字节数计算。如果是单字节字符集(如latin1),字节长度等于字符数,直接使用OCTET_LENGTH()的结果即可。如果是多字节字符集,需要先确认字符集的单字符字节规则:

  • latin1字符集:1字符=1字节,字符数=OCTET_LENGTH(str)
  • utf8字符集:1字符=1-3字节,无法直接通过字节数反推字符数
  • utf8mb4字符集:1字符=1-4字节,无法直接通过字节数反推字符数

如果需要准确计算字符数,更推荐使用CHAR_LENGTH()函数,该函数直接返回字符串的字符数,不受字符集影响:

-- 对比OCTET_LENGTH和CHAR_LENGTH的结果
SELECT 
    username,
    OCTET_LENGTH(username) AS byte_length,
    CHAR_LENGTH(username) AS char_length
FROM user_info;

OCTET_LENGTH()和CHAR_LENGTH()的区别

两个函数的核心差异如下:

对比项OCTET_LENGTH()CHAR_LENGTH()
返回值含义字符串的字节长度字符串的字符数
字符集影响受字符集影响,不同字符集下单字符字节数不同不受字符集影响,直接统计字符个数
适用场景需要统计存储占用字节数的场景需要统计实际字符个数的场景

注意事项

  • 如果字段允许存储NULL值,使用OCTET_LENGTH()计算时需要提前过滤NULL,或者使用COALESCE函数处理空值,避免返回结果异常。
  • 对于BLOB类型的字段,OCTET_LENGTH()同样适用,会返回该字段存储的二进制数据的字节长度。
  • 不要将OCTET_LENGTH()和LENGTH()函数混淆,在MySQL中LENGTH()函数和OCTET_LENGTH()功能完全一致,是同一个函数的不同名称。

总结:OCTET_LENGTH()函数用于返回字符串的字节长度,若要计算数据列的字符数,在单字节字符集下可直接使用该函数结果,多字节字符集下建议使用CHAR_LENGTH()函数获取准确的字符数。

MySQLOCTET_LENGTH字符数计算数据列统计修改时间:2026-07-20 20:18:32

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。