MySQL使用BINARY查询中文问题排查

1,817 阅读1分钟

今天发现有个查询查不到数据库数据。经过我的仔细查看代码,仍然没发现问题所在。

没办法,之后把SQL打印出来,大概是这样的

SELECT COUNT(*) FROM xxx WHERE COL_A = BINARY("某中文");

拿到SQL直接在数据库试了一下。what?真查不出数据。 因为项目用的客户这边封装的Mybatis,所有查询基本都是用带BINARY函数的。之前的查询都没问题,怎么就突然出问题了呢?

我尝试把BINARY去掉,果然一去掉就能查出来数据了。所以直接把BINARY去掉? 我并不想这么干,出现这个问题,我猜测是字符集出问题了。于是,我查看了一下目标表的字符集。

果然,字符集是GBK。 what?一直都是用UTF-8,谁给整出个GBK来了。我把表字符集改成UTF-8后又一试,还是不行,我怀疑了几秒人生后,突然发现字段的字符集没有改。

所以改字符集要记得改字段的。附上表和字段一起改的SQL

ALTER xxx CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;