MYSQL Очень странное поведение выбора - PullRequest
1 голос
/ 10 декабря 2011

У меня есть Mysql (5.1.58-1ubuntu1) 'таблица' пользователей ( InnoDB механизм хранения, utf8 general ci сопоставление) с 3 полями (для простоты):

  • id : int (первичный ключ)
  • имя пользователя : varchar (255) - utf8_general_ci
  • пароль : varchar (255) - utf8_general_ci

В этой таблице есть только две записи (всегда для простоты):

id| username | password
-----------------------
1 | myuser   | custom1
2 | myuser2  | custom2

Итак, если я выполню этот запрос

 select * from users where username = 0 and password = 0

mysql верните мне все записи.

Наоборот, если я выполню запрос ниже

select * from users where username = '0' and password = '0'

MySql вернет мне пустой набор.

На мой взгляд, это поведение очень странное и похоже на Hard Bug.

У кого-нибудь есть объяснения?

1 Ответ

5 голосов
/ 10 декабря 2011

Это не ошибка. Вы можете сравнивать только значения тех же типов, поэтому MySQL молча преобразует ваш текст «myuser» в целое число со значением 0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...