2015-04-24 2 views
1

Я на рубине 2.2.0 и рельсах 4.2.0.Ошибка кодирования DB, когда я ищу запись

Для проекта у меня есть таблица, называющая «Символ», где каждая запись является символом. Когда я делаю поиск записи с «где», например, фреймворк совершает ошибку между символом.

Например:

Basic.where(:character => 'Í') 

возвратного все записи с Мне нравится характер: "Я", характер: "Я", характер: "я", характер: "Я", характер: "Я" , ...

Моя БД кодируется в utf8-general-ci, и когда я помещаю свои данные в db, я использую кодировку iso-8859-1: utf-8.

+0

Я думаю, что существует вероятность столкновения имени ... потому что и имя таблицы, и имя атрибута одинаковы ... попробуйте изменить его и ответить ... – Milind

+0

Я пробовал. Проблема не решена –

ответ

0

utf8_general_ci имеет вопрос, были ли полосы символов с комбинированными символами. Короче говоря, utf8_unicode_ci, который использует алгоритм сортировки Unicode и вместо этого. Ответы на вопросы были получены очень хорошо в What are the diffrences between utf8_general_ci and utf8_unicode_ci?

EDIT: На самом деле это похоже даже на 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. Если вы можете контролировать выбор БД, я бы предложил использовать Postgres вместо этого

Смежные вопросы