我使用的是ruby 2.2.0和rails 4.2.0。
对于一个项目,我有一个表calles'Character',其中每个记录都是一个字符。当我在搜索带有'where'的记录时,例如框架在字符之间做错了。
例如:
Basic.where(:character => 'Í')
用我喜欢的字符返回所有记录:“我”,字符:“我”,字符:“i”,字符:“í”,字符:“ì”,...
我的数据库在utf8-general-ci中编码,当我将数据放入数据库时,我使用'iso-8859-1:utf-8'编码。
答案 0 :(得分:0)
utf8_general_ci
有问题是它用字符组合来删除字符。简而言之,使用Unicode归类算法而不是utf8_unicode_ci
。在What are the diffrences between utf8_general_ci and utf8_unicode_ci?
编辑:
实际上,utf8_unicode_ci
似乎没有正确处理这个问题。
这是我用来测试此代码的代码
SET collation_connection = 'utf8_bin';
SELECT 'Ï' = 'I'; -- 0
SET collation_connection = 'utf8_unicode_ci';
SELECT 'Ï' = 'I'; -- 1
SET collation_connection = 'utf8_general_ci';
SELECT 'Ï' = 'I'; -- 1
SET collation_connection = 'utf8mb4_bin';
SELECT 'Ï' = 'I'; -- 0
SET collation_connection = 'utf8mb4_unicode_ci';
SELECT 'Ï' = 'I'; -- 1
SET collation_connection = 'utf8mb4_general_ci';
SELECT 'Ï' = 'I'; -- 1
EDIT2:
看起来Postgres处理得更好,http://sqlfiddle.com/#!15/9eecb/797。如果您可以控制DB的选择,我建议使用Postgres