Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在PyQt5中的MySQL表上执行QSqlQuery时出现问题_Python_Mysql_Utf 8_Pyqt5 - Fatal编程技术网

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

Python 在PyQt5中的MySQL表上执行QSqlQuery时出现问题,python,mysql,utf-8,pyqt5,Python,Mysql,Utf 8,Pyqt5,我想我在使用PyQt5时有一个内在的问题。我想在MySQL数据库上运行一个查询。我的查询字符串包含国际字符,如“ąśćźż” 我使用的是Python3.6.1、MySQL5.7.18和PyQt5.8.2 我的部分代码: db = QSqlDatabase.addDatabase("QMYSQL") db.setHostName("127.0.0.1") db.setUserName("root") db.setPassword("xxxxxx") db.setDatabaseName("test

我想我在使用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:无法执行查询
在表1(id)中插入值(“1”)

表的Create语句:

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。这是我的;第一行可能就是问题所在。也许还有一个提示就是这个问题

对于utf8mb4(或utf8),
应为十六进制
C485 C59B C487 C5BA C5BC C499 C582 C3B331

对于cp1250,我希望在sqlserver上使用十六进制
B9 9C E6 9F BF EA B3 F3 31

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

可能是同样的问题吗

query.exec(“在表1(id)中插入值(N'ąśćźżęłó1'))


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

这不起作用。通常我不需要把任何东西作为前缀来插入unicode字符串。尝试放置“N”前缀后,我收到语法错误通知。您的提示之一是“使用MySQL连接器/Python而不是pyodbc和MySQL连接器/ODBC”。当我使用QSqlDatabase时,我看不到在连接中设置“charset”的选项。当我使用pymysql等其他库时,我可以设置“charset”“对于连接,我可以成功地使用数据库。因此,我没有得到解决方案,但目前有一个解决方案。请提供解决方案代码,以便我可以更新我的提示。