klimenko-serj / cl-fbclient

Common Lisp library for working with firebird databases
6 stars 0 forks source link

Error: Illegal :utf-8 character starting at position 11. #5

Closed LinkFly closed 10 years ago

LinkFly commented 10 years ago

Добрый день. Мы используем базу firebird с кодировкой windows-1251 (по историческим причинам). Видимо поэтому появляется эта (указанная в заголовке) ошибка. Предусмотрена ли возможность настроить cl-fbclient для работы с БД в определённой кодировке?

LinkFly commented 10 years ago

Решил проблему подобным кодом:

(let ((cffi:*default-foreign-encoding* :windows-1251))
                   (fb-query-fetch-all *default-database* "select first 2 id, short_name from product"))

Предлагаю добавить в класс fb-database слот encoding и соответственно initarg - :encoding. И использовать значение этого слота при вызове ф-ий cffi:foreign-string-to-lisp и подобных.

klimenko-serj commented 10 years ago

Да, у меня была такая мысль, почему-то решил, что через cffi:default-foreign-encoding будет проще. Пересмотрю. Кстати вместо (fb-query-fetch-all default-database "select first 2 id, short_name from product")) можно использовать макрос fb-query: https://github.com/klimenko-serj/cl-fbclient/wiki/fb-query-macro а если вместо default-database использовать database-toplevel и fb-with-toplevel-connection, то можно писать просто: (fb-query "select first 2 id, short_name from product")

У меня к вам вопрос: сталкивались ли вы с проблемами в многопоточных приложениях? Я обнаружил некоторые проблемы в fbclient.dll (именно под Windows, под Linux все работает нормально.), и пока не знаю как их обойти.

2013/10/22 Sergey Katrevich notifications@github.com

Решил проблему подобным кодом: (let ((cffi:default-foreign-encoding :windows-1251)) (fb-query-fetch-all default-database "select first 2 id, short_name from product"))

Предлагаю добавить в класс fb-database слот encoding и соответственно initarg - :encoding. И использовать значение этого слота при вызове ф-ий cffi:foreign-string-to-lisp и подобных.

Reply to this email directly or view it on GitHubhttps://github.com/klimenko-serj/cl-fbclient/issues/5#issuecomment-26793154 .

LinkFly commented 10 years ago

Спасибо за подсказки! Нет, я не сталкивался. У нас на стороне сервера используется odbc драйвер (и лисповый биндинг к нему sql-odbc) На cl-fbclient пока только в процессе перехода (если получится - сейчас выявилась странная ошибка с удалением таблицы в том же коннекте, в случае если были произведены какие-либо операции с данными этой таблицы: https://github.com/klimenko-serj/cl-fbclient/issues/6 ). В "Firebird ODBC Конфигуратор" (Администрирование -> Источник данных ODBC) стоит галка "Потоко-безопасный источник". Что она значит? Возможно то, что драйвер ODBC не будет работать в многопоточном режиме с fbclient.dll.

Скорее всего нам понадобиться работать в fbclient в многопоточном режиме (и именно под Windows). В связи с этим, можно поподробней - какие именно возникли проблемы?

klimenko-serj commented 10 years ago

добавил поле :encoding в класс fb-database. Проверяйте.

LinkFly commented 10 years ago

Спасибо, используем.