没有运算符的MySQL字符串比较-在同一服务器上不一致?

没有运算符的MySQL字符串比较-在同一服务器上不一致?,mysql,Mysql,我发现对我来说这是一个非常奇怪的现象。在我的MySQL服务器版本5.0.92中,我使用如下查询: SELECT IF(thumb, thumb, image) AS thumb FROM blog WHERE id = 200; 因为我想得到thumb值,如果它不是空的,否则就是图像值。现在,在这个服务器上的一个数据库中,它工作得非常好,就像我希望的那样。但是在同一服务器上的另一个数据库上,thumb总是计算为false,即使它不是空的,并且总是选择image的值 我知道我可以用拇指这在两个数

我发现对我来说这是一个非常奇怪的现象。在我的MySQL服务器版本5.0.92中,我使用如下查询:

SELECT IF(thumb, thumb, image) AS thumb FROM blog WHERE id = 200;
因为我想得到thumb值,如果它不是空的,否则就是图像值。现在,在这个服务器上的一个数据库中,它工作得非常好,就像我希望的那样。但是在同一服务器上的另一个数据库上,
thumb
总是计算为false,即使它不是空的,并且总是选择
image
的值


我知道我可以用拇指这在两个数据库上都有效,但请有人告诉我这是怎么发生的?这是某种特定于数据库的设置吗?

如果
thumb
是字符串列,则应该使用类似以下内容的查询:

SELECT IF(thumb IS NOT NULL AND thumb != '', thumb, image) AS thumb FROM blog WHERE id = 200;
还要检查两个数据库的
字符集
,因为字符串比较取决于字符集

SHOW CREATE DATABASE db_name;

检查db默认值,如果thumb为空,是空字符串还是空?thumb和image都不能设置为空,因此空值不应该成为问题。我说的是字符串的长度是否至少为1。在有问题的数据库上,如果thumb的值为thumb.jpg,如果(thumb,thumb,image)仍然计算为false,并且选择了image的值,这将是问题和不一致的,因为它在另一个数据库上的工作方式与我希望的一样。请尝试选择
如果(“此处的文本”,“是”,“否”)
,输出是什么,在这种情况下应该为false,在两个数据库上,“text here”的值似乎都为false,并且总是返回“no”。很抱歉,事实并非如此。所有列都使用完全相同的字符集,它们都不能为null,
SHOW CREATE DATABASE db_name
为这两个数据库显示了完全相同的内容(当然数据库名称除外)
NULL
值可能有问题,或者可能是从不同的源编译的。列的设置使它们不能
NULL
。我们讨论的是同一台MySQL服务器,但数据库不同。我希望您的两个表完全相同,数据完全相同。这很奇怪,否则肯定有一些数据库级别的设置。选中选择@@SESSION.sql_模式;它们没有相同的数据,但相关部分是相同的:在
thumb
下,单元格包含一个非空字符串。我可能也会显示一些屏幕截图,以便于可视化<代码>选择@@SESSION.sql_模式为两个数据库选择一个空字符串。