Ruby on rails Ruby 1.9.x和字符串编码

Ruby on rails Ruby 1.9.x和字符串编码,ruby-on-rails,ruby,encoding,utf-8,Ruby On Rails,Ruby,Encoding,Utf 8,我刚刚从Ruby 1.8.7迁移到Ruby 1.9.2,我一直遇到字符串编码的难题。我的MySQL数据库都是utf8,但每次我从中查询并查找字符串编码时,都会得到ASCII-9位 ruby-1.9.2-p180 :002 > Artist.find(1043).name.encoding => #<Encoding:ASCII-8BIT> ruby-1.9.2-p180:002>Artist.find(1043.name.encoding) => # 所以像Si

我刚刚从Ruby 1.8.7迁移到Ruby 1.9.2,我一直遇到字符串编码的难题。我的MySQL数据库都是utf8,但每次我从中查询并查找字符串编码时,都会得到ASCII-9位

ruby-1.9.2-p180 :002 > Artist.find(1043).name.encoding
 => #<Encoding:ASCII-8BIT> 
ruby-1.9.2-p180:002>Artist.find(1043.name.encoding)
=> # 
所以像Sigur Rós这样的艺术家打印出来的是“Sigur R\xC3\xB3s”。事实证明,这导致了一些问题,因为我的客户端应用程序希望我的服务器返回UTF8 json(一直如此)。一个临时的解决方法似乎是在我的代码中添加
force_编码(“UTF-8”)
,但感觉非常混乱,尤其是Ruby 1.8.7不需要这些

我尝试向我的env文件添加encoding magic comments,
encoding.default\u external
,向我的database.yml文件添加
encoding
参数,但没有任何效果

我应该如何处理Ruby 1.9.x和字符串编码

--


编辑:在我的另一个Rails应用程序(从一开始就是Ruby 1.9.2)中,所有MySQL字符串似乎都是用UTF-8编码的。但是数据库/表编码/字符集是完全相同的

更新到Rails 3.1.3和mysql2 0.3.10似乎解决了我的问题(运行Rails 3.0.3和mysql2 0.2.6)。但对我来说似乎很奇怪,因为Ruby 1.9已经超过3年了,Rails 3.0.3也在那之后发布了,所以我不明白为什么Rails 3.0.x不能很好地使用Ruby的1.9新字符串编码。如果有人能总结一下,我将不胜感激。

您如何连接到MySQL数据库?是否设置了连接字符串?您指定了字符集吗?字符集=UTF8@正如我所说,我的database.yml文件中有
编码
参数。我所有的表都将编码/字符集设置为utf8。但我不是说你的database.yml文件。我指的是通过您使用的数据库驱动程序(mysql或mysql-2 gem)与数据库对话时设置的连接字符串。两人的行为都不一样。@phoet哎呀,对不起。我使用mysql2 gem。我不记得任何“连接字符串”,我只是直接使用ActiveRecord。。。