gpt4 book ai didi

mysql - 如何强制 mySQL 在 WHERE 比较中不将 varchar 转换为数字

转载 作者:行者123 更新时间:2023-11-29 11:55:51 25 4
gpt4 key购买 nike

当包含 varchar 类型列的表包含可以转换为数值的数据(例如“100”)时,mySQL(有帮助吗??)会将 WHERE 字符串转换为数值并返回匹配项

WHERE column = '100'
WHERE column = '100.00'
WHERE column = '100abc'
WHERE column = '100areyoukiddingme'

我只想返回精确匹配,但不想使用WHERE BINARY column = 因为当值不是数字时,这会强制进行区分大小写的搜索,这是我不想要的。我还想避免使用 REGEX 或 LIKE,因为这会涉及表扫描。

搜索字符串是最终用户输入的临时值,可以是也可以不是数字,表中的值也是如此。

除了在 PHP 中对列进行双重检查以检查该列是否确实匹配之外,如何测试完全匹配。类似的东西

WHERE column === '100abc'

那就太好了。

编辑

这不是 mySQL 的行为方式,这是我没有检查正在测试的表的错误 - 该列没有按预期定义为 varchar,而是 INT(11),因此 mySQL 将所有字符串正确转换为整数。

最佳答案

create table t7
( id int auto_increment primary key,
thing varchar(100) not null
);

insert t7(thing) values ('100'),('100kidding');

select * from t7 where thing='100';
+----+-------+
| id | thing |
+----+-------+
| 1 | 100 |
+----+-------+

select * from t7 where thing='100kidding';
+----+------------+
| id | thing |
+----+------------+
| 2 | 100kidding |
+----+------------+

select * from t7 where thing=100;
+----+------------+
| id | thing |
+----+------------+
| 1 | 100 |
| 2 | 100kidding |
+----+------------+

您知道它是一个字符串(意味着您知道您的架构有一个 varchar)。因此,无论如何都要传递一个字符串。

关于mysql - 如何强制 mySQL 在 WHERE 比较中不将 varchar 转换为数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33201107/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com