由于项目环境的缘故, 在java项目中使用了ibatis, 而ibatis已经有个数据源是aiscii (iso8859)编码,因此mysql 数据库必须使用latin1编码, mysql客户端库也使用latin1编码,正常情况下,使用都正常,但发现有几个数据很奇怪,如只过滤"淘_淘"的数据,结果把"象_王"的数据查了出来, 和DBA一起搞了半天,使用hex函数查看"淘_淘"和"象_王"的ascii值也是不同的, 换成GBK编码,结果是好的,可以区分
"象_王"和"淘_淘", 说明是编码问题, 这样就是查看编码,使用show variables like 'colla%'; 结果是:
--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1

本文探讨了一起在Java项目中使用iBatis时遇到的MySQL编码问题。由于数据库和客户端库均使用latin1编码,但在查询过程中出现混淆情况。经过排查,发现并非字符集设置问题,而是校对集(collation)的影响。具体表现为latin1_swedish_ci校对集导致某些字符无法正确区分。通过将校对集转换为latin1_bin解决了问题,并建议在创建数据库和表时明确指定编码和校对集。
最低0.47元/天 解锁文章
1468

被折叠的 条评论
为什么被折叠?



