Java 后端面试题库 / 全部题解免费阅读理解原理,有条理地回答

MySQL 怎样计算 GB2312 和 UTF-8 的字符串长度?

先说出你的答案

定义边界、关键机制、一个反例;P8题再补容量、失败与验证。

查看完整题解

参考回答

直接回答

CHAR_LENGTH 计算字符数,LENGTH 计算当前编码的字节数。要比较目标编码的字节,用 CONVERT 转到目标字符集后再计算,并先确认文本可以无损表示。

讲清原理

常见汉字在 GB2312 用两字节,在 UTF-8 常用字用三字节。混入英文、扩展汉字或表情后,按字节差反推汉字个数会出错。

例子与易错点

“中文A”有三个字符,UTF-8 占七字节,可表示为 GB2312 时占五字节。字符集转换不支持某字符时,应按实际错误和替换行为处理。

此样本在两个字符集中都能无损表示。

SELECT CHAR_LENGTH(_utf8mb4'中文A'), LENGTH(_utf8mb4'中文A'),
       LENGTH(CONVERT(_utf8mb4'中文A' USING gb2312));

相关题 · 第 118 题、第 113 题

这道题,你掌握得怎么样?

掌握程度由你主动标记,阅读和收藏不会自动改变状态。