正在学 Active Record,需要从 PHP 访问的数据库中读取中文字段,遇到乱码。
经过测试,发现数据库中正常的 UTF8 编码数据不能正确读入到 Ruby 中。
在 MySQL 命令行中,分别用两种编码插入“中文”,PHP 也是使用 UTF8 的方式:
SET NAMES Latin1;
insert into users value(1, "中文", "none");
SET NAMES UTF8;
insert into users value(2, "中文", "none");
my = Mysql.real_connect("**")
res1 = my.query("select * from users;")
res1.each do |r|
p r
end
结果: ["1", "\xE4\xB8\xAD\xE6\x96\x87", "none"] ["2", "??", "none"]
增加 SET NAMES
my.query("set names utf8")
res2 = my.query("select * from users;")
res2.each do |r|
p r
end
结果: ["1", "\xC3\xA4\xC2\xB8\xC2\xAD\xC3\xA6\xE2\x80\x93\xE2\x80\xA1", "none"] ["2", "\xE4\xB8\xAD\xE6\x96\x87", "none"]
用 SET NAMES 能解决 Ruby 读取 MySQL 中文的问题,但是使用 Active Record 没有这个步骤,请问解决方法。