如果我使用latin1连接到utf8 MySQL数据库表会发生什么?

时间:2009-09-05 19:02:59

标签: mysql utf-8 latin1

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

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

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

2 个答案:

答案 0 :(得分:3)

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

如果您使用utf8转换读取它们,那么您将在数据库中存储仅有意义的字节。但你告诉mysql这个领域是拉丁语,所以他不会理解,但无论如何他都会把它们发给你(你是人,他是obbeys)。当你与utf8连接时,你将通过这个字符集阅读它们并将它们读好。

但是如果连接改变了字符集,或者你试图改变字段的字符集,那么你将遇到麻烦,并且需要这样的技巧来读取单个字段内容:

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

答案 1 :(得分:1)

是的,mysql确实进行了字符集转换,具体取决于配置。要更改连接的字符集,可以使用SET NAMES之类的

SET NAMES utf8;