mysql长度函数,最核心的两个函数

首页 2025-10-09 10:57:21


MySQL 提供了多个用于计算 “长度” 的函数,它们之间有细微但重要的区别。最核心的两个函数是 CHAR_LENGTH() 和 LENGTH()

1. CHAR_LENGTH(str) / CHARACTER_LENGTH(str)

这个函数计算的是字符串中字符的数量。它最符合我们日常对 “长度” 的理解。
  • 特点:计算的是字符数,与字符集无关。
  • 示例
    sql
    SELECT CHAR_LENGTH('hello');      -- 返回 5
    SELECT CHAR_LENGTH('你好世界');  -- 返回 4
    
     
     
    无论是英文字母、数字还是汉字,每个字符都被计算为 1

2. LENGTH(str) / OCTET_LENGTH(str)

这个函数计算的是字符串在存储时所占用的字节数。它的结果取决于字符串的字符集
  • 特点:计算的是字节数,与字符集密切相关。
  • 示例
    • 在 UTF-8 字符集下(一个汉字通常占 3 个字节):
      sql
      SELECT LENGTH('hello');      -- 返回 5 (5个字符 * 1字节/字符)
      SELECT LENGTH('你好世界');  -- 返回 12 (4个字符 * 3字节/字符)
      
       
       
    • 在 GBK 字符集下(一个汉字通常占 2 个字节):
      sql
      SELECT LENGTH('hello');      -- 返回 5
      SELECT LENGTH('你好世界');  -- 返回 8 (4个字符 * 2字节/字符)
      
       
       

3. BIT_LENGTH(str)

这个函数计算的是字符串所占用的比特位(bit)数
  • 特点:计算的是比特数。
  • 示例
    sql
    -- 'A' 的 ASCII 码是 65,二进制是 01000001,共 8 位
    SELECT BIT_LENGTH('A');       -- 返回 8
    
    -- 'AB' 占用 2 个字节,即 16 个比特位
    SELECT BIT_LENGTH('AB');      -- 返回 16
    
    -- '你' 在 UTF-8 下占用 3 个字节,即 24 个比特位
    SELECT BIT_LENGTH('你');      -- 返回 24
    
     
     

4. CHARACTER_MAXIMUM_LENGTH (元数据函数)

这个函数不是用来计算某个具体字符串的长度,而是用来查询数据库表中某个列定义的最大字符长度
  • 特点:查询列的定义属性,而非数据。
  • 示例
     
    假设你有一个表:
    sql
    CREATE TABLE users (
        username VARCHAR(50) CHARACTER SET utf8mb4,
        bio TEXT
    );
    
     
     
    你可以这样查询 username 列的最大长度:
    sql
    SELECT 
        COLUMN_NAME, 
        CHARACTER_MAXIMUM_LENGTH 
    FROM 
        INFORMATION_SCHEMA.COLUMNS 
    WHERE 
        TABLE_SCHEMA = 'your_database_name' 
        AND TABLE_NAME = 'users' 
        AND COLUMN_NAME = 'username';
    
     
     
    这个查询会返回 50,表示 username 列最多可以存储 50 个字符(无论这些字符是英文还是汉字)。

总结与选择建议

函数 计算对象 关注点 适用场景
CHAR_LENGTH() 字符数 用户感知的长度 最常用。如限制用户名、文章标题的字符数。
LENGTH() 字节数 存储占用空间 当需要精确控制存储容量或处理二进制数据时。
BIT_LENGTH() 比特数 底层数据大小 极少使用,通常用于特定的网络协议或数据传输场景。
CHARACTER_MAXIMUM_LENGTH 列定义的最大字符数 表结构元数据 检查表结构,验证列的设计是否符合预期。
一句话建议:在处理文本数据时,如果你想知道 “有多少个字符”,请始终使用 CHAR_LENGTH()。只有当你关心数据在磁盘上占用了多少字节时,才使用 LENGTH()
MySQL连接就这么简单!本地远程、编程语言连接方法一网打尽
还在为MySQL日期计算头疼?这份加一天操作指南能解决90%问题
MySQL日志到底在哪里?Linux/Windows/macOS全平台查找方法在此
MySQL数据库管理工具全景评测:从Workbench到DBeaver的技术选型指南
MySQL密码忘了怎么办?这份重置指南能救急,Windows/Linux/Mac都适用
你的MySQL为什么经常卡死?可能是锁表在作怪!快速排查方法在此
MySQL单表卡爆怎么办?从策略到实战,一文掌握「分表」救命技巧
清空MySQL数据表千万别用错!DELETE和TRUNCATE这个区别可能导致重大事故
你的MySQL中文排序一团糟?记住这几点,轻松实现准确拼音排序!
别再混淆Hive和MySQL了!读懂它们的天壤之别,才算摸到大数据的门道