MySQL手册包含the following interesting note有关在IN条件下混合带引号和不带引号的值的信息:


切勿在IN()列表中混合带引号和不带引号的值,因为带引号的值(例如字符串)和未带引号的值(例如数字)的比较规则不同。因此,混合类型可能导致结果不一致。


但是,它并没有真正解释为什么这是一个问题。它有示例,但没有显示正在查询的数据或结果,因此它们仅用作说明,而没有给出关于该问题的任何解释。

我有两个问题:


为什么这会在MySQL中引起问题?理想情况下,提供一个示例,说明结果错误/不一致/不直观。
这是MySQL特有的怪癖还是对其他数据库系统适用?我尤其对这个问题是否影响SQL Server感兴趣,但是理想情况下,我希望在一般情况下回答该问题。

最佳答案

这取决于您认为“非直觉”的东西。这将返回false:

'00' in ('0', '01')


但是,这返回true:

'00' in (0, '01')

09-26 02:43