Sub*_*age 18 mysql unicode encoding ruby-on-rails utf-8
我有一个在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 |
+------+-----------------+---------+
Run Code Online (Sandbox Code Playgroud)
这是我遇到的问题
在暂存时(在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 - 这可能是问题吗?
有人请帮帮我,我疯了,试图弄清楚什么是错的!
Sub*_*age 29
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
Run Code Online (Sandbox Code Playgroud)
现在我只需要确保在latin1> utf8开关之后生成的其他内容没有搞砸了:(
Can*_*der 20
你database.yml在正确的部分下面有这两行吗?
encoding: utf8
collation: utf8_general_ci
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17159 次 |
| 最近记录: |