Клименчук Сергей wrote:
CREATE TABLE T1 (
F1 VARCHAR(128) CHARACTER SET OCTETS
);
CREATE UNIQUE INDEX IDX1 ON T1 (F1);
Вставляем пару строк, отличающихся
наличием/кол-вом концевых нулей.
Все нормально.
alter index idx1 inactive;
alter index idx1 active;
"attempt to store duplicate values on unique index"
Что Тебе не нравится? То, что в первом случае ФБ разрешил вставку или же
то, что для Тебя все-таки это как-бы различные строки?
Смотри например сюда, это конечно не OCTETS, но идея та же:
SQL> connect 'unique_str.fdb' user 'sysdba' password 'masterkey';
Database: 'unique_str.fdb', User: sysdba
SQL> create table uniq(col1 varchar(10) character set win1252 unique);
SQL> commit;
SQL> insert into uniq values('a');
SQL> commit;
SQL> insert into uniq values('a ');
Statement failed, SQLCODE = -803
violation of PRIMARY or UNIQUE KEY constraint "INTEG_1" on table "UNIQ"
SQL>
В SQL две строки считаются эквивалентными, даже если у них различное
количество пробелов в конце. В OCTETS 0x00 итерпретируется как пробел, а
в этом случае 0x01 0x00 и 0x01 0x00 0x00 эквивалентны.
А вот почему он сразу не ругался - это вопрос... Версия сервера?
Роман