1.首先我们应该知道,windows下 的默认的编码是gbk(包含gb2312),那么sqlserver也是默认的gbk编码的,但是python语言的默认的编码是utf8,那么这个时候,如果我们就直接将sqlserver中的数据直接通过socket传送到linux端的时候就会出现中文乱码,那么解决这个问题的方法就是,在linux接受端的socket中利用:data.decode('GB2312')进行解码的工作。

2.在linux接受到数据之后,还要插入到mysql数据库当中,如果这个时候插入mysql数据库出现中文乱码的时候,我们就采取以下的方法,统一数据库的编码工作:(根据自己的数据库名、表名、字段名进行修改)

这个是设置成gbk的编码:

ALTER DATABASE `eissy` DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci

ALTER TABLE `xiaoshou` DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci

ALTER TABLE xiaoshou MODIFY COLUMN com_nm VARCHAR(25) CHARACTER SET gbk COLLATE gbk_chinese_ci NOT NULL;

设置成utf8的编码:

ALTER DATABASE `eissy` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci

ALTER TABLE `xiaoshou` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci

ALTER TABLE xiaoshou MODIFY COLUMN com_nm VARCHAR(25) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL;

由于数据的来源是sqlserver当中,编码是gbk,那么我们就将mysql的编码统一弄成gbk,然后运行程序,结果还是发现有乱码:好,这个时候在mysql 控制台输入: show variables like 'char%'

发现:character_set_connection | utf8 有这么一行,那么我就理解为,在与数据库连接的过程中采用了utf8编码,那我统一采用gbk,于是我就:conn=MySQLdb.connect(host='localhost',user='root',passwd='',db='eissy',charset='GBK') 这样书写连接字符串,设置charset='GBK',最后终于把问题解决,为此把该体验与大家一起分享一下,希望能够帮到遇到类似问题的朋友

 

 1.查看数据库支持的所有字符集 
        show character set;或show char set;  

  2.查看当前状态 里面包括当然的字符集设置 
        status或者\s 

  3.查看系统字符集设置,包括所有的字符集设置 
        show variables like 'char%'; 

  4.查看数据表中字符集设置 
        show full columns from tablename; 或者 show create table tablename\G; 

  5.查看数据库编码 
        show create database dnname;  



修改字符集命令 
级别 命令 时效 备注 
服务器 SET GLOBAL character_set_server=utf8;  临时   
服务器 修改配置文件:  [mysqld] default-character-set=utf8  永久   
数据库 SET GLOBAL character_set_database=utf8; 临时   
数据库 同修改服务器 临时   
表 ALTER TABLE table_name DEFAULT CHARSET utf8; 永久   
列 alter table `t_test` change `name` `name` varchar (255)  character set  utf8 collate utf8_general_ci null default null; 永久   
连接 show variables like 'char%'; 临时   
连接 修改配置文件:  [client] default-character-set=utf8  永久   



创建时指定字符集 
级别 命令 
服务器级 在安装MySQL时可以设置服务器的默认编码格式 
数据库级 CREATE DATABASE db_name DEFAULT CHARACTER SET utf8; 
表级 CREATE TABLE  `db_name`.`tb_name` (       id VARCHAR(20) NOT NULL,      name VARCHAR(20) ) ENGINE=InnoDB  DEFAULT CHARSET=utf8; 
列级 CREATE TABLE  `db_name`.`tb_name` (   id varchar(20) NOT NULL,   name varchar(20) CHARACTER SET utf8 );

 

 

 

posted on 2014-03-24 11:52  andylau168  阅读(349)  评论(0)    收藏  举报