我有一个暂存的Rails网站,它正在运行MySQL 5.0.32-Debian。
在这个特定的网站上,我的所有表都使用utf8/utf8_general_ci
编码。
在该数据库中,我有一些数据看起来像这样:
mysql> select * from currency_types limit 1,10;
+------+-----------------+---------+
| code | name | symbol |
+------+-----------------+---------+
| CAD | Canadian Dollar | $ |
| CNY | Chinese Yuan | å…ƒ |
| EUR | Euro | € |
| GBP | Pound | £ |
| INR | Indian Rupees | ₨ |
| JPY | Yen | ¥ |
| MXN | Mexican Peso | $ |
| USD | US Dollar | $ |
| PHP | Philippine Peso | ₱ |
| DKK | Denmark Kroner | kr |
+------+-----------------+---------+
我遇到的问题如下:
在staging环境中(使用debian服务器运行数据库和Rails站点),当从Rails中显示时,符号的字符显示正确。例如,我在浏览器中看到中国元符号显示为元,而不是å…ƒ,这是它在数据库中显示的。
但是,当我将数据下载到我的本地OS X开发机器并在本地运行数据库和Rails时,我在浏览器中看到来自数据库内部的编码(å…ƒ),而不是像在staging中看到的字符元(元)。
我所做的调试
我确保每个web服务器(本地和staging)的Content-Type标头都返回为utf8。
我的本地mysql服务器和staging服务器都设置为使用utf8作为默认字符集。我在进行任何调用之前使用“set names 'utf8'”。
我甚至可以从我的OS X Rails主机连接到我的staging数据库,但我仍然看到表示元的字符å…ƒ。那么,也许我的mysql本地客户端存在问题,但我找不到问题所在。
也许这可能提供一些线索
更加混乱的是,如果我将字符元粘贴到我的本地机器上的数据库中,我可以在网页浏览器中正确显示它。但是,如果我将相同的字符粘贴到我的staging数据库中,我在页面上看到一个问号代替它。
另外,如果我在查询之前在我的OS X Rails机器上使用“set names 'latin1'”,则所有字符都可以正确返回。我以前将这些表设置为latin1 - 这可能是问题所在吗?
请有人帮帮我,我试图找出问题所在!