2016-10-21 3 views
0

У меня есть таблица вроде этого:MySQL выбрать по разнице между строчными и прописными буквами

Table name: hash_table 
---------------- 
id  hash 
---------------- 
1   abc 
2   aBc 
3   abC 
4   AbC 
5   ABc 
---------------- 

Существует разница между строчными и прописными буквами. Например abc неравномерно aBc.

В этом запросе, возвращают все строки:

SELECT * FROM `hash_table` WHERE `hash` = "abc" 

При поиске в StackOverflow, некоторые ответы говорят о UPPER, LOWER и UCASE использование в запросе на выборку, но они возвращаются все строки.

Есть ли способ вернуть только правильную строку?

ответ

1

Сравнение строк может быть выполнено в sql двумя разными способами: ... двоичным, а не двоичным. Если вы не используете бинарный код, то сравнение будет случайным. Если вы используете двоичный код, сравнение выполняется байт а также чувствителен к регистру ..

попробовать использовать

SELECT * FROM `hash_table` WHERE BINARY `hash` = BINARY "abc" 
+0

Спасибо ❤️ я проверить это и правильно. Но столбец 'hash' -' varchar' и 'utf8_general_ci', этот код не имеет проблем? – mghhgm

+0

Вы можете посмотреть http://dev.mysql.com/doc/refman/5.7/en/charset-general.html – scaisEdge

+1

И помните, что вы можете конвертировать кодировку и коллекцию на лету, если вам нужно .. но в select shoul будет приниматься rdbms одной и той же кодировкой таблицы. – scaisEdge

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