запрос mysql выбирает как с диакритическими турецкими буквами

У меня есть таблица токенов на турецком языке; сортировка по умолчанию — utf8_general_ci. На сервере FreeBSD версия mysql — 5.6.15.

Я хочу сделать запрос;

select * from tokens where type like 'âmâ';

or

select * from tokens where type='âmâ';

С этими запросами результат должен быть уникальным для «ama» (это также означает «слепой» на турецком языке). Но у меня есть четыре необработанных результата;

result 1 "amâ" means 'but'
result 2 "ama" means 'but'
result 3 "âma" means 'blind'
result 4 "âmâ" means 'blind'

этого я не хотел.

Я пробовал разные сопоставления, наборы символов и имена. Но такие же результаты с рабочими.

Любая помощь, пожалуйста


person Yilmazerhakan    schedule 17.03.2014    source источник
comment
можете ли вы попробовать выбрать * из токенов, где двоичный тип = 'amâ'; ?   -  person fthiella    schedule 17.03.2014
comment
все решилось, спасибо большое...   -  person Yilmazerhakan    schedule 17.03.2014


Ответы (2)


Вы можете принудительно выполнить бинарное сравнение:

SELECT * FROM tokens WHERE BINARY type='âmâ';

см. документацию по бинарному оператору.

person fthiella    schedule 18.03.2014

Турецкое сопоставление: latin5_turkish_ci. См.: Наборы символов и сопоставления в MySQL.

Используйте ключевое слово COLLATE в предложении WHERE.

SELECT *
FROM tokens
WHERE type = 'âmâ' COLLATE latin5_turkish_ci;

Я не проверял это. Я надеюсь, что это помогает.

См.: Использование COLLATE в операторах SQL и Сортировка выражений.

person Olivier Jacot-Descombes    schedule 17.03.2014
comment
спасибо, но это дает ошибку /* Ошибка SQL (1253): COLLATION 'latin5_turkish_ci' недействительна для CHARACTER SET 'utf8' */, потому что моя сортировка по умолчанию - utf8_general_ci - person Yilmazerhakan; 17.03.2014
comment
Если есть сопоставление utf8_turkish_ci, вы также можете попробовать его. - person Olivier Jacot-Descombes; 18.03.2014