我想我在使用PyQt5时遇到了一个棘手的问题。我想在MySQL数据库上运行一个查询。我的查询字符串包含国际字符,如“ąśćźż”。在
我使用的是Python
3.6.1、MySQL
5.7.18和{
我的部分代码:
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
来重新爱上它。在
你能帮我解决这个问题吗?在
十六进制看起来似乎是
cp1250
-编码的。找出字节的来源,也许是终端,也许是html表单,也许是python。这是我的notes on Python;可能第一行就是问题所在。也许另一个建议就是这个问题。在对于utf8mb4(或utf8),
ąśćźżęłó1
应该是十六进制C485 C59B C487 C5BA C5BC C499 C582 C3B3 31
对于cp1250,我希望使用hex
B9 9C E6 9F BF EA B3 F3 31
。在在sqlserver上,您需要在unicode字符串前面加一个U:
会是同样的问题吗?在
(编辑2017-05-02:我搞错了,N是要放的前缀)
相关问题 更多 >
编程相关推荐