有趣的问题......如果我有一个带有CHARSET = utf8的MySQL表,并且我用latin1编码打开一个连接,会发生什么?
我尝试了这个,甚至可以正确存储和检索ß和æ等字符。这些字符在utf8和latin1中用不同的字节序列表示,所以我没想到它会起作用。
MySQL是否在字符编码之间进行某种即时翻译?
答案 0 :(得分:3)
在连接另一个连接字符集之前,您会感觉它有效。然后你会看到奇怪的角色,肯定会后悔。
如果您使用utf8转换读取它们,那么您将在数据库中存储仅有意义的字节。但你告诉mysql这个领域是拉丁语,所以他不会理解,但无论如何他都会把它们发给你(你是人,他是obbeys)。当你与utf8连接时,你将通过这个字符集阅读它们并将它们读好。
但是如果连接改变了字符集,或者你试图改变字段的字符集,那么你将遇到麻烦,并且需要这样的技巧来读取单个字段内容:
convert(cast(convert(FieldNameMessed using latin1) as binary) using utf8)
答案 1 :(得分:1)
是的,mysql确实进行了字符集转换,具体取决于配置。要更改连接的字符集,可以使用SET NAMES之类的
SET NAMES utf8;