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 * FROM
influencers
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 ... \”?     

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...