Python解决mysql的1366问题

出现1366问题主要可能是MySQL的用的编码方式不对,使中文无法正确导入。

这是因为我们存放的中文,而我们的表并不支持中文字符集,使用 show variables like 'character%'; 查看mysql当前编码:

可以看出database和server的字符集使用的是latin1,latin1是不支持中文的,导致存放中文错误。

我尝试了两种方法来避免中文存放错误问题:

1:设置server和database为utf8类型

使用以下命令来设置在命令行输入:

    show variables like '%char%';
    set character_set_server=utf8;
    set character_set_database=utf8;

一般使用上面的命令就可以了,如果还不行,show create table 表名;,看看具体的column是不是字符集不对。

 

但是,我想很郑重的告诉你,你以为这样就真的万事大吉了,你以为这样再出现问题就不是mysql的问题了。

你会想,我都设置成了 utf-8 还会出现什么问题呢?

接下来我们看看,设置完上面之后我的数据库中的的一个表

看到么?里面的表的编码还是latin1。

于是,我们得出结论是,如果你在建立表之后才修改myslq 的编码,那么原来建的边的编码不会发生变化。要让其变化必须进行更加确切的编码指定,例如用下面的语句

1

mysql代码:

1

alter table BETWEENNESS  character set utf8;·  

这个时候你可能会认为这样就完成了,but,python的运行下,错误仍然会继续报错。

我们这个时候再看看数据库表的编码类型:

恶心不恶心,你把表的编码都改好了,却发现字段的编码还是默认的Latin1。亲爱的latin1你是有多么的爱我,舍不得我。

从上面的报错,我们能看到,主要原因是我的 ‘semantic’字段报的错。

于是下面这个代码解决了问题:

1

2

3

mysql代码:<br>alter database matrix character set utf8;

alter table BETWEENNESS change semantic semantic varchar(32)  character set utf8 not null;

alter table BETWEENNESS  character set utf8;

  

 

直到这个时候,问题彻底解决了。latin1终于不见了。

 

总结: 在你需要的数据库建立之前就将所有的编码都设置mysql 代码

1

2

3

4

<em id="__mceDel">set character_set_client=utf8;

set character_set_results=utf8;

set character_set_connection=utf8;

set character_set_database=utf8;<br>  </em>

 一旦你已经在为做任何编码改动的时候把表和数据库已经建立好的话,那么执行上面的代码后,前面建立的表的各种编码似乎改变好像要看运气,哈哈。严格的说不是运气,我对数据库不是很熟悉,所以不知道具体原因。

但是一旦你发生了上面的问题。就是先建立了数据库和表,需要更改编码的时候。请将以前建立的数据库和表,通过确切的具体的方式把他们的编码修改过来。

例如:

1

2

3

alter table <表名> character set utf8;

alter table <表名> change <字段名> <字段名> <类型> character set utf8;

alter table user change username username varchar(20) character set utf8 not null;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值