ЧАстые Вопросы и Ответы
Модераторы: kdv, CyberMax
-
Hadroran
- Сообщения: 39
- Зарегистрирован: 22 фев 2005, 10:23
Сообщение
Hadroran » 11 май 2006, 13:24
Имеется база в кодировке WIN1251 COLLATE WIN1251
При запросе типа
Код: Выделить всё
SELECT * FROM MY_TABLE WHERE T_NAME='таблетка'
появляется сообщение о том что невозможно найти данные символы в этом наборе. Нашел предложение сменить на
WIN1251 COLLATE PXW_CYRL, но только заново перезаписав данные базы.
Попробовал на новой таблице с парой строк - получилось. Однако пытался потом поменять кодировку в доменах, не вышло.
Можно ли обойтись меньшей кровью, не переписывая данные.
-
kdv
- Forum Admin
- Сообщения: 6595
- Зарегистрирован: 25 окт 2004, 18:07
Сообщение
kdv » 11 май 2006, 14:26
www.ibase.ru/devinfo/ibrusfaq.htm
читать раза 3-4, внимательно.
если сам колупал системные таблицы, и уже не помнишь как и где - тогда только пересозданием БД и переливанием данных.
-
Hadroran
- Сообщения: 39
- Зарегистрирован: 22 фев 2005, 10:23
Сообщение
Hadroran » 12 май 2006, 11:07
Все обошлось малой кровью.
Изменения в системных таблицах не помогли. Я нужные поля отцепил от доменов в систеной таблице для них в RDB$COLLATION_ID установил значение 0 проапдейтил данные и все получилось.
Только одна заковырка осталась. При создании запроса со словами "Масло" и "масло" выдаются разные строки. Как сделать чтобы даже по запросу "МаСлО" выдавались все строки содержащие эти буквы.
-
kdv
- Forum Admin
- Сообщения: 6595
- Зарегистрирован: 25 окт 2004, 18:07
Сообщение
kdv » 12 май 2006, 11:53
я не понял - ты в FAQ про upper читал?
про необходимость обновления данных после смены collate ковырянием в системных таблицах тоже читал?
p.s. после таких колупаний в системных таблицах будь готов, что дальше все может начать глючить еще больше.
-
Hadroran
- Сообщения: 39
- Зарегистрирован: 22 фев 2005, 10:23
Сообщение
Hadroran » 12 май 2006, 12:16
kdv писал(а):я не понял - ты в FAQ про upper читал?
про необходимость обновления данных после смены collate ковырянием в системных таблицах тоже читал?
Про это все читал. Данные после смены collate обновил так
Но и теперь используя upper выводятся разные строки.
-
kdv
- Forum Admin
- Сообщения: 6595
- Зарегистрирован: 25 окт 2004, 18:07
Сообщение
kdv » 12 май 2006, 15:13
Но и теперь используя upper выводятся разные строки.
я бы и в третий раз мог повторить про последствия ковыряния таблиц...
в общем, пересоздавай БД заново, заливай имеющиеся данные. IBPump, через скрипт в IBExpert, и т.п.
-
Hadroran
- Сообщения: 39
- Зарегистрирован: 22 фев 2005, 10:23
Сообщение
Hadroran » 15 май 2006, 15:09
Ну нихрена не получается
Сделал скрипт
Код: Выделить всё
SET SQL DIALECT 3;
SET NAMES WIN1251;
CREATE DATABASE 'localhost:C:\proba.gdb'
USER 'SYSDBA' PASSWORD 'masterkey'
PAGE_SIZE 16384
DEFAULT CHARACTER SET WIN1251;
CREATE TABLE TESTCHAR(
ID INTEGER NOT NULL PRIMARY KEY,
NAME1 VARCHAR(30),
NAME2 VARCHAR(30) COLLATE PXW_CYRL);
Занес данные А,Б,В,а,б,в.
На запрос
Код: Выделить всё
SELECT * FROM TESTCHAR WHERE UPPER(NAME1 COLLATE PXW_CYRL) = 'А'
Ошибка Cannot transliterate...
Работает если DEFAULT CHARACTER SET NONE, но при этом не реагирует на UPPER.
Что делать:?:
-
kdv
- Forum Admin
- Сообщения: 6595
- Зарегистрирован: 25 окт 2004, 18:07
Сообщение
kdv » 15 май 2006, 15:47
при коннекте (до него) указал win1251?
я ж сказал - читать внимательно.
чем ты с базой работаешь?
-
Hadroran
- Сообщения: 39
- Зарегистрирован: 22 фев 2005, 10:23
Сообщение
Hadroran » 15 май 2006, 15:49
при коннекте не указал, ща попробую.
Delphi, IBExpert я так понял?
-
Hadroran
- Сообщения: 39
- Зарегистрирован: 22 фев 2005, 10:23
Сообщение
Hadroran » 15 май 2006, 15:52
Все, все я просто олень.
lc_ctype=WIN1251 при коннекте и все дела.