首页 > 解决方案 > `select * from table where cloumn(varchar) =0` 选择所有数据

问题描述

大家,我在 MySQL 5.7 上执行 select 查询时发现了一个奇怪的性能,这真的很困惑。

我的表(MySQL 5.7)

CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) NOT NULL DEFAULT '',
  `password` char(32) NOT NULL DEFAULT '',
  `age` int(11) DEFAULT NULL,
  `phone` varchar(32) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8

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

解决方案


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


推荐阅读