Поиск с учетом регистра в SQL не работает

0

Я создал базу данных без определения набора символов, поэтому он по умолчанию был латинским. Теперь мне нужно сделать поиск с учетом регистра, поэтому я использовал команду:

    $sql = "SELECT * FROM Users WHERE username = '$value' COLLATE SQL_Latin1_General_CP1_CS_AS";

Проблема в том, что он не возвращает совпадений. На моей веб-странице у меня есть <meta charset="utf-8"> в head страницы, поэтому я задаюсь вопросом, может ли быть проблема кодировки кодировки. Если я делаю поиск без COLLATE SQL_Latin1_General_CP1_CS_AS он работает, но он нечувствителен к регистру.

В чем может быть проблема? Должен ли я конвертировать базу данных, чтобы всегда использовать utf-8?

  • 0
    Кодировка не проблема, но вы всегда должны использовать UTF-8 (utf8mb4). Вы должны использовать регистрозависимое или двоичное сопоставление. dev.mysql.com/doc/refman/5.0/en/case-sensitivity.html
  • 0
    Я бы использовал нечувствительные к регистру имена пользователей, чтобы людям было проще запомнить их имя и не забыть, есть ли в имени пользователя прописные буквы. Но это не мне решать, это ваше решение.
Показать ещё 3 комментария
Теги:

1 ответ

0
Лучший ответ

Попробуйте двоичный оператор:

$sql = "SELECT * FROM Users WHERE BINARY username = '$_POST[userName]'";
  • 0
    Это сработало, спасибо

Ещё вопросы

Сообщество Overcoder
Наверх
Меню