如何用SQL的LENGTH和CHAR_LENGTH函数区分并获取字符串字节长度的不同之处?

2026-04-24 20:070阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计895个文字,预计阅读时间需要4分钟。

如何用SQL的LENGTH和CHAR_LENGTH函数区分并获取字符串字节长度的不同之处?

在MySQL中,`LENGTH()` 和 `CHAR_LENGTH()` 都可以用来计算字符串长度,但它们的意义有所不同。`LENGTH()` 返回的是字符串的物理字节长度,而 `CHAR_LENGTH()` 返回的是字符的个数。

如果你关心的是这个字段实际占多少存储空间或是否超出VARBINARY限制,你应该使用 `LENGTH()`,因为它的值包括了所有字符的编码字节。

如果你只关心有几个汉字/字母,应该使用 `CHAR_LENGTH()`,因为它不考虑字符编码的长度差异。

简而言之:

根本原因在于 MySQL 的字符集处理方式:UTF8MB4 下,一个汉字占 3 或 4 字节,而 LENGTH() 按字节计数,CHAR_LENGTH() 按 Unicode 字符计数(无论多长)。

中文、emoji 场景下 LENGTH 明显大于 CHAR_LENGTH

执行这条语句就能直观看到差异:

SELECT '你好?' AS str, LENGTH('你好?') AS byte_len, CHAR_LENGTH('你好?') AS char_len;

结果通常是:byte_len = 10(“你好”各 3 字节 + ? 占 4 字节),char_len = 3(两个汉字 + 一个 emoji 算一个字符)。

阅读全文
标签:字节

本文共计895个文字,预计阅读时间需要4分钟。

如何用SQL的LENGTH和CHAR_LENGTH函数区分并获取字符串字节长度的不同之处?

在MySQL中,`LENGTH()` 和 `CHAR_LENGTH()` 都可以用来计算字符串长度,但它们的意义有所不同。`LENGTH()` 返回的是字符串的物理字节长度,而 `CHAR_LENGTH()` 返回的是字符的个数。

如果你关心的是这个字段实际占多少存储空间或是否超出VARBINARY限制,你应该使用 `LENGTH()`,因为它的值包括了所有字符的编码字节。

如果你只关心有几个汉字/字母,应该使用 `CHAR_LENGTH()`,因为它不考虑字符编码的长度差异。

简而言之:

根本原因在于 MySQL 的字符集处理方式:UTF8MB4 下,一个汉字占 3 或 4 字节,而 LENGTH() 按字节计数,CHAR_LENGTH() 按 Unicode 字符计数(无论多长)。

中文、emoji 场景下 LENGTH 明显大于 CHAR_LENGTH

执行这条语句就能直观看到差异:

SELECT '你好?' AS str, LENGTH('你好?') AS byte_len, CHAR_LENGTH('你好?') AS char_len;

结果通常是:byte_len = 10(“你好”各 3 字节 + ? 占 4 字节),char_len = 3(两个汉字 + 一个 emoji 算一个字符)。

阅读全文
标签:字节