mysql:customer_number = int
(无法更改)
$query = "SELECT * FROM clients WHERE customer_number= '123F'"
结果应该为空。
查询的结果是不正确的,因为MySQL会忽略所有构成整数值(例如'F')的字母字符。
答案 0 :(得分:3)
您可以检查所提供的值是否严格为整数。
$query = "SELECT * FROM clients WHERE customer_number= '123F'
AND '123F' REGEXP '^-?[0-9]+$'";
AND
强制需要两个条件。
因此,即使MySQL从F
忽略123F
并将其视为123
,第二个条件也将返回FALSE
并且123F
将失败严格整数条件。
这将产生以下结果:
123
->通过
123F
->失败
答案 1 :(得分:1)
您可以将customer_number
强制转换为字符串:
SELECT *
FROM clients
WHERE CAST(customer_number as CHAR(50)) = '123F'
上面的查询当然不是SARGable的。考虑在构造查询之前在客户端处理比较参数。
答案 2 :(得分:1)
或首先检查字符串中的整数是否等于字符串(将字符串更改为您的字段名):
SELECT * FROM clients
WHERE
'123F'+0 = '123F'
AND
customer_number= '123F';