mysql客户端报错1366_Pandas写入mysql报错:(pymysql.err.InternalError) (1366:

今天从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字符集

随着智能手机的普及,我们开始经常使用表情符号☺、��更好的帮助我们进行交流。但是

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

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

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。截图如下:(我的设置已更改,所以这张图是我下载的网图)

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

将配置文件更改如下:

[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%';

更改好了查看一下:

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.更改已经建好的数据库和数据表类型】!!!

你可能感兴趣的