gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 19:03:08 25 4
gpt4 key购买 nike

我认为使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com