无忧技术网 - RSS订阅 
无忧技术网

mysql 编码问题 latin1(iso8859)


作者:[佚名] - 发布:2010-9-2 8:44:13 - 来源:莫建祥的专栏

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

+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |

说明编码没问题, 这就奇怪了,再查看mysql文档,发现还有一个校对集的概念,是不是校对集的问题,使用 show variables like 'colla%'; 查看,结果如下:

+----------------------+-------------------+
| Variable_name | Value |
+----------------------+-------------------+
| collation_connection | latin1_swedish_ci |
| collation_database | latin1_swedish_ci |
| collation_server | latin1_swedish_ci |
+----------------------+-------------------+

也是 latin1, 但对 latin1_swedish_ci 不是很理解,查看文档后得知,是瑞典的不区分大小写的编码, 因此估计是这个校对集的缘故,将校对集转换成 latin1_bin 解决问题:

alter table xxx convert (latin1_swedish_ci,latin1_bin)

最好的解决方法是创建数据库时指定编码:

create database dbtest DEFAULT CHARACTER SET latin1 COLLATE latin1_bin;

或创建表的时候指定:

create table tbtest(name varchar(40) primary key, val varchar(1000)) ENGINE = InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_bin; 

责任编辑:liqwei
打印本页】【关闭本页】【返回列表
·上一篇:使用Mysql搭建简单的可持续的Cache系统
·下一篇:Linux下Mysql 数据库性能调优
 文章评分
  • current rating
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
 相关文章
·[MySQL]加速 MySQL 导入导出的方法 (2010-09-24)
·[MySQL]MySQL BLOB字段类型 (2010-09-24)
·[MySQL]mysql sort 性能优化 (2010-09-04)
·[MySQL]Linux下Mysql 数据库性能调优 (2010-09-04)
·[MySQL]使用Mysql搭建简单的可持续的Cache系统 (2010-09-02)
 相关评论
 站点最新文章 更多>> 
·[经典影音]弱点
·[经典影音]萨利机长
·[经典影音]天空之眼
·[管理知识]康奈尔笔记法,提高100%学习效率
·[管理知识]刘强东:我管75000人靠这4张表格
·[管理知识]跟壳牌学HSE管理
·[运营策划]编辑工作内容整理
·[至理名言]奋斗与决定
·[瀚海拾遗]盲人打灯笼之各家论道
·[搞笑段子]中国男足
 站点浏览最多 更多>> 
·[协议规范]http断点续传原理:http头 Range、…
·[JS/CSS/HTML]HTML 空格的表示符号 nbsp / en…
·[NoSQL]Mongo数据库简介
·[协议规范]什么是SPF记录?如何设置、检测SP…
·[协议规范]图解 HTTPS 通信过程
·[PHP]精选国外免费PHP空间推荐
·[程序综合]常用IP地址查询接口
·[程序综合]什么是 DNS Prefetch ?
·[程序综合]获取客户端IP地址的三个HTTP请求…
·[Linux]/usr 目录的由来