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);
浙公网安备 33010602011771号