Mysql 在WHERE子句中防止隐式转换或检测不兼容的格式

Mysql 在WHERE子句中防止隐式转换或检测不兼容的格式,mysql,Mysql,所以我有一个系统,管理员可以通过搜索用户输入的字符串并选择要搜索的列来查找行 显然,如果我在几行中有一个INT列id=0,那么无论字符串“bob”在转换为INT时变为0,它们都会在结果中弹出,所以 WHERE id = 'bob' 将成为 WHERE id = 0 所以我得到了很多没有意义的结果 我不认为有什么方法可以阻止mysql停止隐式转换(此外,它可能会破坏站点中其他地方的其他内容),但知道要搜索的选定列可以是INT或字符串,有没有其他解决方案可以避免这种情况?或者有没有一种方法可以检

所以我有一个系统,管理员可以通过搜索用户输入的字符串并选择要搜索的列来查找行

显然,如果我在几行中有一个INT列id=0,那么无论字符串“bob”在转换为INT时变为0,它们都会在结果中弹出,所以

WHERE id = 'bob'
将成为

WHERE id = 0
所以我得到了很多没有意义的结果


我不认为有什么方法可以阻止mysql停止隐式转换(此外,它可能会破坏站点中其他地方的其他内容),但知道要搜索的选定列可以是INT或字符串,有没有其他解决方案可以避免这种情况?或者有没有一种方法可以检测不兼容的类型并返回空结果集而不执行查询?

您可以在
信息\u schema.columns
中找到该类型,并在应用程序中使用该信息来构造查询或一起拒绝输入。我知道更改标识符通常是不可能的,但这可能是摆脱
0
值的一种选择吗?例如,将这些列从
1
开始,或将
0
替换为
null
?(编辑:当然,这只适用于这种情况,Gordon的尝试在一般情况下看起来更可行)。在这些情况下,MySQL可能会发出警告。我认为这可能值得一试:警告是:
1292 |截断了不正确的双精度值:“bob”
。是的,我曾经想到过类似于Gordon的东西,但希望它能很容易修复。谢谢大家的建议,但我还是同意Gordon的建议,因为这是我所做的最灵活的方法,并且有一些小的改动。戈登,你能把它写成一个答案让我接受吗?