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
where子句中的MySQL错误?_Mysql_Sql - Fatal编程技术网

where子句中的MySQL错误?

where子句中的MySQL错误?,mysql,sql,Mysql,Sql,我有一个有印刷错误的查询: SELECT SUM(qty) AS 'aqty1' FROM po_details WHERE product_id ='1196' AND so_number = '1m'; 应该是: SELECT SUM(qty) AS 'aqty1' FROM po_details WHERE product_id ='1196' AND s

我有一个有印刷错误的查询:

SELECT 
     SUM(qty) 
AS 
    'aqty1' 
FROM 
     po_details 
WHERE 
     product_id ='1196' 
AND 
     so_number = '1m';
应该是:

SELECT 
     SUM(qty) 
AS 
     'aqty1' 
FROM 
     po_details 
WHERE 
     product_id ='1196' 
AND 
     so_number = '1';
但是第一个错误的查询有
so_number='1m'
神秘地正确输出,与第二个正确查询的输出相同,这不应该是正确的,对吗

product\u id
so\u number
的数据类型都是
INT
<如果
so\u number
的数据类型是
VARCHAR
,那么code>so\u number='1m'应该可以工作,因为我已经将
1m
括在引号中,条件集是
so\u number,比如'%1m%

那么,为什么上面的输入错误查询是有效的呢?MySQL错误不应该说它找不到<代码> 1M < /代码>,并将其视为<代码> 1 <代码>?这是已知的bug吗?我使用的是MySQL 5.6.14

以下是一个屏幕截图:


这是由MySQL执行的隐式转换。您可以阅读以下内容:

当运算符与不同类型的操作数一起使用时,键入 发生转换以使操作数兼容。一些转换 含蓄地发生

e、 g:


它是隐式转换,由MySQL执行。您可以阅读以下内容:

当运算符与不同类型的操作数一起使用时,键入 发生转换以使操作数兼容。一些转换 含蓄地发生

e、 g:


要比较MySQL,必须将
'1m'
转换为整数。它能做的最好的事情就是
1
。啊,这样它就不会读取字符
m
,即使我把它们括在引号里了?引号是字符串的符号,它们不是用来分组的,就像在线搜索一样。如果MySQL将字符串
'1m'
转换为整数(为了比较它必须这样做),那么当它找到非数字的
'm'
时,它会停止,因此它只找到整数
1
。要比较MySQL,必须将
'1m'
转换为整数。它能做的最好的事情就是
1
。啊,这样它就不会读取字符
m
,即使我把它们括在引号里了?引号是字符串的符号,它们不是用来分组的,就像在线搜索一样。如果MySQL将字符串
'1m'
转换为整数,它必须这样做才能进行比较,当它找到非数字的
'm'
时,它就会停止,因此它只找到整数
1
。这就是我要找的解释。谢谢隐式转换是可以的,但是像'2m'这样的字符串的“部分转换”可能会导致意外的结果——在这种情况下,oracle DB会抛出一个错误。至少MySQL中有一个意外的行为,这就是我要寻找的解释。谢谢隐式转换是可以的,但是像'2m'这样的字符串的“部分转换”可能会导致意外的结果——在这种情况下,oracle DB会抛出一个错误。至少在MySQL中有一个意外的行为,IMHO。。。
mysql> SELECT 1+'1';
        -> 2
mysql> SELECT CONCAT(2,' test');
        -> '2 test'