首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >rails mysql编码问题/问题- Mysql::Error:非法混合排序规则(latin1_swedish_ci,隐式)和(utf8_general_ci,强制)

rails mysql编码问题/问题- Mysql::Error:非法混合排序规则(latin1_swedish_ci,隐式)和(utf8_general_ci,强制)
EN

Stack Overflow用户
提问于 2011-05-20 05:22:36
回答 4查看 6.6K关注 0票数 11

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,它会很好,主要是我只是不想它坏了…

EN

回答 4

Stack Overflow用户

发布于 2011-06-10 19:15:27

确保您的表使用uft8字符集:

代码语言:javascript
复制
alter table `influencers` convert to character set utf8 collate utf8_general_ci;

注意:your collation (utf8_general_ci) is not your encoding (character set) -对MySQL的一个常见误解。

票数 16
EN

Stack Overflow用户

发布于 2011-05-20 06:11:46

也许不是最有帮助的答案,但我只是在Rails 3w/ Ruby 1.9.2中组合了一个样本测试,它工作得很好。据我所知,字符编码在Ruby1.9中做了很大的改进。

注意:在我的测试中,我只是在rails控制台中复制了您的文本

代码语言:javascript
复制
:001 > author_name = 'Tart Deco™'
=> "Tart Deco™"
:002 > Influencer.find(:first,:conditions => ["author_name = ?", author_name])
=> nil 

当然,我只是伪造了一个没有记录的Influencer模型。但是MySQL没有吐。所以,我用这个名字给我的模型添加了一条记录,它检索得很好。

HTH

票数 1
EN

Stack Overflow用户

发布于 2011-06-03 23:05:58

您的问题多少与Ruby1.8及其字符编码管理有关。尝试强制转换从CSV读取的文本,从ASCII到UTF8,使用图标。

简单的例子:

代码语言:javascript
复制
 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上保存文本/字符串时,请确保执行相同的操作,否则在插入/更新过程中会出现类似的错误。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6065037

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档