Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Как создать на DB2 [b]Case Insensitive[/b] базу? / 25 сообщений из 29, страница 1 из 2
27.02.2006, 20:00
    #33569062
db2
db2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как создать на DB2 [b]Case Insensitive[/b] базу?
Наверное дурацкий вопрос, но все же:
Как создать на DB2 Case Insensitive базу?
...
Рейтинг: 0 / 0
27.02.2006, 20:04
    #33569069
db2
db2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как создать на DB2 [b]Case Insensitive[/b] базу?
А особенно интересует как работать/пересоздать уже имеющуюся базу, чтобы она стала/вела себя как Case Insensitive ?
...
Рейтинг: 0 / 0
27.02.2006, 20:19
    #33569096
Victor Metelitsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как создать на DB2 [b]Case Insensitive[/b] базу?
Никак.
...
Рейтинг: 0 / 0
27.02.2006, 20:51
    #33569140
db2
db2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как создать на DB2 [b]Case Insensitive[/b] базу?
Victor MetelitsaНикак.Подождите, Виктор, что значит никак ?
Вообще никак Case Insensitive не сделать!?
Как серпом по одному месту... :(

А как же быть тогда?
Как мне зделать так, чтобы для DB2 "Вася" и "вася" были одним и тем же лицом?
Я не говорю даже о том, чтобы "ёжик" и "ежик" (Accent Insensitive) были одинаковыми...

Вы то как это обходите?
...
Рейтинг: 0 / 0
27.02.2006, 21:14
    #33569160
Victor Metelitsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как создать на DB2 [b]Case Insensitive[/b] базу?
Не обхожу. Они разные. А почему и зачем я это должен как-то обходить? Почему "Вася" и "вася" должны быть одним и тем же? Я не понимаю.

Можно поставить вопрос по-другому - я хочу найти все вариации "вася" и "Вася" одним запросом, но

select * from xxx where ucase(xxx.field)=ucase('Вася')

может быть очень неэффективно. До сих пор в DB2 нельзя создать индексы по выражениям. Вроде бы обещали в 9-й версий, но я не помню, чтобы об этом упоминалось в последних новостях.

Workaround: создать поля наподобие

u_field generated always as (ucase(field))
и использовать u_field в индексах

в таком случае в

select * from xxx where ucase(xxx.field)=ucase('Вася')

компилятор осуществит подстановку

select * from xxx where u_field=ucase('Вася')
...
Рейтинг: 0 / 0
27.02.2006, 23:14
    #33569298
db2
db2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как создать на DB2 [b]Case Insensitive[/b] базу?
Victor MetelitsaНе обхожу. Они разные. А почему и зачем я это должен как-то обходить? Почему "Вася" и "вася" должны быть одним и тем же? Я не понимаю.А почему "Вася" и "вася" обязаны быть разными?
Да, вообще-то, с точки зрения прикладной задачи, они одинаковые. В моем случае даже "ежик" и "Ёжик" одно и то же лицо.

Victor MetelitsaМожно поставить вопрос по-другому - я хочу найти все вариации "вася" и "Вася" одним запросом, но select * from xxx where ucase(xxx.field)=ucase('Вася') может быть очень неэффективно.Вообщем-то да, остается только этот путь.
Но, если я вас правильно понял, то индексы в таком случае могут работать неэффективно. Еще ass в том, что об этом придется везде помнить.
Ладно, поэкспериментирую, можеет и не медленнее будет.

Victor MetelitsaДо сих пор в DB2 нельзя создать индексы по выражениям. Вроде бы обещали в 9-й версий, но я не помню, чтобы об этом упоминалось в последних новостях.Индексы по выражениям это конечно хорошо. У меня они есть, но большой нужды их использовать пока не было.
Лучше бы они CS/CI и AS/AI реализовали бы и вопрос бы сам собой снялся.


Виктор, не подскажете, может быть такая редакция DB2, которая не поддерживает unicode (GRAPHIC)? Это случайно не какой-нибудь DB2 Express?
...
Рейтинг: 0 / 0
27.02.2006, 23:47
    #33569320
Victor Metelitsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как создать на DB2 [b]Case Insensitive[/b] базу?
Graphic - это изначально не Unicode, а DBCS (Double Byte Character Set), т.е. какой-то азиатский набор символов (японский, два китайских, корейский...). Сколько помню (а этот момент помню я с DB2 версии 2.1 для OS/2), оно "всегда" было, а вот поддержка Юникода появилась совсем недавно (как я понимаю, в Юникодных базах CHAR=UTF8 и GRAPHIC=UTF16, но в неюникодных GRAPHIC - это никакой не Юникод). Не слышал, чтобы это где-то вырезали, да и к чему?
...
Рейтинг: 0 / 0
27.02.2006, 23:49
    #33569322
Victor Metelitsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как создать на DB2 [b]Case Insensitive[/b] базу?
"какой-то азиатский набор символов" - имеется ввиду класс двубайтовых азиатских кодировок, а не какая-то конкретная.
...
Рейтинг: 0 / 0
28.02.2006, 00:00
    #33569331
Victor Metelitsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как создать на DB2 [b]Case Insensitive[/b] базу?
DB2
Victor MetelitsaМожно поставить вопрос по-другому - я хочу найти все вариации "вася" и "Вася" одним запросом, но select * from xxx where ucase(xxx.field)=ucase('Вася') может быть очень неэффективно.Вообщем-то да, остается только этот путь.
Но, если я вас правильно понял, то индексы в таком случае могут работать неэффективно. Еще ass в том, что об этом придется везде помнить.
Ладно, поэкспериментирую, можеет и не медленнее будет.

Я же привел workaround. "Может быть очень неэффективно" относится к тому, что если "Вася" встречается очень часто, то индексы в принципе бесполезны и generated-поле не ускорит поиск.

Ещё уточнение - индексы, которые не эффективны, имеются в виду "древесные". Битмаповые могли бы в ряде случаев помочь больше, но их нет. Зато можно по Generated-полю создать измерение в MDC-таблицы, и это, пожалуй, круче, чем битмаповый индекс, за исключением негибкости (ведь добавить/удалить индекс проще, чем поменять структуру таблицы).
...
Рейтинг: 0 / 0
28.02.2006, 02:14
    #33569381
db2
db2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как создать на DB2 [b]Case Insensitive[/b] базу?
Victor MetelitsaGraphic - это изначально не Unicode, а DBCS (Double Byte Character Set), т.е. какой-то азиатский набор символов (японский, два китайских, корейский...). ... а вот поддержка Юникода появилась совсем недавно (как я понимаю, в Юникодных базах CHAR=UTF8 и GRAPHIC=UTF16, но в неюникодных GRAPHIC - это никакой не Юникод). Не слышал, чтобы это где-то вырезали, да и к чему?Подождите, unicode - это и есть вообщем-то "Double Byte Character Set" для поддержки корейского, японского и т.п. в том числе.
Даже описание констант для GRAPHIC такое же как для NVARCHAR в MSSQL.
Читаю help от DB2:
Код: plaintext
1.
2.
3.
4.
A graphic string constant specifies a varying-length graphic string and consists of a sequence of double-byte characters
that starts and ends with a single-byte apostrophe (') and is preceded by a single-byte G or N....
Examples:
  G'double-byte character string',
  N'double-byte character string'

Соединился с базой, запустил:
Код: plaintext
1.
CREATE TABLE TRY.T1(ID  INTEGER NOT NULL, NAME VARGRAPHIC( 100 ))
  DATA CAPTURE NONE;
Выдает обратно:
[IBM][CLI Driver][DB2/NT] SQL1216N Графические данные и графические функции не поддерживаются в этой базе данных. SQLSTATE=56031

Согласен, мой вопрос был не совсем корректен. Но выходит, база может поддерживать/не поддерживать GRAPHIC.
Вы не скажете, как сделать чтобы поддерживались?

Victor MetelitsaЕщё уточнение - индексы, которые не эффективны, имеются в виду "древесные". Битмаповые могли бы в ряде случаев помочь больше, но их нет... В Сиквеле тоже нет битмаповых. Но collation может быть свой/разный и у сервера и у базы и у каждого поля в таблице.
Как и у DB2 есть Binary Sort и Dictionary Sort. Просто, очевидно та часть которая Dictionary Sort расширена до опций СS/CI, AS/AI, KS/KI, WS/WI.

Вообще, кошмарик конечно. Чем дальше в лес тем толще партизаны :)
Чего-то наша идея сопряжения баз с каждым днем начинает все больше трещать и картинка с каждым днем все мрачнее :(
...
Рейтинг: 0 / 0
28.02.2006, 08:56
    #33569581
Victor Metelitsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как создать на DB2 [b]Case Insensitive[/b] базу?
Нет, DBCS и Unicode, кроме двухбайтовости, не имеют общего. Это - разные кодировки. Чтобы Graphic поддерживалась, надо создать базу в какой-то азиатской кодировке (какие-то поддерживают, какие-то нет). Т.е. ситуация - СУБД поддерживает, а база под её управлением не обязана.

Чего-то наша идея сопряжения баз с каждым днем начинает все больше трещать и картинка с каждым днем все мрачнее

Ну, я и подобным занимаюсь, только DB2 <-> Oracle. Но я выбрал репликацию.
...
Рейтинг: 0 / 0
28.02.2006, 09:39
    #33569689
Lepsik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как создать на DB2 [b]Case Insensitive[/b] базу?
DB2В Сиквеле тоже нет битмаповых.

начиная с MSSQL2000 есть бинарные если вас это устроит
...
Рейтинг: 0 / 0
28.02.2006, 10:05
    #33569776
ggv
ggv
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как создать на DB2 [b]Case Insensitive[/b] базу?
SQL1216N - говорит о том, что в _вашей_ _текущей_ кодировки базы эти типы данных не поддерживаются.
Создайте базу в двухбайтной кодировке и вперед и спесней.
...
Рейтинг: 0 / 0
28.02.2006, 11:00
    #33569992
gardenman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как создать на DB2 [b]Case Insensitive[/b] базу?
чтобы GRAPHIC, DBCLOB поддерживался нужно создать базу в кодировке UTF-8
...
Рейтинг: 0 / 0
28.02.2006, 11:10
    #33570030
Victor Metelitsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как создать на DB2 [b]Case Insensitive[/b] базу?
gardenmanчтобы GRAPHIC, DBCLOB поддерживался нужно создать базу в кодировке UTF-8

Если база юникодная, то GRAPHIC и DBCLOB "ненастоящие", т.е не DBCS, а UTF16, а зачем это при наличии UTF8?
...
Рейтинг: 0 / 0
28.02.2006, 11:51
    #33570186
Victor Metelitsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как создать на DB2 [b]Case Insensitive[/b] базу?
Какие поддерживаются кодировки:
http://publib.boulder.ibm.com/infocenter/db2luw/v8//topic/com.ibm.db2.udb.doc/admin/r0004565.htm?resultof=%22%31%32%30%38%22%20
В частности, японская кодировка IBM-943 - DBCS, но не UNICODE.

Вот список всех DBCS:
http://publib.boulder.ibm.com/infocenter/db2luw/v8/topic/com.ibm.db2.udb.doc/ad/r0006854.htm?resultof=%22%64%62%63%73%22%20%22%64%62%63%22%20
...
Рейтинг: 0 / 0
28.02.2006, 13:01
    #33570505
db2
db2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как создать на DB2 [b]Case Insensitive[/b] базу?
Lepsikначиная с MSSQL2000 есть бинарные если вас это устроитЗнаю, но не путайте теплое с мягким.

Victor MetelitsaНу, я и подобным занимаюсь, только DB2 <-> Oracle. Но я выбрал репликацию.Не, в нашем случае репликация не катит.
Скорее всего придется заниматься тем, чем не очень хотелось, а именно тащить часть структуры на MSSQL, особенно ту которая касается клиентской базы, и базы заказов. По крайней мере, уникодные Ёжики там будут проецироваться в ежиков без потери производительности на индексах и без тормозов и непоняток между DB2 и MSSQL. На DB2 пока оставим часть мертво связанную с аппаратурой.
...
Рейтинг: 0 / 0
28.02.2006, 14:07
    #33570785
gardenman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как создать на DB2 [b]Case Insensitive[/b] базу?
...
Рейтинг: 0 / 0
28.02.2006, 14:19
    #33570833
Victor Metelitsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как создать на DB2 [b]Case Insensitive[/b] базу?
О-о-о, а я про это забыл.

Хм. Посмотрел в CREATE TABLE:

# Tables created with CCSID UNICODE cannot be referenced in SQL functions or SQL methods (SQLSTATE 560C0).
# An SQL statement that references a table created with CCSID UNICODE cannot invoke an SQL function or SQL method (SQLSTATE 53090).
# Tables cannot have both the CCSID UNICODE clause and the DATA CAPTURE CHANGES clause specified (SQLSTATE 42613).
# Declared global temporary tables cannot be created with CCSID UNICODE (SQLSTATE 56031).
# SQL statements are always interpreted in the database code page. In particular, this means that every character in literals, hex literals, and delimited identifiers must have a representation in the database code page; otherwise, the character will be replaced with the substitution character.

Не вдохновляет.

С другой стороны, непонятна упёртость в "ёжиков" (я 10 лет просто не замечал этой "проблемы"; плюс на Oracle то же самое) и "незамечание" workaround'а.
...
Рейтинг: 0 / 0
28.02.2006, 14:48
    #33570977
ggv
ggv
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как создать на DB2 [b]Case Insensitive[/b] базу?
кхм-кхм
Для сведения "ежиков" воедино в больших масштабах появилось целое направление софта - MDM (Master Data Management), или же по-нашему, поддержание нормативно-справочной информации в синхронизированном и актуальном состоянии.
Это просто так, к сведению.
Еще не зная таких высокомудрых понятий я делал таки практически тоже самое доступными средствами (LDAP, в его наилучшей имплементации IBM TDS)
...
Рейтинг: 0 / 0
28.02.2006, 14:59
    #33571028
db2
db2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как создать на DB2 [b]Case Insensitive[/b] базу?
Victor MetelitsaС другой стороны, непонятна упёртость в "ёжиков" (я 10 лет просто не замечал этой "проблемы"; плюс на Oracle то же самое) и "незамечание" workaround'а.Да нет никакой упертости, Виктор.
По хорошему, клиент в базе должен быть записан, так как он значится. Например Мёдов, а не Медов. Кроме того имя, фамилия, отчество с большоой буквы. При поиске менеджер может искать и как Медова так и мёдова. Лучше бы, если бы он нашел сразу всех возможных, а не завел еще одного. Надеюсь вы с этим согласны.

Да, если "ёжиков" отбросить, то можно все хранить например в одом регистре, при печати преобразовывать как-нибудь. Можно еще чего-нибудь придумать.
Но вообще-то раз в DB2 с этим сложности, то спрашивается зачем мне с ними бороться, если в моем случае можно поручить это Сиквелу.
...
Рейтинг: 0 / 0
28.02.2006, 15:27
    #33571145
Victor Metelitsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как создать на DB2 [b]Case Insensitive[/b] базу?
Код: plaintext
1.
2.
3.
4.
5.
  create table xxx (
    lastname VARCHAR( 100 ),
    u_lastname GENERATED ALWAYS AS (TRANSLATE(UCASE(lastname), 'Е', 'Ё')),
    ...
  )
далее вы можете создать индекс по u_lastname, искать и сортировать по TRANSLATE(UCASE(lastname), 'Е', 'Ё') или прямо по u_lastname. "Накладные расходы" - лишняя колонка в таблице (когда и если появятся индексы по выражениям, надобность в ней отпадёт).
...
Рейтинг: 0 / 0
28.02.2006, 16:05
    #33571314
db2
db2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как создать на DB2 [b]Case Insensitive[/b] базу?
Victor Metelitsaдалее вы можете создать индекс по u_lastname, искать и сортировать по TRANSLATE(UCASE(lastname), 'Е', 'Ё') или прямо по u_lastname. "Накладные расходы" - лишняя колонка в таблице (когда и если появятся индексы по выражениям, надобность в ней отпадёт).Спасибо, Виктор.

Но мы, похоже, все таки принимаем решение о переносу всего, кроме некоторых частей на Сиквел. Наверное, в нашем случае это даже правильнее.
На DB2 пока поживут части связанные непосредственно с аппаратурой (исходников, блин, нету :( ), пока не найдем умельцев, которые их перенесут.
...
Рейтинг: 0 / 0
28.02.2006, 18:43
    #33571878
тлгдшлщм
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как создать на DB2 [b]Case Insensitive[/b] базу?
Чем наличие Регистро независимости поможет не завести еще одного МЕДОВА??
Или наоборот если их должно быть два а в системе подразумевается один.
...
Рейтинг: 0 / 0
28.02.2006, 19:19
    #33571946
Herr Developer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как создать на DB2 [b]Case Insensitive[/b] базу?
SOUNDEX scalar function

Это не то что нужно?

P.S.
Как там с русским языком не в курсе.
...
Рейтинг: 0 / 0
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Как создать на DB2 [b]Case Insensitive[/b] базу? / 25 сообщений из 29, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]