проверка наличия заглавных букв в запросе mysql

#php #mysql #sql

#php #mysql #sql

Вопрос:

у меня есть таблица с некоторыми полями электронной почты. Некоторые записи электронной почты написаны заглавными буквами, а некоторые — регистром верблюда . Теперь мне нужно преобразовать все электронные письма с заглавными буквами в маленькие буквы. Я могу сделать это с помощью PHP-скрипта, извлекая каждую запись, затем проверяя ее на наличие любых заглавных букв, а затем преобразуя ее в нижний регистр, если найдена какая-либо заглавная буква.

Есть ли в Mysql какой-либо способ, с помощью которого мы можем получить только те записи, которые содержат в них заглавные буквы, а не все?? Таким образом, я буду избавлен от выполнения каждой записи. Я ищу способ в Mysql, с помощью которого мы можем проверять наличие заглавных букв в записи в самом запросе. Есть предложения??

Комментарии:

1. Что вы подразумеваете под «записями электронной почты»? Если вы говорите о ADDR_SPECs, то вам может потребоваться учесть, что, хотя домены не чувствительны к регистру, имена почтовых ящиков иногда чувствительны.

Ответ №1:

Измените параметры сортировки на параметры сортировки с учетом регистра.

Но на самом деле, сколько времени займет этот запрос?

 update `table` set email = lower(email)
  

Редактировать: обновлять только записи, содержащие не только строчные электронные письма:

 update 
    `table`
set
    email = lower(email) 
where
    email <> lower(email)
collate
    latin1_general_cs
  

Вы можете проверить это, выбрав их первыми:

 select 
    *
from
    `table`
where
    email <> lower(email)
collate
    latin1_general_cs
limit 
    10
  

Комментарии:

1. я не хочу трогать те идентификаторы электронной почты, в которых нет заглавной буквы, поскольку в этой таблице есть огромные данные, и обход всех здесь не является хорошим решением

2. до сих пор мне не хватало «сопоставить latin1_general_cs» …. что это делает конкретно в этом query…it было бы здорово, если бы вы могли объяснить и это тоже 🙂

3. Сопоставление в СУБД определяет, как обрабатываются запросы к заданному набору данных. CI означает нечувствительный к регистру, поэтому «foo» соответствует «foo», «FOO», «Foo» и так далее. CS чувствителен к регистру, поэтому должно быть точное совпадение. Параметры сортировки по умолчанию, используемые в большинстве систем баз данных, не чувствительны к регистру. Смотрите также здесь .

4. @developer — Если это одноразовое упражнение — в чем вред? Просто приходите как-то очень рано утром.