pythondataframeto_sqlutf8写⼊mysql数据库跳错incorrec。。。
前⾔
mysql的utf8简直是⼤坑中的⼤坑,按照⽹上教程⼀顿设置,步步跟随指导,⼀到pandas把dataframe写⼊到mysql就妥妥跳incorrect string value的错误。反复查询⽆数中⽂外⽹资料后总算到解决⽅案。
前期准备⼯作
mysql设置
新版的mysql设置⽂件为根⽬录下my.ini,在mysql中,utf8使⽤的解决⽅案是使⽤utf8mb4编码,如果my.ini⽂件中没有进⾏合理设置,那需要将database、table还有column从头到尾全部改成utf8mb4编码,这⼀步⽹上攻略⼀⼤堆,⼤家⾃⾏搜索变更即可。这⾥只贴出my.ini的设置。三个部分分别加⼊my.ini后重启mysql服务即可,此后新建的数据库⽂件或者table都是默认的utf8mb4格式。
[mysqld]
#服务端使⽤的字符集默认为UTF8
character-set-client-handshake=FALSE
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
init_connect=‘SET NAMES utf8mb4’
[mysql]
#设置mysql客户端默认字符集
default-character-set=utf8mb4
[client]
default-character-set=utf8mb4
python准备⼯作
sqlalchemy升级⾄最新版,我之前⽤的⽼版容易跳各种奇怪的错误。升级后就剩下incorrect string value问题了
python及pandas写⼊操作
我之前的调⽤代码是:
ate_engine('mysql+pymysql://⽤户名:密码@localhost:3306/test')
<_sql('test1',engine,index=False)
即使将MySQL数据库从头到尾全部默认改成utf8mb4格式,使⽤pandas to_sql依然会出现incorrect string value的错误。查阅诸多资料后(⾎泪史不提了),发现核⼼问题竟然出sqlalchemy官⽅⽂档最为推荐使⽤的pymysql上⾯。使⽤mysql官⽅的tor后报错就消失了并且⼀切使⽤正常。推测是to_sql在调⽤pymysql时的问题官⽅⼀直没有注意到。
⽐较蛋疼的是在sqlalchemy官⽅⽂档⾥并不推荐使⽤tor,貌似没有⼀直更新⽀持啥的,不过对于我来说⽬前使⽤⼀切正常,没有遇到其它问题,问题⾄此彻底解决。
tor
ate_engine('mysql+mysqlconnector://⽤户名:密码@localhost:3306/test')
<_sql('test1',engine,index=False)
当然,如果强⾏要使⽤pymysql,依然有解决⽅案,可以将pandas的dataframe逐⾏提取出来再逐⾏插⼊mysql数据库中,这种⽅式并不会报错,我不是程序员出⽣,贪图省事喜欢to_sql的简单粗暴,发现可以解决这个报错bug后,之前⽤的逐⾏写⼊的代码⼿滑删了,⼤家如果要使⽤pymysql可以⾃⾏写代码尝试。mysql操作官方文档

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。