在SQL查询里统计字符串长度是很常见的需求,比如校验用户名位数、计算地址字段占用字符数等。不同数据库对此提供的函数名称和计算规则存在差异,最主要的是LENGTH和LEN两类函数。

不同数据库的函数区别
主流关系型数据库对字符串长度函数的支持如下:
| 数据库 | 函数 | 说明 |
|---|---|---|
| MySQL | LENGTH() | 返回字符串的字节长度 |
| PostgreSQL | LENGTH() | 返回字符个数 |
| SQL Server | LEN() | 返回字符个数,忽略尾部空格 |
| Oracle | LENGTH() | 返回字符个数 |
MySQL中使用LENGTH函数
在MySQL里,LENGTH()计算的是字节数。如果字段是utf8mb4编码,一个汉字占3到4个字节,此时用CHAR_LENGTH()才能拿到字符数。
-- 统计用户名字节长度 SELECT username, LENGTH(username) AS byte_len FROM users; -- 统计用户名字符长度 SELECT username, CHAR_LENGTH(username) AS char_len FROM users;
SQL Server中使用LEN函数
SQL Server没有提供LENGTH,而是用LEN()返回字符数,且不会计算末尾空格。
-- 统计产品名称的字符长度 SELECT product_name, LEN(product_name) AS name_len FROM products;
实际查询示例
假设要查出昵称长度大于10个字符的会员,在PostgreSQL中可写为:
SELECT member_id, nickname FROM members WHERE LENGTH(nickname) > 10;
注意事项
- 确认数据库类型,避免把LEN写成LENGTH或反过来。
- 涉及中文等多字节字符时,弄清函数返回的是字节还是字符。
- NULL值传入长度函数会返回NULL,可用COALESCE处理。
简单总结:MySQL、PostgreSQL、Oracle用LENGTH,SQL Server用LEN,中文场景注意字节与字符的区别。