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

标签 mysql character-encoding

我需要在字段的特定编码上实现排序的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 和 useUnicode=true 用于声明客户端。

“gbk”代表单列?寻找。该列的处理方式与其他列不同。

关于mysql - MySQL 服务器是否隐式支持编码转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70361330/

相关文章:

mysql - Rails 如何构建 MySQL 语句?

Mysql - 如何进行区分大小写的搜索?

PHP SQL 如何在使用 CASE 和表 JOIN 时获取总行数

sql-server - SQL Server 默认字符编码

encoding - Safari 根据请求对已编码的 URL 进行编码

基于最高日期和非唯一列的 MySQL JOIN

java - 如何用java将汉字保存到文件中?

java - itextpdf HTML 到包含西里尔字母的 PDF

oracle - 如何在一个应用程序中使用不同的 oracle 字符集

mysql - 在mysql中Concat 2查询库存报告