我有这张表:
CREATE TABLE `test` (
`ID` int(11) NOT NULL auto_increment,
`text` varchar(250) collate utf8_unicode_ci default NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
Content:
ID text
1 70-and-some-text
70 blub
然后我执行这个查询:
SELECT
*
FROM
test
WHERE
ID = '70-and-some-text'
OR
text = '70-and-some-text'
并得到两行结果。 MySQL 似乎尝试将尽可能多的数字与 ID 进行匹配,然后停止。我想我在某处读到过,但现在找不到了。
高度赞赏答案和提示。提前致谢。友善点,我是新人。告诉我,如果我做错了什么。我非常尊重你们。
Steffen
=================
感谢托马拉克,我现在知道问题出在哪里了。有处理这个问题的最佳实践吗?我控制“文本”,因此我可以选择“_70-and-some-text”或 PHP 的字符串。但 MySQL 中的解决方案将是“最纯粹的”。
这条线
ID = '70-and-some-text'
使 MySQL 将右侧操作数转换为 INT,因为该列的类型为 INT。转换的结果显然是数字 70。您可以将任何数据类型以字符串的形式传递到 MySQL 查询中,MySQL 透明地进行必要的类型转换,就像在本例中一样。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)