2016-03-03 3 views
0

В настоящее время я пытаюсь внести в белый список/черный список на основе входных данных пользователя со следующими SQL заявления:MYSQL В заявлении, где значения нечувствительны к регистру

SELECT * FROM Customers WHERE City IN ('Paris','London'); 
SELECT * FROM Customers WHERE City NOT IN ('Paris','London'); 

Какой синтаксис необходим такой, что Париж и Лондон чувствительны к регистру и матч париж и лондон?

Спасибо.

+1

Проверить для сортировки без учета регистра http://dev.mysql.com/doc /refman/5.7/en/case-sensitivity.html –

ответ

3

Просто определить правильный порядок сопоставления ваших полей БД и индекс работа прекрасна тоже.

http://dev.mysql.com/doc/refman/5.7/en/case-sensitivity.html

Как вы можете видеть latin1_bin'MySQL' <> 'mysql'

mysql> SET @s1 = 'MySQL' COLLATE latin1_bin, 
    ->  @s2 = 'mysql' COLLATE latin1_bin; 
mysql> SELECT @s1 = @s2; 
+-----------+ 
| @s1 = @s2 | 
+-----------+ 
|   0 | 
+-----------+ 

Но latin1_swedish_ci равны

mysql> SELECT @s1 COLLATE latin1_swedish_ci = @s2; 
+-------------------------------------+ 
| @s1 COLLATE latin1_swedish_ci = @s2 | 
+-------------------------------------+ 
|         1 | 
+-------------------------------------+ 
2

Вы можете сделать это, но если вы индексируются City надеясь оптимизировать запрос, добавив функцию LOWER убьёт оптимизации:

SELECT * FROM Customers WHERE LOWER(City) IN ('paris', 'london'); 
+0

Gotcha. Несчастная. Большое спасибо за ответ! – DeeVu

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