Чутливі до регістру пошук для 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.
- Pocket admin
- Вийшов відеокурс "створення інтернет-магазину на php і mysql"
- Як дізнатися останній id в mysql
- Як створити admin-панель для сайту
- Як зробити типи користувачів на php
- Команда find - пошук рядка символів в файлі
- Індекси в mysql
- Конструкція where в sql
- Перевірка зайнятості логіна на ajax
- Sql-запит на вибірку з декількох таблиць
- Випадкова вибірка з бази даних
- Запит sql на вибірку записів
- Створення движка на mvc. Робимо можливість редагування і видалення користувачів.
- Sql-запити для роботи з таблицями
- Відправка cookie через curl
- Обробка форми в php
- Підключення до бази даних в php
- Настроювані поля введення.
- Оптимізація запитів до mysql
- Відправлення запитів до бази даних в php
- Запит sql на додавання і видалення записів