Чутливі до регістру пошук для mysql

Чутливі до регістру пошук для MySQL

Якщо Ви вже давно працюєте з ПО MySQL, то звернули увагу, що будь-яка вибірка, або пошук йде без урахування регістру. У більшості випадків, це зручно, проте, іноді все-таки буває потрібно зробити чутливі до регістру пошук для MySQL. Ось про це я сьогодні і напишу.

Щоб стало зрозуміло, про що йде мова, давайте відразу наведу приклад SQL-запиту:

Відео: 20. Регістр PCL і команда асемблера RETLW для мікроконтролерів PIC (Урок 17. Теорія)

SELECT * FROM `users` WHERE `login`=`Admin`

Даний запит поверне користувача з логіном "admin". Однак, все не зовсім не так. Якщо буде користувач"Admin"(Або, наприклад,"AdMiNM"), То він також буде результуючим.

Відео: Вчимося переходити в верхній регістр!




На практиці такий помилки не буде. Якщо Ви все правильно зробили (хоча б поставили UNIQUE на відповідне поле), то такі значення як "admin"І"Admin"Ніколи разом не будуть. Тому в даному випадку, чутливі до регістру вибірка зовсім не потрібна.

А ось розберемо ще один приклад. Припустимо, у Вас в базі зберігаються відкриті паролі (це дуже погано, але припустимо), і Ви хочете провести авторизацію користувача. Припустимо, що у користувача "admin"Пароль"myPassWord". Однак, користувач вводить такий пароль:"mypassword". У результаті вийде такий SQL-запит:

SELECT * FROM `users` WHERE `login`=`Admin` AND `password`=`Mypassword`


Так як регістр за умовчанням не враховується, отже, такий користувач буде знайдений і пароль співпаде, чого бути не повинно, тому що якщо регістр логіна не важливий, то ось регістр пароля обов`язково треба враховувати.

Проблема вирішується за допомогою BINARY. Якщо вказати даний оператор в запиті, то наступні за ним рядки будуть чутливі до регістру. Це працює з наступних причин: всі подальші рядки після BINARY будуть переведені в двійковий код. А код для верхнього і нижнього регістра різниться. Отже, операція порівняння, якщо рядки не збігаються з точністю до регістру, поверне false, оскільки їх двійковий код різний. Для нашого з Вами прикладу ось цей запит буде вірним:

SELECT * FROM `users` WHERE `login`=`Admin` AND BINARY `password`=`Mypassword`

Ось тепер, якщо пароль буде введений без урахування регістру, то буде помилка авторизації. Як можна побачити, BINARY стоїть перед паролем, отже, в логіні регістр враховуватися не буде, а в паролі регістр буде врахований. Саме так і повинно бути.

Ось таким нескладним способом робиться чутливі до регістру пошук і вибірка для MySQL.

Поділися в соціальних мережах:

Схожі
Обробка форми в phpОбробка форми в php
Створення движка на mvc. Робимо можливість редагування і видалення користувачів.Створення движка на mvc. Робимо можливість редагування і видалення користувачів.
Відправка cookie через curlВідправка cookie через curl
Як створити admin-панель для сайтуЯк створити admin-панель для сайту
Запит sql для сортування результату вибіркиЗапит sql для сортування результату вибірки
Запит sql на вибірку записівЗапит sql на вибірку записів
Команда find - пошук рядка символів в файліКоманда find - пошук рядка символів в файлі
Індекси в mysqlІндекси в mysql
Відправлення запитів до бази даних в phpВідправлення запитів до бази даних в php
Як зробити типи користувачів на phpЯк зробити типи користувачів на php
» » Чутливі до регістру пошук для mysql