Problem z zapisem polskich znaków do tabeli MySQL za pomocą PyQt5

0

Witam,

Jestem początkujący i próbuję napisać aplikację za pomocą PyQt5. Mam problem z uruchomieniem zapytania na bazie MySQL - zapytanie nie przyjmuje polskich znaków.
UżywamPython 3.6.1, MySQL 5.7.18 i PyQt 5.8.2.
Fragment mojego kodu:

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())

na wyjściu otrzymuję:
"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')"

Kodowanie MySQL jest poustawiane na utf8mb4. Kiedy używam PyMySQL a nie QSqlDatabase nie mam problemów, wszystko się zapisuje w tabeli.

Jesteście w stanie mi w tym pomóc? Z góry dzięki.

0

Miałem to już ustawione w MySQL. Teraz sprawdziłem dwa razy i jest jak w załączniku... chyba że chodzi o coś innego.

0

a przypadkiem pole id nie jest liczbą?

0

Nie, nie - normalnie varchar. Specjalnie zrobiłem zupełnie testową tabelę z jednym polem tekstowym.

Zauważyłem jedną rzecz. W komunikacie o błędzie, który program wypluwa jest napisane, że nieprawidłowy ciąg znaków zaczyna się od"'\xB9\x9C\xE6\x9F\xBF\xEA...". , natomiast jak wywołuję
'ąśćźżęłó1'.encode("utf-8") to dostaję na wyjściu jest b'\xc4\x85\xc5\x9b\xc4\x87\xc5\xba\xc5\xbc\xc4\x99\xc5\x82\xc3\xb31'. Kiepsko znam się na kodowaniu znaków, ale ten ciąg, który program próbuje wstawić do bazy, to nie jest utf8.

Ogólnie obejście sprawy jest dość proste - próbuję wykorzystać inny pakiet niż PyQt do połączenia z bazą danych i wtedy bangla - QSqlDatabase nie ma, (ja przynajmniej nie znalazłem) typowego connection string, ani jakiejś metody setCharacterSet() a w takim na przykład PyMySql mogę w connection string wstawić "charset='utf8mb4'" i wtedy bangla.

Jednak chciałbym rozwiązać, a nie tylko obejść sprawę...

1 użytkowników online, w tym zalogowanych: 0, gości: 1