python - 在 PyQt5 中的 MySQL 表上执行 QSqlQuery 时出现问题

标签 python mysql utf-8 pyqt5

我认为使用 PyQt5 时遇到了初学者问题。我想在 MySQL 数据库上运行查询。我的查询字符串包含国际字符,例如“ąśćźż”。

我正在使用 Python 3.6.1、MySQL 5.7.18 和 PyQt 5.8.2。

我的部分代码:

db = QSqlDatabase.addDatabase("QMYSQL")
db.setHostName("127.0.0.1")
db.setUserName("root")
db.setPassword("xxxxxx")
db.setDatabaseName("test")
db.setPort(3306)
if db.isOpen() != True:
    db.open()

query = QSqlQuery()
query.exec_("INSERT INTO table1 (id) VALUES ('ąśćźżęłó1');")
db.close()
print(query.lastError().text())
print(query.lastQuery())

输出: 第 1 行的“id”列的字符串值不正确:“\xB9\x9C\xE6\x9F\xBF\xEA...” QMYSQL:无法执行查询 INSERT INTO table1 (id) VALUES ('ąśćźżęłó1');

创建表的语句:

CREATE TABLE `table1` (
  `id` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

mysql 中的所有字符集和排序规则变量均设置为 utf8mb4。

当我使用 PyQt5 以外的其他包连接到数据库 - PyMySQL 时,我没有遇到该问题。在 PyMySQL 中,我使用 charset = "utf8mb4" 设置连接作为连接字符串的一部分。我现在不知道如何使用 QSqlDatabase 解决这个问题。

你能帮我解决这个问题吗?

最佳答案

十六进制看起来可能是cp1250编码的。弄清楚字节从哪里来,也许是终端,也许是 html 表单,也许是你的 python。这是我的notes on Python ;可能第一行就是问题所在。也许其他提示之一就是问题所在。

对于 utf8mb4(或 utf8),ąśćźżęłó1 应为十六进制 C485 C59B C487 C5BA C5BC C499 C582 C3B3 31
对于 cp1250,我期望十六进制 B9 9C E6 9F BF EA B3 F3 31

关于python - 在 PyQt5 中的 MySQL 表上执行 QSqlQuery 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43706022/

相关文章:

python - 拆分后与 Python 的缩进不一致

c# - UTF8/UTF16和Base64在编码方面有什么区别

apache - 更改Apache索引的字符集响应 header

python - BeautifulSoup - 无法访问网页

MySQL ORDER BY 十进制值不起作用

python - 使用 django-jsonschema-form 或 django-schemulator 将 jsonschema 呈现为一种形式

php - 当用户登录网站时——我应该选择用户名和密码,还是只选择用户名?

php - 从 Android 应用程序到 mysql 数据库的阿拉伯文本

python - 为什么 getter/setter 方法必须与原始属性的名称相同?

python - Pandas dataframe to_datetime() 转换日期不正确