MySql и кодировка |
Здравствуйте, гость ( Вход | Регистрация )
MySql и кодировка |
kalombo |
10.12.2008, 18:12
Сообщение
#1
|
Студент Группа: Участник Сообщений: 37 Регистрация: 5.8.2008 Пользователь №: 252 Спасибо сказали: 0 раз(а) Репутация: 0 |
В функции main есть строчка QTextCodec::setCodecForCStrings(QTextCodec::codecForName("cp1251"));
Есть две формы для ввода данных в БД, одна сделана с помощью QtDesigner (ui-файл соответственно), другая непосредственно - кодом. Первая позволяет выполнить SQL-запрос, то есть данные на русском языке попадают в Бд, вторая - ругается, lastError() выдает что-то вроде "Не могу вставить строку вида "\xd1\xd2\xe3... и т.д." Как это исправить? |
|
|
kwisp |
10.12.2008, 18:47
Сообщение
#2
|
астарожна ынтжинэр Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23 |
|
|
|
Litkevich Yuriy |
10.12.2008, 19:19
Сообщение
#3
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
SABROG |
11.12.2008, 9:53
Сообщение
#4
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("cp1251")); Объясните мне какой смысл задавать жестко виндовую кодировку в кроссплатформенном приложении ? Не лучше ли использовать QString::fromLocal8Bit(), который в зависимости от текущей локали будет выбирать сам кодек ? С базами данных, насколько я помню, тоже не все однозначно. Обычно на сервере можно настроить не только кодировку для таблицы, но и кодировку принимаемой и возвращаемой строки. Т.е. приниматься строки могут в кодировке локали (например cp1251 в винде и koi8-r в линуксе), БД сама их перекодирует в UTF8 и заносит в таблицу, при SELECT'e возвращает UTF8 данные из таблицы опять же в зависимости от локали. |
|
|
Litkevich Yuriy |
11.12.2008, 15:20
Сообщение
#5
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
Объясните мне какой смысл задавать жестко виндовую кодировку в кроссплатформенном приложении ? ни какого. Это просто часто употребляемый быстрый совет, для виндовозного варианта.Не лучше ли использовать QString::fromLocal8Bit() где и сколько раз?Лучше на мой взгляд так:
|
|
|
kalombo |
11.12.2008, 17:31
Сообщение
#6
|
Студент Группа: Участник Сообщений: 37 Регистрация: 5.8.2008 Пользователь №: 252 Спасибо сказали: 0 раз(а) Репутация: 0 |
Значит так...
Цитата именно такая строка в водится? Вводится - "ааа" Получаю - "Incorrect string value: \xD0\xB0\xD0\xB0\xD0\xB0\... ' for column Name_Obj и т.д." Цитата Объясните мне какой смысл задавать жестко виндовую кодировку в кроссплатформенном приложении ? Не лучше ли использовать QString::fromLocal8Bit(), который в зависимости от текущей локали будет выбирать сам кодек ? Никакого. Лучше использовать кодировку в зависимости от локали. Теперь так делаю. Цитата С базами данных, насколько я помню, тоже не все однозначно. Обычно на сервере можно настроить не только кодировку для таблицы, но и кодировку принимаемой и возвращаемой строки. Т.е. приниматься строки могут в кодировке локали (например cp1251 в винде и koi8-r в линуксе), БД сама их перекодирует в UTF8 и заносит в таблицу, при SELECT'e возвращает UTF8 данные из таблицы опять же в зависимости от локали. У меня две формы для забивки в данных, в разные таблицы правда, но не суть важно. Ставлю обеим таблицам cp1251. Ui-форма позволяет вводить данные, не Ui - выдает ошибку. Ставлю кодировку utf8 - результат не меняется. Или я всё-таки зря прицепился к Ui-формам и не в них дело? |
|
|
SABROG |
11.12.2008, 17:48
Сообщение
#7
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
Проведи простой тест. Попытайся вставить английский текст. Если прокатит, значит дело в кодировке, если нет, то в коде.
|
|
|
kalombo |
11.12.2008, 18:02
Сообщение
#8
|
Студент Группа: Участник Сообщений: 37 Регистрация: 5.8.2008 Пользователь №: 252 Спасибо сказали: 0 раз(а) Репутация: 0 |
Вставляется. Его я первым делом провел.
|
|
|
SABROG |
11.12.2008, 18:13
Сообщение
#9
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
QString::fromLocal8Bit() пробывал ?
|
|
|
kalombo |
11.12.2008, 18:34
Сообщение
#10
|
Студент Группа: Участник Сообщений: 37 Регистрация: 5.8.2008 Пользователь №: 252 Спасибо сказали: 0 раз(а) Репутация: 0 |
QString::fromLocal8Bit() пробывал ? Не помогло. Упростим задачу. Создал новое приложение, в конструкторе формулы тупо написал QString str = QString("INSERT into object (Name_obj, Link_obj,Limits, Formuls, Graph, topicsid) values('Мама','Папа','','','',9)"); insert.exec(str); Результат тот же в main стоит QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale()); Кодировку для таблицы object менял с помощью Mysql Administrator на utf8, cp1251. |
|
|
Текстовая версия | Сейчас: 5.12.2024, 9:09 |