MySQL 获取字符串长度及注意事项

 更新时间:2025年06月24日 11:25:04   作者:步行cgn  
本文通过实例代码给大家介绍MySQL 获取字符串长度及注意事项,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧

MySQL 获取字符串长度详解

📏 核心长度函数对比

函数作用示例返回值
LENGTH()字节数LENGTH('中国')6 (UTF8)
CHAR_LENGTH()字符数CHAR_LENGTH('中国')2
BIT_LENGTH()比特数BIT_LENGTH('A')8
OCTET_LENGTH()LENGTH()别名OCTET_LENGTH('中国')6

⚠️ 六大关键注意事项

1. 字符编码决定字节长度

-- 查看数据库编码
SHOW VARIABLES LIKE 'character_set%';
-- 不同编码下的长度差异
SET @str = '中国';
SELECT 
  LENGTH(@str),                     -- 6 (UTF8)
  LENGTH(CONVERT(@str USING latin1)); -- 2 (latin1)

2. NULL 值的特殊处理

SELECT 
  LENGTH(NULL),      -- NULL
  CHAR_LENGTH(NULL); -- NULL

3. 多字节字符陷阱

-- 中文字符(UTF8)
SELECT 
  LENGTH('数据库'),    -- 9 (3字×3字节)
  CHAR_LENGTH('数据库'); -- 3
-- Emoji字符(UTF8MB4)
SELECT 
  LENGTH('👍'),       -- 4 (UTF8MB4)
  CHAR_LENGTH('👍');  -- 1

4. 空格和特殊字符

SELECT 
  LENGTH('  '),        -- 2 (空格)
  LENGTH('\t'),        -- 1 (制表符)
  CHAR_LENGTH(' ');    -- 1

5. 数值类型的隐式转换

SELECT 
  LENGTH(12345),      -- 5 (转为字符串'12345')
  CHAR_LENGTH(100.00);-- 6 (转为'100.00')

6. 二进制数据长度

SELECT 
  LENGTH(BINARY 'abc'), -- 3
  LENGTH(X'41');        -- 1 (十六进制'A')

🔍 高级应用场景

1. 验证输入长度限制

-- 用户名长度验证(6-20字符)
SELECT *
FROM users
WHERE CHAR_LENGTH(username) BETWEEN 6 AND 20;

2. 检测多字节字符存在

-- 查找包含中文的记录
SELECT *
FROM products
WHERE LENGTH(product_name) != CHAR_LENGTH(product_name);

3. 优化存储空间

-- 计算平均名称长度(按字节)
SELECT AVG(LENGTH(name)) AS avg_byte_length
FROM customers;
-- 按字符长度分组统计
SELECT 
  CHAR_LENGTH(title) AS title_length,
  COUNT(*) AS count
FROM articles
GROUP BY title_length;

4. 截断超长字符串

SET @long_text = 'This is a very long text...';
-- 安全截取前100字符
SELECT 
  IF(CHAR_LENGTH(@long_text) > 100, 
    CONCAT(SUBSTRING(@long_text, 1, 97), '...'),
    @long_text) AS truncated_text;

🚀 性能优化指南

1. 索引使用原则

-- 前缀索引创建(按字节)
ALTER TABLE products ADD INDEX idx_name (name(20));
-- 按字符长度过滤优化
SELECT * FROM products 
WHERE CHAR_LENGTH(name) > 10; -- 全表扫描
-- 优化方案:添加虚拟列
ALTER TABLE products
ADD COLUMN name_char_len TINYINT 
  AS (CHAR_LENGTH(name)) VIRTUAL,
ADD INDEX idx_name_len (name_char_len);

2. 避免全表扫描

-- 低效查询(无法使用索引)
SELECT * FROM logs 
WHERE LENGTH(message) > 1000;
-- 优化方案:存储计算值
ALTER TABLE logs
ADD COLUMN msg_length SMALLINT 
  AS (LENGTH(message)) STORED,
ADD INDEX idx_msg_len (msg_length);

3. 内存配置优化

