对PyQt5中的MySQL表执行QSqlQuery时出现问题

2024-04-29 10:31:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我想我在使用PyQt5时遇到了一个棘手的问题。我想在MySQL数据库上运行一个查询。我的查询字符串包含国际字符,如“ąśćźż”。在

我使用的是Python3.6.1、MySQL5.7.18和{}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())

输出: Incorrect string value: '\xB9\x9C\xE6\x9F\xBF\xEA...' for column 'id' at row 1 QMYSQL: Unable to execute query INSERT INTO table1 (id) VALUES ('ąśćźżęłó1');

表的Create语句:

^{pr2}$

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

当我使用PyQt5以外的包连接到数据库-PyMySQL时,我没有遇到这个问题。在PyMySQL中,我将与charset = "utf8mb4"作为连接字符串的一部分建立连接。我现在不知道如何用QSqlDatabase来重新爱上它。在

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


Tags: 字符串id数据库dbquerypyqt5insertvalues
2条回答

十六进制看起来似乎是cp1250-编码的。找出字节的来源,也许是终端,也许是html表单,也许是python。这是我的notes on Python;可能第一行就是问题所在。也许另一个建议就是这个问题。在

对于utf8mb4(或utf8),ąśćźżęłó1应该是十六进制C485 C59B C487 C5BA C5BC C499 C582 C3B3 31
对于cp1250,我希望使用hexB9 9C E6 9F BF EA B3 F3 31。在

在sqlserver上,您需要在unicode字符串前面加一个U:

会是同样的问题吗?在

query.exec_("INSERT INTO table1 (id) VALUES (N'ąśćźżęłó1');")

(编辑2017-05-02:我搞错了,N是要放的前缀)

相关问题 更多 >