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()
nat123映射怎么用?超详细步骤,外网访问内网轻松搞定
nat123域名怎么用?两种方式轻松搞定
nat123怎么用?简单几步实现内网穿透
内网穿透工具对比:nat123、花生壳与轻量新选择
远程访问内网很简单:用对工具,一“箭”穿透
ngrok下载完全指南:从入门到获取客户端
内网远程桌面软件:穿透局域网边界的数字窗口
从外网远程访问内网服务器的完整方案
Windows Server 2008端口转发完全教程:netsh命令添加/查看/删除/重置
为什么三层交换机转发比Linux服务器快?转发表硬件加速的秘密