Как запретить дублирование значений без учета регистра?

ЧАстые Вопросы и Ответы

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

Ответить
frostyland
Сообщения: 38
Зарегистрирован: 05 июл 2007, 13:24

Как запретить дублирование значений без учета регистра?

Сообщение frostyland » 07 сен 2008, 10:51

День добрый.
Можно ли запретить вставку дублирующихся значений в поле без учета регистра (значение = ЗНАЧЕНИЕ = зНачение и т.д.) средствами самой БД?
А если нет, какая техника обычно используется?
Сделал уникальный индекс на поле, база создана с WIN1251, но все равно дублирование разрешается :(

Поиск по форуму у меня почему-то не работает, кстати. Вообще ничего не ищет, даже явно существующие вхождения...

Attid
Спец
Сообщения: 377
Зарегистрирован: 14 ноя 2006, 09:58

Re: Как запретить дублирование значений без учета регистра?

Сообщение Attid » 07 сен 2008, 11:24

уникальный индекс на UPPER(name) ?

frostyland
Сообщения: 38
Зарегистрирован: 05 июл 2007, 13:24

Re: Как запретить дублирование значений без учета регистра?

Сообщение frostyland » 07 сен 2008, 11:56

Attid писал(а):уникальный индекс на UPPER(name) ?
Эээ... синтаксис плззз :)

Попробовал по-всякому
CREATE UNIQUE INDEX "CSTUSER_Index01" ON UPPER (CSTUSER ("Field02"));
CREATE UNIQUE INDEX "CSTUSER_Index01" ON UPPER (CSTUSER) ("Field02"));
CREATE UNIQUE INDEX "CSTUSER_Index01" ON CSTUSER (UPPER ("Field02"));

Slavik
Сообщения: 115
Зарегистрирован: 17 янв 2007, 11:52

Re: Как запретить дублирование значений без учета регистра?

Сообщение Slavik » 07 сен 2008, 14:03

Читаем релизноты и doc\sql.extensions\README.expression_indices.txt.
Не забываем указывать версию сервера.
Ещё один вариант -- дополнительное поле, заполняемое в триггере:

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

NEW.NAME_UPPER = UPPER(NEW.NAME);
а на него уже уникальный индекс.

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

Re: Как запретить дублирование значений без учета регистра?

Сообщение kdv » 07 сен 2008, 16:20

Попробовал по-всякому
в дополнение - перестаньте использовать двойные кавычки в именах объектов, пока не поздно.

http://www.ibase.ru/ibfaq.htm#dtproblem

Ответить