字符串值不正确:'\ xC2\x9Fe 10 ...'列

Flo*_*aal 11 c# mysql character-encoding mysql-odbc-connector

我们在服务器2003上运行了一个旧的5.1 Mysql服务器.最近我们转向使用Mysql 5.6和server 2008的新环境.现在在新服务器上,当插入像'Ã'这样的特殊字符时,我们不断出错.

现在我检查了源编码,它是UTF-8.但旧的Mysql服务器配置为latin1(服务器/表/冒号)与排序规则latin_swedish_ci,我们没有在旧环境中收到任何错误.

现在我做了一些测试,因为我们没有在新环境中生活.我已经尝试将所有表设置为表/冒号以及latin1.在这两种情况下,我都会遇到这些错误.

我注意到在旧服务器上,服务器默认的字符集是latin1,在新服务器上是utf-8.这可能是问题吗?我发现这很奇怪,因为源是utf-8.

是否有一些选项可以处理这个可以在旧环境中打开?我不确定是否存在类似的东西.我确实比较了mysql管理工具中的设置,除了默认的字符集外,它看起来是一样的.

编辑:

SHOW VARIABLES喜欢'char%';

旧服务器:

+--------------------------+-----------------------------------------------+
| Variable_name            | Value                                         |
+--------------------------+-----------------------------------------------+
| character_set_client     | utf8                                          | *
| character_set_connection | utf8                                          | *
| character_set_database   | latin1                                        |
| character_set_filesystem | binary                                        |
| character_set_results    | utf8                                          | *
| character_set_server     | latin1                                        |
| character_set_system     | utf8                                          |
Run Code Online (Sandbox Code Playgroud)

新服务器:

+--------------------------+-----------------------------------------------+
| Variable_name            | Value                                         |
+--------------------------+-----------------------------------------------+
| character_set_client     | utf8mb4                                       | *
| character_set_connection | utf8mb4                                       | *
| character_set_database   | utf8                                          |
| character_set_filesystem | binary                                        |
| character_set_results    | utf8mb4                                       | *
| character_set_server     | utf8                                          |
| character_set_system     | utf8                                          |
Run Code Online (Sandbox Code Playgroud)

据我在MySQL网站上的文章所理解的,utf8mb4是utf8的超集,这应该不会产生编码问题,我认为因为它们在编码方面基本相同吗?

For*_*esR 3

MySQL 的旧 UTF-8并不是真正的 UTF-8。如果您尝试使用“特殊”字符(日语或中文),您的旧服务器上可能会出现方块或问号。

您的新服务器现在确实使用 UTF-8(mb4 代表多字节 4)。服务器接收 UTF-8 字符,但显然无法存储 UTF-8 字符,因为您的表没有使用 UTF-8。将所有表转换为 UTF-8,将数据库转换为 UTF-8,问题就解决了。

您可以通过以下方式执行此操作:

ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
Run Code Online (Sandbox Code Playgroud)

之前不要忘记备份。

来源:https ://stackoverflow.com/a/6115705/1980659