Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql `从表中选择*,其中cloumn(varchar)=0`选择所有数据_Mysql - Fatal编程技术网

Mysql `从表中选择*,其中cloumn(varchar)=0`选择所有数据

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 | |------|--------|-----------

各位,我在MySQL 5.7上执行select查询时发现了一个奇怪的性能,这真的很混乱

我的表(MySQL 5.7)

我的SQL查询:

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类型转换的更多详细信息


不要感谢我们,而要追随。不要感谢我们,而要追随