当前位置: 首页 > 图文教程 > 数据库 > MYSQL > mysql5中遭遇的字符集问题及其解决方案

MYSQL
MySql:存储程序、函数、触发程序及复制:常见问题
MySQL:数据库系统体系结构之概念模式
MySQL:最小函数依赖集知多少
MySQL:小编浅谈关系代数中的语义
如何运用SQL Server 2005中的模板参数
实例:NStarfaiNet的SQL XML文件示范
SQL Server 2000桌面引擎默认配置空口令漏洞
MySQL 5.0.16 乱码问题处理办法
索引对查询条件顺序的影响
从SQL备份文件中导入现存数据库
利用C#实现分布式数据库查询
用ORACLE8i修复数据库坏块的三种方法
Sql Server2000+Sql Server Mobile Edition配置合并复制
MySQL与ASP.NET配合更强大
防范SQL注入攻击的新办法
如何修改遗失的MySQL的ROOT用户密码
在win2003下MySQL数据库每天自动备份
如何提高MySQL性能
实例讲解MySQL数据库的查询优化技术
了解MYSQL数据库调度与锁定的问题

MYSQL 中的 mysql5中遭遇的字符集问题及其解决方案


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-17   浏览: 98 ::
收藏到网摘: n/a

今天打开slave日志发现一堆错误全部是这种:

[ERROR] Slave: Error 'Character set '#28' is not a compiled character set and is not specified in the '/usr/local/mysql/share/mysql/charsets/Index.xml' file' on query.

我在master(linux)机上写insert语句,发现同步是没问题的,后来我在window上用一个mysql客户端插入数据,上面的问题就开始出现了。通过mysqlbinlog查看slave日志发现

如果使用gbk编码的客户端插入数据就会有下面的日志:

SET @@session.character_set_client=28,@@session.collation_connection=33,@@session.collation_server=8/*!*/;

如果是直接在linux写insert,那么上面的28(gbk) 就变成8(latin-swde)

原因应该是mysql客户端使用了gbk编码,而服务器无法识别。虽然你可以在'/usr/local/mysql/share/mysql/charsets/Index.xml' 找到gbk,但通过 SHOW CHARACTER SET;确实可以看出数据库没有列出gbk。

我又比较了一下别的机器上的mysql版本,发现那些机器上的mysql都是用的发布版本,而这台slave机使用源代码安装的,于是我下了个mysql-5.0.37-linux-i686-glibc23.tar.gz

然后

cd /usr/local

mv mysql mysql-old

tar xzvf mysql-5.0.37-linux-i686-glibc23.tar.gz

mv mysql-5.0.37-linux-i686-glibc23 mysql

启动mysql,一切就ok了