Войти

Показать полную графическую версию : Запросы с широкими символами


evpu
12-06-2015, 15:30
Всем добрый день!

Снова о своем "любительском проекте". Созданный мной ранее на РНР движок базы сохранял кириллицу в БД в UTF8. Собственно, если бы даже и не так, пришлось бы в ряде процедур все равно конвертировать в UTF8. И вот теперь, делаю алгоритмы ядра на С под Debian, столкнулся с тем, что нужно из таблицы вычитывать данные с "широкими" символами, их обрабатывать, и загонять назад, так же в "широких" символах.
С типом wchar_t разобрался вроде...

Подскажите пожалуйста правильный синтаксис запросов, (я так полагаю, mysql_real_query()?) для извлечения в широкосимвольный массив! Только за эту задачу взялся, "нахрапом" взять не удалось - компилятор выдает кучу мата от mysql.h...

И по поводу функции swprintf(). Там второй аргумент - "count - максимальное число символов, которое сохраняется в версии Unicode этой функции." Порывшись в описании UTF8 нахожу информацию:

wiki:
"Алгоритм UTF-8 технически позволяет записывать код любой длины. Но для эффективной и надёжной работы алгоритма необходимо ограничение длины кода. Действующий стандарт Unicode 6.х предполагает использование кода до 21-го бита, то есть до четырех байт в UTF-8.".

Я так полагаю, это означает, что аргументу count следует присвоить значение "4"?

Iska
12-06-2015, 18:31
И по поводу функции swprintf(). Там второй аргумент - "count - максимальное число символов, которое сохраняется в версии Unicode этой функции." Порывшись в описании UTF8 нахожу информацию:
wiki:
"Алгоритм UTF-8 технически позволяет записывать код любой длины. Но для эффективной и надёжной работы алгоритма необходимо ограничение длины кода. Действующий стандарт Unicode 6.х предполагает использование кода до 21-го бита, то есть до четырех байт в UTF-8.".
Я так полагаю, это означает, что аргументу count следует присвоить значение "4"? »
Не там рылись. Второй аргумент — ровно то, что написано.
If the resulting wide string would be longer than len-1 characters, the remaining characters are discarded and not stored.
Maximum number of wide characters to fill in the ws buffer. The generated string has a length of at most n-1, leaving space for the additional terminating null wide character.

Зачем категорию выбрали при создании темы MySQL, когда у Вас C++?!

evpu
13-06-2015, 19:39
Спасибо за ответ!

С swprintf в любом случае разберусь... Спасибо за информацию. Суть в том, что из базы посредством mysql_query нужно извлекать данные, содержащие UTF8, путем форматированного вывода включать эти данные в UPDATE-запрос, и выполнять его, обычная mysql_query этот формат не отправляет... а с mysql_real_query пока не получилось.




© OSzone.net 2001-2012