"AZDesign" wrote in message ...
Firebird 2.5.0.26074 (x64)

Делаем табличку:
Create table Words
     (Word      VarChar(250)  character set WIN1251  Unique);

Затем вставляем строку:

Insert into Words(Word) values('');

и еще одну:

Insert into Words(Word) values('                    ');

получаем:
Statement failed, SQLSTATE = 23000
violation of PRIMARY or UNIQUE KEY constraint "INTEG_3" on table "Words"

Замена VarChar на Char ничего не меняет.
т.е. строки состоящие из один пробелов считаются одинаковыми, независимо от
количества пробелов в каждой из них.

Это так и должно быть или баг?

   Так и должно быть. Стандарт.

Хелен Борри пишет, что в Char завершающие пробелы не являются значащими
(т.е. отбрасываются), а в VarChar завершающие пробелы являются значащими
(т.е. сохраняются).
На практике получается не так.

   Хранение и сравнение не есть одно и то же, не нужно их путать. Кроме того, 
CHAR
всегда дополняется пробелами до объявленной длины. А как они хранятся тебя не
должно волновать.

--
Хорсун Влад

Ответить