原来,我连接到Rails应用程序的数据库设置为Latin1。Rails设置为UTF-8。
我阅读了很多关于字符编码的文章,但它们都提到数据在某种程度上还是可以读取的。然而,我的数据只有文字问号。尝试使用网络上的几种方法将数据转换为UTF-8也没有改变什么。我怀疑数据在写入数据库时被转换为问号。
MySQL控制台的样本输出:
select * from foo where bar = "foobar";
+-------+------+------------------------+---------------------+---------------------+
| id | name | bar | created_at | updated_at |
+-------+------+------------------------+---------------------+---------------------+
| 24300 | ???? | foobar | 2012-01-23 05:04:22 | 2012-01-23 05:04:22 |
+-------+------+------------------------+---------------------+---------------------+
1 row in set (0.00 sec)
我的Rails应用从Android客户端获得的输入数据是:
name = 爆笑笑話
在保存到数据库之前,这些输入数据已经被验证存在于rails应用程序中。因此,它在Android客户端或在传输到服务器过程中不会被破坏。是否有可能获取这些数据?还是说它已经完全丢失了?
SELECT HEX(name) FROM foo
,那么返回的结果若是 "3F3F3F...",则你的数据已经损坏无法恢复;但如果输出的结果是其他值,可能还有一线生机去挽救它。 - user149341