Rails 2.3.5、Ruby 1.8.7和Mysql 5.1.53
我正在加载一个csv文件,其中有一个TM符号的字段(商标)
™-看起来像这样
我正在尝试执行活动记录查找:
Influencer.find(:first,:conditions => "author_name =?Influencer.find url_discovered = ?",author_name,site_profile_url)
Mysql::Error:对于操作'=':SELECT * FROM influencers WHERE (author_name = 'Tart Deco?‘),排序规则(latin1_swedish_ci,隐式)和(utf8_general_ci,强制)的混合非法。和url_discovered = 'http://www.joelnylund.com')限制1
在ruby调试器中,字符串显示为:
P author_name "Tart Deco\231“
我的表编码为"utf8_general_ci“
那么我该怎么做呢?我真的不太关心如果我存储TM,它会很好,主要是我只是不想它坏了…
发布于 2011-06-10 19:15:27
确保您的表使用uft8字符集:
alter table `influencers` convert to character set utf8 collate utf8_general_ci;注意:your collation (utf8_general_ci) is not your encoding (character set) -对MySQL的一个常见误解。
发布于 2011-05-20 06:11:46
也许不是最有帮助的答案,但我只是在Rails 3w/ Ruby 1.9.2中组合了一个样本测试,它工作得很好。据我所知,字符编码在Ruby1.9中做了很大的改进。
注意:在我的测试中,我只是在rails控制台中复制了您的文本
:001 > author_name = 'Tart Deco™'
=> "Tart Deco™"
:002 > Influencer.find(:first,:conditions => ["author_name = ?", author_name])
=> nil 当然,我只是伪造了一个没有记录的Influencer模型。但是MySQL没有吐。所以,我用这个名字给我的模型添加了一条记录,它检索得很好。
HTH
发布于 2011-06-03 23:05:58
您的问题多少与Ruby1.8及其字符编码管理有关。尝试强制转换从CSV读取的文本,从ASCII到UTF8,使用图标。
简单的例子:
csv_text = SOME_CSV_READ_CODE # get the string or text
# instantiate a Iconv converter from generic ASCII to UTF8, ignoring errors
converter = Iconv.new('UTF-8//IGNORE', 'ASCII//IGNORE')
# clean string from unrecognized chars
utf8_text = converter.iconv(csv_text).unpack('U*').select{ |cp| cp < 127 }.pack('U*')在这种情况下,您应该(至少)在查询中使用author_name参数之前对其进行转换。在db上保存文本/字符串时,请确保执行相同的操作,否则在插入/更新过程中会出现类似的错误。
https://stackoverflow.com/questions/6065037
复制相似问题