繁体   English   中英

如果我使用latin1连接到utf8 MySQL数据库表会怎样?

[英]What happens if I connect to a utf8 MySQL DB table using latin1?

有趣的问题...如果我有一个带有CHARSET = utf8的MySQL表,并且使用latin1编码打开了一个连接,会发生什么?

我试过了,甚至ß和æ等字符也可以正确存储和检索。 这些字符在utf8和latin1中用不同的字节序列表示,因此我没想到它会起作用。

MySQL是否在字符编码之间进行某种即时转换?

在连接另一个连接字符集之前,您将感觉像它一直有效。 然后,您将看到奇怪的角色,并且一定会后悔。

您在数据库中存储的字节只有在使用utf8转换读取它们时才有意义。 但是您告诉mysql该字段是拉丁语,所以他不会理解,但是无论如何他都会将它们发送给您(您是人类,他服从)。 当您连接到utf8时,您将通过此字符集阅读它们,然后阅读它们。

但是,如果连接更改了字符集,或者您稍后尝试更改该字段的字符集,则会遇到麻烦,并且将需要以下技巧来读取单个字段内容:

convert(cast(convert(FieldNameMessed using latin1) as binary) using utf8)

是的,根据配置,mysql确实进行了chrset转换。 要更改连接的密码,可以使用SET NAMES

SET NAMES utf8;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM