Кодировки при работе с MySQL |
Здравствуйте, гость ( Вход | Регистрация )
Кодировки при работе с MySQL |
zerling |
13.2.2009, 12:05
Сообщение
#1
|
Студент Группа: Участник Сообщений: 19 Регистрация: 31.10.2008 Из: г.Мытищи Московской обл. Пользователь №: 406 Спасибо сказали: 0 раз(а) Репутация: 0 |
База MySQL 4.1, QT 4.3.4 (под windows)
Нужно читать и записывать в БД русские буквы. Таблицы в базе лежат в кодировке UTF8 (даже специально файлы таблиц посмотрел) На форме таблица заполняется таким образом: (взял из примера в асистенте)
После соединения с БД делаю запрос QSqlQuery(QString("set character set КОДИРОВКА;"),db); для того, чтоб из БД читало в заданной кодировке.. пробовал запрос не делать.. Пробовал задавать для кодеков и для БД кодировки UTF8, cp1251 и даже cp866 :-) Ничего не помогает отобразить в таблице русские буквы.. Какие кодеки надо поставить в setCodecForCStrings(), setCodecForTr(), setCodecForLocale() чтоб русские буквы отображались нормально в таблице? |
|
|
Litkevich Yuriy |
13.2.2009, 13:17
Сообщение
#2
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
я предлагаю делать так (setCodecForCStrings). Почему? не знаю, но для случая с FireBird это позволяет нормально работать.
П.С. в настройках соединения я не указываю кодировку, т.к. не помогает. |
|
|
Константин |
13.2.2009, 13:22
Сообщение
#3
|
Студент Группа: Участник Сообщений: 69 Регистрация: 9.2.2009 Пользователь №: 539 Спасибо сказали: 15 раз(а) Репутация: 1 |
zerling, а в папке с базой (непосредственно в папке схемы) имеется файлик db.opt? и, если имеется, что в нём написано?
|
|
|
zerling |
13.2.2009, 13:52
Сообщение
#4
|
Студент Группа: Участник Сообщений: 19 Регистрация: 31.10.2008 Из: г.Мытищи Московской обл. Пользователь №: 406 Спасибо сказали: 0 раз(а) Репутация: 0 |
zerling, а в папке с базой (непосредственно в папке схемы) имеется файлик db.opt? и, если имеется, что в нём написано? В файлике вот это: default-character-set=utf8 default-collation=utf8_general_ci Попробовал так QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale()); // Для внутренних преобразований Qt QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8")); // Для функций перевода tr() Результат: Знаки вопроса вместо символов если БД отдаёт в UTF8 Крокозяблы если в cp1251 |
|
|
Константин |
13.2.2009, 14:25
Сообщение
#5
|
Студент Группа: Участник Сообщений: 69 Регистрация: 9.2.2009 Пользователь №: 539 Спасибо сказали: 15 раз(а) Репутация: 1 |
а если через гуй? например, mysql-gui-tools.
и обязательно попробуй через sqlbrowser из стандартных примеров Сообщение отредактировал Константин - 18.2.2009, 16:50 |
|
|
zerling |
18.2.2009, 16:49
Сообщение
#6
|
Студент Группа: Участник Сообщений: 19 Регистрация: 31.10.2008 Из: г.Мытищи Московской обл. Пользователь №: 406 Спасибо сказали: 0 раз(а) Репутация: 0 |
В общем прикол с кодировками так и не решился.
из командной строки запускаю mysql --user -p (ввожу пароль) Даю команду set character set cp866; - консоль ХР по моему работает в cp866 потом делаю select * from table1; показывает русские буквы нормалньно... Когда соединяюсь из QT
происходит такая беда: вывод qDebug: код 3f для всех русских букв нормальные коды для цифр для 1 - 31h 2 -32h и английских букв. цифры и буквы нормально печатаются в консоли строка qDebug(q.value(1).toByteArray().toHex()); вроде как с кодировкой не играется и вывод считанных данных в шеснадцатеричном виде не должен зависеть от кодека. toByteArray - представляем результат запроса как массив байтов toHex - получаем шеснадцатеричную строку... По моему данные портятся на уровне библиотеки для работы с БД из QT4 |
|
|
Константин |
18.2.2009, 16:51
Сообщение
#7
|
Студент Группа: Участник Сообщений: 69 Регистрация: 9.2.2009 Пользователь №: 539 Спасибо сказали: 15 раз(а) Репутация: 1 |
не торопись с выводами. mysql-gui-tools так и не попробовал?
|
|
|
zerling |
19.2.2009, 8:51
Сообщение
#8
|
Студент Группа: Участник Сообщений: 19 Регистрация: 31.10.2008 Из: г.Мытищи Московской обл. Пользователь №: 406 Спасибо сказали: 0 раз(а) Репутация: 0 |
не торопись с выводами. mysql-gui-tools так и не попробовал? Гуи тулз пробовал.. Скачал бинарики, чтоб не компилировать у себя.. через них всё читается/пишется нормально. Пробовал сервер заменить с 4.1 на 5й (5.0.67).. пересоздавал в 5м базу заново, при этом поменял либу в QT на ту, что от 5го шла, перекомпилировал QT.. Результат тот же... |
|
|
zerling |
19.2.2009, 14:47
Сообщение
#9
|
Студент Группа: Участник Сообщений: 19 Регистрация: 31.10.2008 Из: г.Мытищи Московской обл. Пользователь №: 406 Спасибо сказали: 0 раз(а) Репутация: 0 |
Решил проблему!! Правда коряво сделал...
В общем подправил драйвер QT434\src\sql\drivers\mysql\qsql_mysql.cpp Исправил кусочек кода в функции static QVariant::Type qDecodeMYSQLType(int mysqltype, uint flags)
От MySQL прошу давать данные в кодировке cp1251 и всё отображается нормально, перестали портится русские. |
|
|
Константин |
19.2.2009, 16:39
Сообщение
#10
|
Студент Группа: Участник Сообщений: 69 Регистрация: 9.2.2009 Пользователь №: 539 Спасибо сказали: 15 раз(а) Репутация: 1 |
зря
|
|
|
Текстовая версия | Сейчас: 15.1.2025, 12:44 |