我试图用字母数字的“短代码”列来搜索记录。类似于:

SELECT * FROM items WHERE short_code = "1AV9"

由于没有排序规则且列类型设置为varchar(),此查询不区分大小写,因此它返回短代码为1av9、1av9等的记录。我不希望这样。
因此,我尝试将short_code列的排序规则更改为utf8_bin,但现在查询根本没有返回任何内容。但是,如果我将查询更改为:
SELECT * FROM items WHERE short_code LIKE "1AV9%"

然后我得到我想要的那一排。是否有可能通过转换列的排序规则,它以某种方式在我的所有缺点的末尾附加了不可见的字符?如何验证/修复此问题?
编辑:通过将列类型更改为binary并尝试其他方法,它以某种方式用空字节填充了我所有的短代码,这解释了为什么查询不会返回任何结果。重新开始并设置utf8_bin排序规则后,一切都按预期工作。

最佳答案

尝试

SELECT LENGTH(short_code) FROM items WHERE short_code LIKE "1AV9%"

看看结果是否不是4。
编辑:嗯,您的值可能有尾随空格。尝试
SELECT * FROM items WHERE short_code = "1AV9    "

(这是1AV9加上四个空格)看看是否有结果。

09-27 19:04