python - 从 python 脚本获取 "OperationalError: 1366"- MySQL 5.6。 MySQLdb 1.2.3

标签 python mysql utf-8 utf8mb4

环境:

  • 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。我需要运行 EPFImporter这是从 2010 年开始的

我认为问题在于 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 服务器版本上运行它:5.5.28 并且工作正常

EDIT1:为了进行测试,我安装了最新的 XAMPP 版本,并且在 XAMPP 下,脚本运行良好,只有 XAMPP-MySQL 服务器运行而不是 Apache。 Python 和 MySQLdb 版本与以前保持一致,没有受到影响。所以我现在很确定我在 MySQL 服务器的配置中做错了什么。在 XAMPP 中,数据库与 InnoDB 引擎一起运行。

以下是 XAMPP MYSQL 服务器的规范:

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 连接器中的某些东西?

最佳答案

我通过比较 XAMPP-MySQL 和常规 MySQL 的值解决了这个问题 phpmyadmin > localhost > 变量

我更改了常规 MySQL 变量中的一些值,所以我不能 100% 确定哪个更改最终解决了问题,但我猜它正在更改为:

sql mode    NO_ENGINE_SUBSTITUTION

我还有一些其他的值,比如 strict_mode ,之前我删除了。

关于python - 从 python 脚本获取 "OperationalError: 1366"- MySQL 5.6。 MySQLdb 1.2.3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17972185/

相关文章:

Python 响应解码

python - 从文件导入特定类而不是完整文件重要吗?

python - 使用 scikit-model 训练 Logistic 回归中的 N 维数据集

python - Python 3 中带选项的 Curl 命令

mysql - 2天前mysql查询还好,今天 super 慢

python - Scrapy xpath utf-8 文字

python - 为什么这个简单的 Tkinter 代码会创建两个顶级窗口?

php - 由于链接资源无效,MySQL 连接失败

MySQL查询以查找设备最后一个条目的位置

c++ - 无法在 Qt 中读取 utf-8 文件