-- 增大排序缓冲区
SET sort_buffer_size = 8*1024*1024; 
-- 查看当前配置
SHOW VARIABLES LIKE 'sort_buffer_size';

📊 函数行为对比表

输入值LENGTH()CHAR_LENGTH()说明
'abc'33英文相同
'中国'62中文差异
'👍'41Emoji差异
NULLNULLNULL空值
12333数字转换
''00空字符串
' '11空格

💡 最佳实践总结

  1. 字符数 vs 字节数

    • 显示用途 → CHAR_LENGTH()
    • 存储优化 → LENGTH()

多语言系统

-- 始终指定字符集
SELECT CHAR_LENGTH(_utf8mb4 '👨‍👩‍👧‍👦'); -- 1 (家庭emoji)

列设计建议

CREATE TABLE users (
  id INT PRIMARY KEY,
  username VARCHAR(20) CHARACTER SET utf8mb4, -- 按字符限制
  bio TEXT
);

安全截断

-- 确保不超过字段限制
INSERT INTO users (username)
VALUES (SUBSTRING(input_name, 1, 20));
  1. 性能关键点

    • 避免在 WHERE 子句中直接使用长度函数
    • 对频繁查询的长度值使用物化列
    • 为长文本字段添加前缀索引

到此这篇关于MySQL 获取字符串长度详解的文章就介绍到这了,更多相关mysql字符串长度内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MySQL8.0如何配置Path环境变量

    MySQL8.0如何配置Path环境变量

    将MySQL的bin目录添加到系统的环境变量中,可以避免每次登录MySQL时都需要输入cd命令,具体步骤如下:首先,右键桌面上的“此电脑”选择“属性”,点击左侧的“高级系统设置”,在“系统属性”对话框中选择“高级”选项卡,点击“环境变量”
    2024-11-11
  • MySQL修改表结构操作命令总结

    MySQL修改表结构操作命令总结

    这篇文章主要介绍了MySQL修改表结构操作命令总结,包含如删除列、添加列、修改列、添加主键、删除主键、添加唯一索引、添加普通索引等内容,需要的朋友可以参考下
    2014-12-12
  • MySQL每日练习之单表查询

    MySQL每日练习之单表查询

    这篇文章主要给大家介绍了关于MySQL每日练习之单表查询的相关资料,数据库管理系统的一个最重要的功能就是数据查询,数据查询不应只是简单查询数据库中存储的数据,还应该根据需要对数据进行筛选,需要的朋友可以参考下
    2023-07-07
  • MySQL order by实现原理分析和Filesort优化方式

    MySQL order by实现原理分析和Filesort优化方式

    这篇文章主要介绍了MySQL order by实现原理分析和Filesort优化方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • MySQLMerge存储引擎

    MySQLMerge存储引擎

    MERGE存储引擎把一组MyISAM数据表当做一个逻辑单元来对待,让我们可以同时对他们进行查询。本文给大家介绍MySQLMerge存储引擎,需要的朋友参考下吧
    2016-03-03
  • MySQL笔记之触发器的应用

    MySQL笔记之触发器的应用

    触发器是由事件来触发某个操作,这些事件包括INSERT语句,UPDATE语句和DELETE语句
    2013-05-05
  • MySql中把一个表的数据插入到另一个表中的实现代码

    MySql中把一个表的数据插入到另一个表中的实现代码

    本篇文章是对MySql中把一个表的数据插入到另一个表中的实现代码进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • MySQL筑基篇之增删改查操作详解

    MySQL筑基篇之增删改查操作详解

    这篇文章主要和大家讲解一下MySQL数据库的增删改查操作,这里的查询确切的说应该是初级的查询,不涉及函数、分组等模块,需要的可以参考一下
    2022-07-07
  • MySQL之存储函数详细介绍

    MySQL之存储函数详细介绍

    大家好,本篇文章主要讲的是MySQL之存储函数详细介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • mysql 8.0.25 解压版安装配置方法图文教程

    mysql 8.0.25 解压版安装配置方法图文教程

    这篇文章主要为大家详细介绍了mysql 8.0.25 解压版安装配置方法图文教程,文中安装步骤介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07

最新评论