2016-12-30 1 views
1

Ich möchte ein Feld namens E-Mail an die Tabelle AGENT hinzufügen. Ich möchte, dass die Werte von AGENT.email innerhalb der Tabelle eindeutig sind, und ich möchte, dass diese Eindeutigkeit die Groß-/Kleinschreibung nicht berücksichtigt.Wie erzwingen Sie eine eindeutige Beschränkung für Groß- und Kleinschreibung bei einem Firebird-Feldwert?

Zum Beispiel würde das Hinzufügen von "[email protected]" die Einschränkung verletzen, wenn "[email protected]" bereits in der Tabelle existiert. Wie mache ich das?

Antwort

2

Sie können wie so einen eindeutigen Index für lower von E-Mail-Spalte der Tabelle hinzufügen:

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

Ich benutze Firebird 2.1 –

+0

Das hat funktioniert. Vielen Dank. –

+0

@ Jonathan Prost Mate :) – GurV

2

Um einen Fall unempfindlich Einschränkung auferlegen, der beste Weg ist, um die Säule mit einem Fall insensitive Sortierung wie unicode_ci_ai zu erstellen - diese Zusammenstellung ist Akzent auch unempfindlich, was Sie können oder nicht wollen - und fügen Sie eine eindeutige Einschränkung (oder einen eindeutigen Index) auf dieser Spalte:

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) 
); 

oder das Feld zu einer vorhandenen Tabelle hinzuzufügen:

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

Sortierungen Alternative würde unicode_ci (nur Groß- und Kleinschreibung) oder andere built-in case insensitive collations in Abhängigkeit von dem Zeichensatz verwendet wird, oder zu create your own specific collation sein. Der Vorteil dieser Lösung gegenüber Gurwinder besteht darin, dass Sie auch Fall (und Akzent) insensitiv wählen können, ohne lower in Ihrer where-Klausel verwenden zu müssen.

Verwandte Themen