我需要在一个字段的特定编码上实现一个排序的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 params只定义通信的字符集,而不是定义最终存储的数据的字符集吗?
编辑
评论说服务器确实会转换它们!谢谢你们!
我进一步感到困惑的是,只有一个字段被设置为使用gbk,而其他所有字段都被留给使用utf8。这意味着服务器的字符集在全局上仍然应该是utf8,但是仅针对该字段在本地使用gbk。
假设现在我将这一行脚本发送到服务器
INSERT INTO table (field_gbk, field_utf8) VALUES ("a", "b");服务器是否:
utf8;
gbk的整个语句,并将其存储;
。
非常感谢各位!
发布于 2021-12-16 22:58:02
是。
MySQL在INSERTs行时从一种编码转换为另一种编码。类似地,当SELECTing时,它会以另一种方式进行转换。
CONVERT函数不应该(通常)用于任何事情。
您使用的是Java?characterEncoding=utf8 and useUnicode=true,它用于声明客户端。
"gbk“代表一列?发现。该列的处理方式将与其他列不同。
https://stackoverflow.com/questions/70361330
复制相似问题