环境:
MySQL-python-1.2.3.win-amd64-py2.7
python-2.7.amd64
mysql-installer-community-5.6.12.2
Windows Server 2008 R2 数据中心
使用 python 脚本插入数据时出现操作错误 1366。我需要运行2010 年的EPFImporter
我认为问题在于 MySQLdb 只能处理uft8
而不能utf8mb4_unicode_ci
。我需要导入的数据包含 utf8mb4 字符,我可能不会删除它们。
在成功插入 ~70.000 行后,从 CMD 命令行运行脚本会给我以下错误消息:
2013-07-31 15:14:53,460 [ERROR]: Fatal error encountered while ingesting 'C:\webserver\www\site1\assets\scripts
Traceback (most recent call last):
File "C:\webserver\www\site1\assets\scripts\EPFImporter\EPFIngester.py", line 129, in ingestFull
self._populateTable(self.tmpTableName, skipKeyViolators=skipKeyViolators)
File "C:\webserver\www\site1\assets\scripts\EPFImporter\EPFIngester.py", line 379, in _populateTable
cur.execute(exStr)
File "C:\Windows\python\lib\site-packages\MySQLdb\cursors.py", line 174, in execute
self.errorhandler(self, exc, value)
File "C:\Windows\python\lib\site-packages\MySQLdb\connections.py", line 36, in defaulterrorhandler
raise errorclass, errorvalue
OperationalError: (1366, "Incorrect string value: '\\xF0\\x9F\\x98\\x8A A...' for column 'description' at row 1")
我已经做了:
ALTER DATABASE databaseXYZ CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci
我将以下内容从 INNODB 更改为:
default storage engine MyISAM Documentation
default tmp storage engine MyISAM
在此更改之前,它根本没有导入任何行。
我还可以做些什么?通常它应该可以工作,因为我在共享主机上运行它 MySQL Server Version: 5.5.28 并且工作正常
EDIT1:为了测试,我安装了最新的 XAMPP 版本,在 XAMPP 下脚本运行良好,只有 XAMPP-MySQL 服务器运行而不是 Apache。Python 和 MySQLdb 版本与以前保持一致,未受影响。所以我现在很确定我在 MySQL-Server 的配置中做错了什么。在 XAMPP 中,数据库使用 InnoDB 引擎运行。
以下是 XAMPP MYSQL Server 的规格:
Server: 127.0.0.1 via TCP/IP
Server type: MySQL
Server version: 5.6.11 - MySQL Community Server (GPL)
Protocol version: 10
User: root@localhost
Server charset: UTF-8 Unicode (utf8)
有谁知道我可以做些什么来追踪我原来的 MySQL 设置中的问题?可能是变量设置、MYSQL 错误处理或 Python 连接器中的某些东西?