2016-12-30 1 views
1

Я хочу добавить поле, называемое email, в таблицу AGENT. Я хочу, чтобы значения AGENT.email были уникальными по всей таблице, и я хочу, чтобы эта уникальность была нечувствительной к регистру.Как вы накладываете уникальное ограничение, нечувствительное к регистру, на значение поля Firebird?

Например, добавление «[email protected]» нарушит ограничение, если «[email protected]» уже существует в таблице. Как мне это сделать?

ответ

2

Вы можете добавить уникальный индекс на lower столбца электронной почты на столе, как так:

create unique index email_unq_idx on agent computed by (lower(email)); 
+0

Я запускаю Firebird 2.1 –

+0

Это сработало. Спасибо. –

+0

@ Jonathan Cheers mate :) – GurV

2

Наложить регистрозависимости ограничения, лучший способ создать столбец с регистрозависимостью комплектовке как unicode_ci_ai - это сверка также акцентировать нечувствительным, которые вы можете или не можете - и добавить ограничение уникальности (или уникальный индекс) в этой колонке:

create table addressbook 
(
    id integer not null, 
    emailaddress varchar(150) character set utf8 collate unicode_ci_ai, 
    constraint pk_addressbook primary key (id), 
    constraint uc_emailaddress unique (emailaddress) 
); 

или добавить поле в существующую таблицу:

alter table addressbook 
    add emailaddress2 varchar(150) character set utf8 
      constraint uc_emailaddress2 unique collate unicode_ci_ai 

Альтернативные сортировки будет unicode_ci (только чувствительно к регистру) или другой built-in case insensitive collations в зависимости от используемого набора символов, или create your own specific collation.

Преимущество этого решения над Gurwinder заключается в том, что он также позволяет вам без особого выбора использовать случай (и акцент) без использования lower в вашем предложении where.

Смежные вопросы