LENGTH
描述
LENGTH 函数返回字符串的字节长度(以字节为单位)。该函数计算的是字符串在 UTF-8 编码下占用的字节数,而不是字符数。
注意与 CHAR_LENGTH 的区别:
LENGTH()返回字节数CHAR_LENGTH()和CHARACTER_LENGTH()返回字符数- 对于 ASCII 字符,字节数和字符数相同
- 对于多字节字符(如中文、emoji),字节数通常大于字符数
别名
OCTET_LENGTH()
语法
LENGTH(<str>)
参数
| 参数 | 说明 |
|---|---|
<str> | 需要计算字节长度的字符串。类型:VARCHAR |
返回值
返回 INT 类型,表示字符串的字节长度。
特殊情况:
- 如果参数为 NULL,返回 NULL
- 空字符串返回 0
- 计算结果是 UTF-8 编码的字节数
示例
- ASCII 字符(字节数=字符数)
SELECT LENGTH('abc'), CHAR_LENGTH('abc');
+---------------+--------------------+
| LENGTH('abc') | CHAR_LENGTH('abc') |
+---------------+--------------------+
| 3 | 3 |
+---------------+--------------------+
- 中文字符(字节数>字符数)
SELECT LENGTH('中国'), CHAR_LENGTH('中国');
+------------------+---------------------+
| LENGTH('中国') | CHAR_LENGTH('中国') |
+------------------+---------------------+
| 6 | 2 |
+------------------+---------------------+
- NULL 值处理
SELECT LENGTH(NULL);
+--------------+
| LENGTH(NULL) |
+--------------+
| NULL |
+--------------+
- 空字符串
SELECT LENGTH('');
+------------+
| LENGTH('') |
+------------+
| 0 |
+------------+
- 混合字符类型
SELECT LENGTH('Hello世界'), CHAR_LENGTH('Hello世界');
+---------------------+--------------------------+
| LENGTH('Hello世界') | CHAR_LENGTH('Hello世界') |
+---------------------+--------------------------+
| 11 | 7 |
+---------------------+--------------------------+
- 特殊字符
SELECT LENGTH('\t\n\r'), LENGTH(' ');
+------------------+-------------+
| LENGTH('\t\n\r') | LENGTH(' ') |
+------------------+-------------+
| 3 | 2 |
+------------------+-------------+
- UTF-8 多字节字符对比
SELECT LENGTH('ṭṛì'), CHAR_LENGTH('ṭṛì');
+----------------+---------------------+
| LENGTH('ṭṛì') | CHAR_LENGTH('ṭṛì') |
+----------------+---------------------+
| 9 | 3 |
+----------------+---------------------+
- Emoji 字符(每个emoji通常占4字节)
SELECT LENGTH('😀😁'), CHAR_LENGTH('😀😁');
+-------------------+------------------------+
| LENGTH('😀😁') | CHAR_LENGTH('😀😁') |
+-------------------+------------------------+
| 8 | 2 |
+-------------------+------------------------+
- 数字字符串
SELECT LENGTH('12345'), CHAR_LENGTH('12345');
+-----------------+----------------------+
| LENGTH('12345') | CHAR_LENGTH('12345') |
+-----------------+----------------------+
| 5 | 5 |
+-----------------+----------------------+