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的超集,这应该不会产生编码问题,我认为因为它们在编码方面基本相同吗?
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
| 归档时间: |
|
| 查看次数: |
1982 次 |
| 最近记录: |