sql 写入时默认 utf8_Pandas写入mysql报错:(pymysql.err.InternalError) (1366:

e969971910ba16c5fa28198858b99cf8.png

今天从pandas写入数据到mysql,报InternalError: (pymysql.err.InternalError) (1366, "Incorrect string value:……百度了一下原因,整理一下解决方法。

1.首先排除普通字符编码问题

input_engine = create_engine('mysql+pymysql://root:872612@localhost:3306/dysonbuzz_data',encoding='utf8')

将encoding重新设置之后,依旧报错。无效。

2.关于utf8bm4字符集

随着智能手机的普及,我们开始经常使用表情符号☺、��更好的帮助我们进行交流。但是mysql的utf8编码只支持3字节的数据,而移动端的表情数据是4个字节的字符,于是mysql不能识别4个字节的utf8编码的字符,抛出了异常。我们应该将对应的数据类型改为utf8mb4同时连接类型也要改成utf8mb4_general_ci。

utf8mb4的最低mysql版本支持版本为5.5.3+,若不是,请升级到较新版本。

查看mysql版本:命令窗口登陆mysql时就可以看到。

fd2f2c5cd3c377e2f8ca6d4757e64a59.png

3.更改已经建好的数据库和数据表类型

在命令窗口直接输入如下内容

更改数据库编码:

ALTER DATABASE DATABASE_NAME CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

更改表编码:

ALTER TABLE TABLE_NAME CONVERT TO CHARACTER SET utf8mb4 COLLATEutf8mb4_general_ci; 

如有必要,还可以更改列的编码。

这样运行问题就解决了。

4.一劳永逸的办法

上述方法每次重启mysql服务,这些设置就恢复成默认的设置latin1。截图如下:

59a951029097739b183159ee6796da21.png
(我的设置已更改,所以这张图是我下载的网图)

直接修改mysql的配置文件,更改默认设置,则一劳永逸。mysql配置文件ios系统的文件名为my.cnf,windows系统为my.ini ,实在找不到就在磁盘里搜索这个文件。但是免安装版的my.ini在哪?免安装mysql的目录下只有一个my-default.ini,这时先把它拷贝一份,并重命名为my.ini,这样该目录下就有了my.ini和my-default.ini两个ini文件,此时打开my.ini开始修改。

2b07fedabcaca5378a979614739c7580.png

将配置文件更改如下:

773d14bf9d6561971726a02dea2c8b28.png
[client] 
default-character-set = utf8mb4 
[mysql] 
default-character-set = utf8mb4 
[mysqld] 
character-set-client-handshake = FALSE 
character-set-server = utf8mb4 
collation-server = utf8mb4_unicode_ci 
init_connect='SET NAMES utf8mb4'
SHOW VARIABLES WHERE Variable_name LIKE 'character_set_%' OR Variable_name LIKE 'collation%';

更改好了查看一下:

b6315df9bf07c846861ff2de34a04090.png
SHOW VARIABLES WHERE Variable_name LIKE 'character_set_%' OR Variable_name LIKE 'collation%';

collation_connection 、collation_database 、collation_server是什么没关系。但必须保证character_set_client(客户端来源数据使用的字符集)、character_set_connection(连接层字符集)、character_set_database(当前选中数据库的默认字符集)、character_set_results(查询结果字符集)、character_set_server(默认的内部操作字符集)这几个变量必须是utf8mb4。

这样就更改好啦。有些小伙伴直接看了一劳永逸的办法,按照图文配置好,但是发现还是报错!!!不要忘记【3.更改已经建好的数据库和数据表类型】!!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值