MySQL 服务器是否隐式支持编码转换?

Does MySQL server implicitly support encoding conversion?

我需要在字段的特定编码上实现排序 SELECT没有 CONVERT

也就是说,通常我会在

SELECT * FROM table ORDER BY CONVERT(field USING gbk) COLLATE gbk_chinese_ci

但是由于某些原因 CONVERT 不被允许。因此,我试图通过

来解决这个问题
ALTER TABLE table MODIFY field VARCHAR(xx) CHARACTER SET gbk COLLATE gbk_chinese_ci;

SELECT * FROM table ORDER BY field

有效。那挺好的。但是我担心编码问题。

与 MySQL 服务器的连接包括参数 characterEncoding=utf8useUnicode=true。我在MySQL的官方文档中还找不到这些参数的解释,但我想这些保证了客户端和服务器之间的通信应该是utf-8。

问题来了。 MySQL服务器是否在接收数据时将utf-8格式的数据隐式转换为gbk格式? GET参数是否只定义通信的字符集而不是最终存储数据的字符集?


编辑

评论说服务器确实转换了它们!谢谢大家!

我更困惑的是,只有一个字段设置为使用 gbk,而其他所有字段都被设置为使用 utf8。这意味着服务器的字符集应该仍然是 utf8 全局但 gbk 仅针对该字段在本地。

假设现在我将这行脚本发送到服务器

INSERT INTO table (field_gbk, field_utf8) VALUES ("a", "b");

服务器是否:

  1. utf8中接收整个语句;
  2. 仅将“a”转换为gbk并存储;和
  3. 按原样将“b”存储到数据库中?

非常感谢你们!

是的。

  • 连接时在客户端指定编码。
  • 您指定要插入的列的编码(“字符集”)。

MySQL 从一种编码转换为另一种编码,因为它 INSERTs 行。同样,当 SELECTing.

时,它会转换为另一种方式

CONVERT 函数不应(通常)用于任何事情。

您正在使用 Java? characterEncoding=utf8 and useUnicode=true 是用来声明客户端的。

"gbk" 用于单个列?寻找。该列的处理方式与其他列不同。