mysql:customer_number = int (不可更改)
$query = "SELECT * FROM clients WHERE customer_number= '123F'" 结果应该为空。
查询的结果不正确,因为MySQL忽略了构成整型数据类型的值的任何字母字符,例如‘F’
发布于 2019-03-08 15:26:12
您可以检查提供的值是否为严格整数。
$query = "SELECT * FROM clients WHERE customer_number= '123F'
AND '123F' REGEXP '^-?[0-9]+$'";AND必须同时满足这两个条件。
因此,即使MySQL忽略来自123F的F并将其视为123,第二个条件也将返回FALSE,并且123F将无法执行严格整数条件的正则表达式。
这将产生以下结果:
123 ->通行证
123F ->失败
发布于 2019-03-08 15:23:34
您可以将customer_number转换为string:
SELECT *
FROM clients
WHERE CAST(customer_number as CHAR(50)) = '123F'上面的查询当然不是SARGable。考虑在构造查询之前在客户端处理比较参数。
发布于 2019-03-08 15:47:24
或者,如果字符串中的整数等于字符串(将字符串更改为您的字段名),则选中作为第一个条件:
SELECT * FROM clients
WHERE
'123F'+0 = '123F'
AND
customer_number= '123F';https://stackoverflow.com/questions/55058389
复制相似问题