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=utf8
和 useUnicode=true
。我在MySQL的官方文档中还找不到这些参数的解释,但我想这些保证了客户端和服务器之间的通信应该是utf-8。
问题来了。 MySQL服务器是否在接收数据时将utf-8格式的数据隐式转换为gbk格式? GET参数是否只定义通信的字符集而不是最终存储数据的字符集?
编辑
评论说服务器确实转换了它们!谢谢大家!
我更困惑的是,只有一个字段设置为使用 gbk
,而其他所有字段都被设置为使用 utf8
。这意味着服务器的字符集应该仍然是 utf8
全局但 gbk
仅针对该字段在本地。
假设现在我将这行脚本发送到服务器
INSERT INTO table (field_gbk, field_utf8) VALUES ("a", "b");
服务器是否:
- 在
utf8
中接收整个语句;
- 仅将“a”转换为
gbk
并存储;和
- 按原样将“b”存储到数据库中?
非常感谢你们!
是的。
- 连接时在客户端指定编码。
- 您指定要插入的列的编码(“字符集”)。
MySQL 从一种编码转换为另一种编码,因为它 INSERTs
行。同样,当 SELECTing
.
时,它会转换为另一种方式
CONVERT
函数不应(通常)用于任何事情。
您正在使用 Java? characterEncoding=utf8 and useUnicode=true
是用来声明客户端的。
"gbk" 用于单个列?寻找。该列的处理方式与其他列不同。
我需要在字段的特定编码上实现排序 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=utf8
和 useUnicode=true
。我在MySQL的官方文档中还找不到这些参数的解释,但我想这些保证了客户端和服务器之间的通信应该是utf-8。
问题来了。 MySQL服务器是否在接收数据时将utf-8格式的数据隐式转换为gbk格式? GET参数是否只定义通信的字符集而不是最终存储数据的字符集?
编辑
评论说服务器确实转换了它们!谢谢大家!
我更困惑的是,只有一个字段设置为使用 gbk
,而其他所有字段都被设置为使用 utf8
。这意味着服务器的字符集应该仍然是 utf8
全局但 gbk
仅针对该字段在本地。
假设现在我将这行脚本发送到服务器
INSERT INTO table (field_gbk, field_utf8) VALUES ("a", "b");
服务器是否:
- 在
utf8
中接收整个语句; - 仅将“a”转换为
gbk
并存储;和 - 按原样将“b”存储到数据库中?
非常感谢你们!
是的。
- 连接时在客户端指定编码。
- 您指定要插入的列的编码(“字符集”)。
MySQL 从一种编码转换为另一种编码,因为它 INSERTs
行。同样,当 SELECTing
.
CONVERT
函数不应(通常)用于任何事情。
您正在使用 Java? characterEncoding=utf8 and useUnicode=true
是用来声明客户端的。
"gbk" 用于单个列?寻找。该列的处理方式与其他列不同。