如何解决rails mysql编码问题/问题-Mysql :: Error:排序规则latin1_swedish_ci,IMPLICIT和utf8_general_ci,COERCIBLE的非法混合
Rails 2.3.5和Ruby 1.8.7和Mysql 5.1.53 我正在加载一个csv文件,其中包含一个TM符号(商标)的字段 Tart Deco™-看起来像这样 我正在尝试进行活动记录查找: Impactr.find(:first,:conditions => [\“ author_name =?and url_discovered =?\”,author_name,site_profile_url]) Mysql :: Error:用于操作\'= \'的排序规则(latin1_swedish_ci,IMPLICIT)和(utf8_general_ci,COERCIBLE)的非法混合:SELECT * FROMinfluencers
WHERE(author_name = \'Tart Deco?\'and url_discovered = \'http: //www.joelnylund.com \')限制1
在ruby调试器中,字符串显示为:
p author_name
\“ Tart Deco \\ 231 \”
我的表编码为“ utf8_general_ci \”
所以我该怎么做?如果我存储TM,我不太在意,那很好,主要是我只是不想破坏它...
解决方法
确保您的桌子上有uft8字符集:
alter table `influencers` convert to character set utf8 collate utf8_general_ci;
注意:排序规则(utf8_general_ci)不是您的编码(字符集),这是MySQL的常见误解。
,您的问题与ruby 1.8及其字符编码管理有关。尝试使用Iconv强制从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上保存文本/字符串时执行相同的操作,否则在插入/更新过程中会出现类似的错误。
,也许这不是最有用的答案,但我只是在Rails 3 w / Ruby 1.9.2中进行了一个示例测试,它运行良好。我了解在Ruby 1.9中对字符编码进行了重大改进。
注意:在我的测试中,我只是复制了您的文本并在Rails控制台中
:001 > author_name = \'Tart Deco™\'
=> \"Tart Deco™\"
:002 > Influencer.find(:first,:conditions => [\"author_name = ?\",author_name])
=> nil
当然,我只是捏造了没有记录的影响者模型。但是MySQL并不bar之以鼻。因此,我向带有该名称的模型添加了一条记录,并且检索得很好。
高温超导
,我想问一个有关您如何加载有问题的数据的问题,但是显然“编辑队列已满”。您是在使用Rails加载文件并将其推送到数据库中,还是在使用MySQL选项之一,例如“加载数据... infile ... \”?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。