我有一个在MySQL 5.0.32-Debian上运行的升级Rails站点.
在这个特定的网站上,我的所有表都使用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 | +------+-----------------+---------+
这是我遇到的问题
在暂存时(在debian框中运行db和Rails站点),从Rails显示时,符号的字符正确显示.例如,中国元在我的浏览器中显示为元,而不是å...ƒ,因为它显示在数据库中.
当我将数据下载到本地OS X开发机器并在本地运行db和Rails时,我在浏览器上看到DB(å...ƒ)内部的表示,而不是我在分段中看到的字符元素.
调试我已经完成了
我已经确保Content-Type的所有标题都从每个网络服务器(本地,登台)返回为utf8.
我的本地mysql服务器和登台服务器都设置为使用utf8作为默认字符集.在我打电话之前,我正在使用"设置名称'utf8'".
我甚至可以从我的OS X Rails主机连接到我的登台数据库,我仍然看到代表人民币的字符å...ƒ.我猜,那可能是我的mysql本地客户端有问题,但我无法弄清楚问题是什么.
也许这可能会提供一些线索
为了让它更令人困惑,如果我将字符元素粘贴到我本地计算机上的数据库中,我会在网络浏览器中看到它.---如果我将同一个字符粘贴到我的登台数据库中,我会得到一个?在我的登台Rails网站上标记它在页面上的位置.
另外,如果我在查询之前使用"设置名称'latin1'",我的OS X rails机器本地,这些字符都会正常返回.我之前确实将这些表设置为latin1 - 这可能是问题吗?
有人请帮帮我,我疯了,试图弄清楚什么是错的!
AHA!似乎我之前有一些以latin1编码的表信息,并且愚蠢地将数据库更改为utf8而不进行转换.
运行以下修复了currency_types表:
mysqldump -u root -p --opt --default-character-set=latin1 --skip-set-charset DBNAME > DBNAME.sql mysql -u root -p --default-character-set=utf8 DBNAME < DBNAME.sql
现在我只需要确保在latin1> utf8开关之后生成的其他内容没有搞砸了:(
你database.yml
在正确的部分下面有这两行吗?
encoding: utf8 collation: utf8_general_ci