我正在做一些查询调试,发现在将 varchar 字段与文字进行比较时,我得到了意想不到的(虽然显然是正确的)TRUE。具体如下:
- 有问题的行只是一个自动增量 int 主键和一个 varchar(255)
- 设置添加单行:
insert into comp_test(test_string) values('TestString');
where test_string='tESTsTRING'
子句为真where test_string='TestString '
子句为真(最后用空格填充)
因此,在构建我的问题时,我可以在一篇类似的帖子中描述原因以及如何强制区分大小写(使用 BINARY 和 COLLATE 等)。BINARY 和 COLLATE 解决方案是否也会导致空白填充使子句为假?
我现在有了部分解决方案,但谁能解释为什么等价比较如此草率?在上述情况下,如果 test_string 中的值是 8 个字符的字符串,则大约有 64,000 个文字会导致比较结果为真。那是什么样的等价物?这似乎是错误的,几乎所有其他语言都不会允许除 1 对 1 等价外的任何东西。
提前致谢。