【问题标题】:Are INSERT values encoded with SET NAMES, SET CHARACTER SET?INSERT 值是否使用 SET NAMES、SET CHARACTER SET 编码?
【发布时间】:2016-07-15 10:07:10
【问题描述】:

使用 MySQL,我已将连接字符集设置为 UTF-8:

SET NAMES 'utf8mb4';
SET CHARACTER SET 'utf8mb4';

这样我就以 UTF-8 格式取回所有内容,即使对于具有 latin1_swedish_ci 排序规则的表(有一些)。

当我发送 UTF-8 INSERT 字符串以插入其中一个 latin1 表时,这些值是否会被编码为 latin1?

【问题讨论】:

    标签: mysql encoding utf-8


    【解决方案1】:

    第一偏好:使用特定于编程语言的连接参数作为“字符集”。

    第二偏好:SET NAMES utf8mb4; --(无需引用)。

    列/表上的CHARACTER SET独立此连接/SET NAMES

    连接/SET NAMES 声明了客户端中字节使用的编码。 INSERT/SELECT 将在它和列/表声明之间进行转换,因此您的 utf8-latin1 观察结果。

    “当我发送 UTF-8 INSERT 字符串以插入其中一个 latin1 表时,这些值是否会被编码为 latin1?” -- 重申一下,您发送的字节必须根据SET NAMES 进行编码。如果可能,它们将被正确转换为表中的 latin1。我说“如果可能”是因为中文、表情符号等无法转换为 latin1,因为 latin1 处理的字符集非常有限(仅够西欧使用)。

    【讨论】:

      猜你喜欢
      • 2010-12-11
      • 2010-12-06
      • 2012-12-12
      • 2022-06-22
      • 1970-01-01
      • 1970-01-01
      • 2019-04-06
      • 2022-11-20
      相关资源
      最近更新 更多