|
|
|||||
Регистрация: May 2004
Адрес: Ukraine
Сообщений: 23
|
SQLite>Insert -проблема кодировки
Ломаю голову уже несколько часов:
выполняю SQLite-запрос INSERT, добавляю текстовое поле: 1. Если текст латиницей (English), insert работает. 2. Если текст кириллицей - insert не срабатывает. useCodePage - никак не влияет на ситуацию. Кто-нибудь с таким сталкивался? P.S. В стандартном примере Zinc та же проблема. Последний раз редактировалось EXFlash; 19.05.2009 в 10:15. Причина: в моск поступили новые данные |
|
|||||
Регистрация: Apr 2008
Сообщений: 102
|
Текст можно записать в ByteArray:
writeUTFBytes writeMultiByte Если вставлять ByteArray проблем быть не должно. |
|
|||||
Регистрация: May 2004
Адрес: Ukraine
Сообщений: 23
|
Я пытался работать с ByteArray, но это не сработало, либо у меня руки кривые
|
|
|||||
Регистрация: Apr 2008
Сообщений: 102
|
var conn:SQLConnection = new SQLConnection(); conn.open("myDatabase.db"); var sql:String = "INSERT INTO mytable (data) VALUES (:data)"; var bytes:ByteArray = new ByteArray(); bytes.writeMultiByte("Привет!", "utf-8"); var statement:SQLStatement = new SQLStatement(); statement.parameters[":data"] = bytes; statement.sqlConnection = conn; statement.execute(); |
|
|||||
Регистрация: May 2004
Адрес: Ukraine
Сообщений: 23
|
Э... может я не упомянул... я работаю с SQLite и Zinc.
|
|
|||||
Регистрация: Jun 2009
Сообщений: 4
|
В общем с подобной проблемой я тоже сталкнулся, кроме того в SELECT по русским символам типа SELECT с1 FROM t1 WHERE c1 = 'Пётр' тоже не работает , и решение обоих проблем как мне кажется возможно корявым методом транслитерации русских символов из приложения с внесением в БД уже латиницы.
В недавнем случае с которым пришлось заниматься самому, также столкнулся с проблемой отображения кирилических символов хранящихся в БД в UTF-8 или ANSI при использовании стандартных виндовых русских шрифтов типа Arial. Суть проблемы в интерпритации Цинком байтовых последовательностей полученных из БД методом при передаче в строковую переменную Flash. При хранении в БД в кодировке UTF-8 решил проблему так: t_task_text.text = f_decode_zinc_to_utf_8(str_db); public function f_decode_zinc_to_utf_8(str_arg:String):String{ //Функция перекодирует полученную и неверно интерпретированную Цинком из БД строку //в кодировку utf-8 var i:Number; var n_str_len:Number; var n_char_code:Number; var ByteStr:ByteArray = new ByteArray(); var str_return:String; //посчитать кол-во символов n_str_len = str_arg.length; if (n_str_len == 0){ return ''; } //порезать на символы //обрабатывать по символьно в байты for (i = 0; i < n_str_len; i++){ n_char_code = str_arg.charCodeAt(i); trace(n_char_code); ByteStr.position = i; ByteStr.writeByte(n_char_code); } ByteStr.position = 0; str_return = ByteStr.readMultiByte(ByteStr.bytesAvailable,"utf-8");//"utf-8" x-cp1251 return str_return; } |
|
|||||
[+1 04.01.10]
[+3 27.01.10] Регистрация: Dec 2009
Сообщений: 28
|
ребята есть на много проще способ.
у меня все заработало моментально 1. Скачиваем и устанавливаем SQLLite Expert Personal 2. Создаем в нем новую БД в кодировке utf-8 3. Конектимся к базе и выполяем любые DML команды У вас не будет больше проблем с кодировкой. если будут вопросы пишите помогу |
|
|||||
Регистрация: May 2004
Адрес: Ukraine
Сообщений: 23
|
Сейчас посмотрел - база в UTF-8. А ты говоришь про AIR или Zinc?
|
|
|||||
Цинк использует внешнюю клиентскую ДЛЛ-ку sqlite.dll или код для работы со Скулайтом вкомпилен в сам движок, как в AIR?
Если отдельную длл-ку, то можно ее заменить скомпиленной с поддержкой ICU. У меня тоже куча траблов была с украинскими символами в базе - LIKE не работал, сортировка неправильная была. Скомпилил с ICU - все заработало, правда добавилось еще 3 длл-ки, одна из которых весит 15 метров. Забыл добавить, что я тогда с Python-ом работал, но подход, по сути, универсальный. Последний раз редактировалось Skyggedans; 19.12.2009 в 16:30. |
|
|||||
Регистрация: May 2004
Адрес: Ukraine
Сообщений: 23
|
Zinc использует свою библиотеку mdm_Database.dll, в которую встроен SQLite.
При компиляции все встраивается в один exe-файл. Но, на крайний случай цинк умеет работать с внешними dll-файлами. |
Часовой пояс GMT +4, время: 12:45. |
|
« Предыдущая тема | Следующая тема » |
Теги |
Insert , SQLite , zinc , кодировка |
|
|