rdmenezes / qtfirebirdibppsqldriver

Automatically exported from code.google.com/p/qtfirebirdibppsqldriver
0 stars 0 forks source link

Исключение при использовании кодировки UTF-8 #8

Closed GoogleCodeExporter closed 9 years ago

GoogleCodeExporter commented 9 years ago
1. Таблица:
SET SQL DIALECT 3;

CREATE TABLE REA (
    NAME    VARCHAR(20) DEFAULT 'Укажите название АН',
    PHONE  PHONE /* PHONE = VARCHAR(15) */
);

2. Код:
db.setConnectOptions("CHARSET=UTF8");
...
query.prepare("insert into REA (NAME) values (:name)");
query.bindValue(":name", "test");
bool result = query.exec();

3. Результат:
*** IBPP::SQLException ***
Context: Statement::Execute( insert into REA (NAME) values (?) )
Message: isc_dsql_execute2 failed

SQL Message : -802
Arithmetic overflow or division by zero has occurred.

Engine Code    : 335544321
Engine Message :
arithmetic exception, numeric overflow, or string truncation
Cannot transliterate character between character sets

Похоже где-то неверно учитывается длинна 
передаваемых символьных полей.

Original issue reported on code.google.com by tonal.pr...@gmail.com on 9 Mar 2010 at 8:10

GoogleCodeExporter commented 9 years ago
Обсуждение здесь: 
http://www.prog.org.ru/index.php?topic=8509.msg80927#msg80927

Original comment by tonal.pr...@gmail.com on 9 Mar 2010 at 8:10

GoogleCodeExporter commented 9 years ago
VARCHAR(20) - это в байтах, а не символах. Отсюда - 
DEFAULT 'Укажите название АН' не
помещается в поле.
Попробуйте VARCHAR(50). Всё должно работать. 
Кроме транслитерации, о чём я уже успел
упомянуть. :)

Original comment by sarbas...@gmail.com on 10 Mar 2010 at 6:04

GoogleCodeExporter commented 9 years ago
    Conversions between Firebird and Qt
      "ASCII"       = "IBM 866"
      "BIG_5"       = "Big5"
      "CYRL"        = "KOI8-R"
      "DOS850"      = "IBM 850"
      "DOS866"      = "IBM 866"
      "EUCJ_0208"   = "JIS X 0208"
      "GB_2312"     = "GB18030-0"
      "ISO8859_[1-9, 13]"   = "ISO 8859-[1-9, 13]"
      "KSC_5601"    = "Big5-HKSCS"
      "SJIS_0208"   = "JIS X 0208"
      "UNICODE_FSS" = "UTF-32"
      "UTF8"        = "UTF-8"
      "WIN125[0-8]"     = "Windows-125[1-8]"
    else use QTextCodec::codecForLocale()

Original comment by alex.wen...@gmail.com on 13 Mar 2010 at 11:46