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

标签 mysql utf-8 latin1

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

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

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

最佳答案

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

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

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

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

关于mysql - 如果我使用 latin1 连接到 utf8 MySQL 数据库表会怎样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1384040/

相关文章:

mysql - 不返回所有结果之间的 SQL

c++ - 如何解码 UTF-8?

Android 2.2 webview 不支持泰米尔语字体

MySQL Convert latin1 to utf8, cp1252 0x80-0x9F 错误

mysql - 如何通过mysql游标中的索引访问一行?

mysql - 使用 MEMORY 引擎存储的表是否可以从集群崩溃中恢复?

php - 排列我的查询的结果集,出了点问题

c# - 从 C# Windows 应用程序中的 PHP 页面获取 utf8 字符串

python - 在 Python 中将 utf-8 转换为 latin-1

java - 替换所有非 latin-1 字符的 API 或方法