Mysql `从表中选择*,其中cloumn(varchar)=0`选择所有数据
各位,我在MySQL 5.7上执行select查询时发现了一个奇怪的性能,这真的很混乱 我的表(MySQL 5.7) 我的SQL查询:Mysql `从表中选择*,其中cloumn(varchar)=0`选择所有数据,mysql,Mysql,各位,我在MySQL 5.7上执行select查询时发现了一个奇怪的性能,这真的很混乱 我的表(MySQL 5.7) 我的SQL查询: SELECT * FROM `user` WHERE name=0 结果 +------+--------+--------------------+-------+---------+ | id | name | payment_password | age | phone | |------|--------|-----------
SELECT * FROM `user` WHERE name=0
结果
+------+--------+--------------------+-------+---------+
| id | name | payment_password | age | phone |
|------|--------|--------------------|-------|---------|
| 1 | test1 | | 22 | 12345 |
| 2 | test2 | | 15 | 12345 |
| 3 | test3 | | 11 | 12345 |
| 4 | test4 | | 11 | 12345 |
+------+--------+--------------------+-------+---------+
有人能解释为什么会这样吗?提前谢谢 就MySQL而言,不以转换为整数的数字开头的字符串是0。试试这个:
SELECT CAST('test1' AS UNSIGNED), 'test1' = 0
输出:
0 1
1
的第二个输出值表示MySQL认为'test1'=0
。但是如果您的字符串以数字开头,MySQL会将字符串转换为该数字
SELECT CAST('45test' AS UNSIGNED), '45test' = 45
输出
45 1
同样,第二个输出值
1
表示MySQL认为'45test'=45
就MySQL而言,不以转换为整数的数字开头的字符串是0。试试这个:
SELECT CAST('test1' AS UNSIGNED), 'test1' = 0
输出:
0 1
1
的第二个输出值表示MySQL认为'test1'=0
。但是如果您的字符串以数字开头,MySQL会将字符串转换为该数字
SELECT CAST('45test' AS UNSIGNED), '45test' = 45
输出
45 1
同样,第二个输出值
1
表示MySQL认为'45test'=45
这是因为隐式类型转换。当运算符与不同类型的操作数一起使用时,会发生类型转换以使操作数兼容。有些转换是隐式进行的。例如,MySQL会根据需要自动将数字转换为字符串,反之亦然
在您的例子中,当您使用WHERE name=0
MySQL时,可能会在WHERE子句中看到算术运算,因为name
属于varchar
类型,并在该列中执行到整数的隐式转换
您可以找到有关MySQL类型转换的更多详细信息
发生这种情况是因为隐式类型转换。当运算符与不同类型的操作数一起使用时,会发生类型转换以使操作数兼容。有些转换是隐式进行的。例如,MySQL会根据需要自动将数字转换为字符串,反之亦然 在您的例子中,当您使用
WHERE name=0
MySQL时,可能会在WHERE子句中看到算术运算,因为name
属于varchar
类型,并在该列中执行到整数的隐式转换
您可以找到有关MySQL类型转换的更多详细信息
不要感谢我们,而要追随。不要感谢我们,而要追随