我有这张桌子:
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
Run Code Online (Sandbox Code Playgroud)
内容:
ID text 1 70-and-some-text 70 blub
然后我执行这个查询:
SELECT
*
FROM
test
WHERE
ID = '70-and-some-text'
OR
text = '70-and-some-text'
Run Code Online (Sandbox Code Playgroud)
并获得两行.似乎MySQL试图匹配ID的数量,然后停止.我想我在某个地方看过,但再也找不到了.
答案和提示非常感谢.提前致谢.善待,我是新人.告诉我,如果我做错了什么.我非常尊重你们.
斯特芬
==================
感谢Tomalak,我现在知道问题的来源.处理这个问题的最佳做法是什么?我控制'文本',所以我可以使用PHP来获取'_70-and-some-text'或字符串.但MySQL中的解决方案将是"最纯粹的".
这条线
ID = '70-and-some-text'
Run Code Online (Sandbox Code Playgroud)
使MySQL将右侧操作数转换为INT,因为该列的类型为INT.转换显然会导致数字70.您可以将任何数据类型以字符串的形式传递给MySQL查询,MySQL可以透明地进行必要的类型转换,就像在这种情况下一样.