MYSQL非常奇怪的选择行为

ale*_*rio 1 mysql select behavior

我有一个Mysql(5.1.58-1ubuntu1)'用户'表(InnoDB存储引擎,utf8通用ci整理)有3个字段(为简单起见):

  • id:int(主键)
  • username:varchar(255) - utf8_general_ci
  • 密码:varchar(255) - utf8_general_ci

在此表中只有两条记录(为简单起见):

id| username | password
-----------------------
1 | myuser   | custom1
2 | myuser2  | custom2
Run Code Online (Sandbox Code Playgroud)

所以,如果我运行此查询

 select * from users where username = 0 and password = 0
Run Code Online (Sandbox Code Playgroud)

mysql返回所有记录.

相反,如果我运行下面的查询

select * from users where username = '0' and password = '0'
Run Code Online (Sandbox Code Playgroud)

MySql给我一个空集.

对于我的看法,这种行为很奇怪,似乎是一个难题.

有人有任何解释吗?

Luk*_*ský 5

这不是一个错误.您只能比较相同类型的值,因此MySQL会以静默方式将文本"myuser"转换为值为0的整数.