Добавляет пробел к текстовому полю

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
ArtDen
Сообщения: 53
Зарегистрирован: 25 ноя 2007, 10:54

Добавляет пробел к текстовому полю

Сообщение ArtDen » 25 окт 2010, 13:50

Приветствую всех. Случайно обнаружилась очень странная вещь. В очень редких случаях к текстовому полю при записи добавляется пробел.

Конфигурация ОС и FB такая:
Win 7 Home basic 64 bit + FB Embed 2.1.3.18185 + ODBC 2.0.0.148
Кодировка базы - UTF8

Таблица справочник такая:

Код: Выделить всё

CREATE TABLE KEY_NAMES
(
  ID INTEGER NOT NULL,
  NAME VARCHAR(224) NOT NULL, /* проблема с этим полем */
  CONSTRAINT PK_KEY_NAMES PRIMARY KEY (ID),
  CONSTRAINT U_KEY_NAMES_NAME UNIQUE (NAME)
);


Проблемное слово, к которому добавляется пробел - дата_записи_кривой. Достаточно что-нибудь изменить в этом слове (например, последнюю букву с й на Й), чтобы этот пробел не добавлялся.

PS: строка подключения (привожу без значения DRIVER=) следующая:
UID=SYSDBA; PWD=masterkey; DBNAME=localhost:d:\PrimeDB\db\prime.fbdb; CHARSET=UNICODE_FSS; DIALECT=3;

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Re: Добавляет пробел к текстовому полю

Сообщение Dimitry Sibiryakov » 25 окт 2010, 14:35

Вот к автору этого самого DRIVER, имени которого нельзя произносить вслух, и обращайся.

ArtDen
Сообщения: 53
Зарегистрирован: 25 ноя 2007, 10:54

Re: Добавляет пробел к текстовому полю

Сообщение ArtDen » 25 окт 2010, 15:16

А это точно дело в драйвере? И есть ли какие-нибудь другие версии odbc-драйверов для FB кроме тех, которые выложены в http://www.firebirdsql.org/index.php?op=files&id=odbc ?

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Re: Добавляет пробел к текстовому полю

Сообщение kdv » 25 окт 2010, 18:11

если
Кодировка базы - UTF8
то тогда почему
CHARSET=UNICODE_FSS;
может, не пробелы добавляются, а какие-то левые символы. Из-за неправильно выбранного unicode_fss.

ArtDen
Сообщения: 53
Зарегистрирован: 25 ноя 2007, 10:54

Re: Добавляет пробел к текстовому полю

Сообщение ArtDen » 25 окт 2010, 21:53

UNICODE_FSS потому, что никакой другой вариант не работает. Я об этом некоторое время назад писал в этом форуме.
Добавляет именно пробел (сохраняет в файл базы именно с пробелом) и только для вышеуказанной строки. Других подобных строк замечено не было.

В качестве параметра строка "загонятся" в базу при помощи ф-ции SQLBindParameter примерно таким образом:

Код: Выделить всё

std::wstring text = ...
void *ptr = const_cast<wchar_t*>(text.c_str());
SQLBindParameter(hstmt_, column, SQL_PARAM_INPUT, SQL_C_WCHAR, SQL_VARCHAR, SQL_NTS, 0, ptr, 0, NULL);
Всё это идёт перед SQLExecute.

Где может быть косяк?

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Re: Добавляет пробел к текстовому полю

Сообщение kdv » 26 окт 2010, 11:02

UNICODE_FSS потому, что никакой другой вариант не работает. Я об этом некоторое время назад писал в этом форуме.
лажа какая-то. unicode_fss это кривая трехбайтовая юникодная кодировка. Которая как раз плохо работает относительно UTF8.
Ваше письмо на тему "utf8 не работает, а unicode_fss работает" - не нашел. Приведите ссылку, пожалуйста.
Про SQLBind и прочее пишите автору драйвера. Здесь этим засорять форум бесполезно.

Antoxa
Сообщения: 169
Зарегистрирован: 06 июл 2006, 10:53

Re: Добавляет пробел к текстовому полю

Сообщение Antoxa » 30 окт 2010, 04:40

А что, бывает Win 7 Home basic 64 bit ?

Ответить