Несоответствие кодировок при использовании MySQL Connector
При попытке отправить SQL-запрос на добавление данных в таблицу, execute()
бросает исключение, что не может затолкать в таблицу кириллицу:
sql::Statement* stmt = nullptr;
sql::PreparedStatement* pstmt = nullptr;
sql::ResultSet* res = nullptr;
try {
driver = get_driver_instance();
conn = driver->connect(server, username, password);
conn->setSchema("work");
stmt = conn->createStatement();
stmt->execute("INSERT INTO work.employer (surname, first_name, birth_date) VALUES ('Сидоров', 'Алексей', '12.12.12')");
label_connection->Text = "Connected to " + textBoxServer->Text;
btnJournal->Visible = true;
}
catch (sql::SQLException& eSQL) {
label_connection->Text = gcnew String(eSQL.what());
}
Пробовал добавить информацию о кодировке следующим образом:
stmt->execute("SET NAMES utf8mb4");
stmt->execute("SET CHARACTER SET utf8mb4");
stmt->execute("SET character_set_connection=utf8mb4");
Но проблему это не решает. В MySQL Workbench точно такой же SQL-запрос с кириллицей отлично работает и добавляет запись в базу.
Аналогично и при запросе на вывод информации я получаю кракозябры вместо кириллицы:
sql::Statement* stmt = nullptr;
sql::PreparedStatement* pstmt = nullptr;
sql::ResultSet* res = nullptr;
try {
conn->setSchema("mfua");
stmt = conn->createStatement();
res = stmt->executeQuery("SELECT discipline_name FROM mfua.disciplines");
while (res->next()) {
System::String^ item = gcnew System::String(res->getString("discipline_name").c_str());
journal->cmbBoxGroup->Items->Add(item);
}
}
catch (sql::SQLException& eSQL) {}
Подскажите, как подружить MySQL Connector с кириллицей, пожалуйста.
UPD. Исключение бросает следующего содержания: "Incorrect string value: '\xD1\xE8\xE4\xEx\F0\xEE...' for column 'surname' at row 1"
А запрос SELECT возвращает вот такого рода содержимое: "Математика"
В настройках таблиц charset установлен "utf8mb4", collation - "utf8mb4_0900_ai_ci"