2013-01-09 1 views
2

В MySQL, я могу указать параметры сортировки, если у меня есть стандарт ИНЕКЕ следующим образом:В MySQL Как указать предложение Collation для WHERE-IN?

SELECT * FROM myTable WHERE email_address = '[email protected]' COLLATE utf8_general_ci; 

Однако следующее терпит неудачу, если у меня есть несколько адресов электронной почты в WHERE-IN пункта

SELECT * FROM myTable WHERE email_address IN ('[email protected]', '[email protected]') COLLATE utf8_general_ci; 

Что мне не хватает, чтобы заставить это работать? Mysql 5.5.

Спасибо!

+0

Почему вы используете для сортировки 'email' столбца, по определению, всегда должны иметь только ASCII-символы в безопасности? А какая сортировка - это столбец? – zerkms

+0

Хотелось бы, чтобы это было так. Письма могут иметь всевозможные интересные персонажи: http://stackoverflow.com/questions/3844431/are-email-addresses-allowed-to-contain-non-alphanumeric-characters – Newtang

+0

О, это интересно. Почему вы не создали столбец с настройкой utf8? – zerkms

ответ

3

Что делать, если вы укажете его после каждой строки:

WHERE email_address IN ('[email protected]' COLLATE utf8_general_ci, '[email protected]' COLLATE utf8_general_ci) 

?

+1

Кажется, это работает при наличии только одного предложения COLLATE внутри IN. – Newtang

+0

@Newtang: как именно? И что произойдет, если вы укажете его несколько раз? – zerkms

+0

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

1

попробовать это

SELECT * 
FROM myTable 
WHERE FIND_IN_SET(email_address, '[email protected],[email protected]' COLLATE utf8_general_ci); 
+0

Любые причины предпочитать 'FIND_IN_SET' (который не может быть оптимизирован хорошо) над' IN' в этом случае? – zerkms

+0

@zerkms не предпочитает, а альтернатива вашему ответу –

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