背景:pandas 利用sqlalchemy 存入数据到mysql
数据,有中文字符;
//针对linux
第一:错误码
(pymysql.err.InternalError) (1366, "Incorrect string value: '\\xE6\\xB8\\xB8\\xE6\\x88\\x8F
第二:错误原因
字符编码不同造成,写入的是utf8mb4;mysql的字符编码是utf8
第三:如何解决?
engine=sqlalchemy.create_engine('mysql+mysqlconnector://{name}:{password}@{host}:3306/{databasse}?charset=utf8mb4'.format
(name=mysql_name,password=mysql_password,host=mysql_host,databasse=mysql_database))
创建engine,追加,设置?charset=utf8mb4,然并卵。
第四:最终解决
1、mysql中,设置对应的数据框的字符串格式
alter database python_yuny character set utf8mb4;
2、重启mysql服务【退出myql后执行的命令】
systemctl restart mysqld
/针对windows/
第一:engine的语句不添加?charset=utf8mb4
engine=sqlalchemy.create_engine('mysql+mysqlconnector://{name}:{password}@{host}:3306/{databasse}'.format
(name=mysql_name,password=mysql_password,host=mysql_host,databasse=mysql_database))
出现的错误:sqlalchemy.exc.OperationalError: (mysql.connector.errors.OperationalError) 2055: Lost connection to MySQL server at '127.0.0.1:3306', system error: 10054 远程主机强迫关闭了一个现有的连接。
第二:engine的语句添加?charset=utf8mb4
出现的错误:LookupError: unknown encoding: utf8mb4
什么意思:意思windows下,mysqlconnector驱动,不支持utf8mb4【linux下则支持】
第三:怎么解决?更换驱动pymysql
engine=sqlalchemy.create_engine('mysql+pymysql://{name}:{password}@{host}:3306/{databasse}?charset=utf8mb4'.format
(name=mysql_name,password=mysql_password,host=mysql_host,databasse=mysql_database))
这个,又回到前面一篇博客的错误代码
Warning: (1366, "Incorrect string value: '\\xD6\\xD0\\xB9\\xFA\\xB1\\xEA...' for column 'VARIABLE_VALUE' at row 484")
result = self._query(query)
最后总结:字符串问题,如果mysql部署在Linux下,则可以解决;如果mysql部署在windows下,则依然会报错,只不过没啥影响,原因在pymysql的驱动存在问题。