Страница 1 из 1

проблема select и поля с русскии буквами

Добавлено: 22 мар 2006, 21:05
vsg
Доброе время суток.
есть FB 1.5.3 на винде и 2 таблицы
таб 1:

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

SET SQL DIALECT 3;
SET NAMES WIN1251;
CREATE TABLE TMP1 (
    SNAME_FIELD  VARCHAR(128)
);
таб 2:

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

SET SQL DIALECT 3;
SET NAMES WIN1251;
CREATE TABLE TMP2 (
    SNAME_FIELD  VARCHAR(128)
);
поле таб 1 заполнены русскими именами( ВАСЯ; ПЕТЯ и т.п.)
делаю

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

insert into TMP2 select sname_field from TMP1;
получаю:

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

Arithmetic overflow or division by zero has occurred.
arithmetic exception, numeric overflow, or string truncation.
для полей стоит DEFAULT CHARSET win1251; COLLATE win1251
Подскажите, что подправить. (http://www.ibase.ru/devinfo/ibrusfaq.htm - читал)

Добавлено: 22 мар 2006, 21:07
Merlin
Не тем местом читал. Чарсет в параметрах соединения тоже надо указать. Причём ДО соединения, а не после.

Добавлено: 22 мар 2006, 21:15
vsg
делал
set names win1251;
insert into TMP2 select sname_field from TMP1;
- ругается на NAMES

Добавлено: 22 мар 2006, 21:27
kdv
кто ругается? set names xxx - это команда ISQL, а не сервера. Если ты ее еще где пытаешься применить - не факт что сработает.

и надо:
set names...
connect
insert

Добавлено: 22 мар 2006, 21:35
vsg
я из IB Expert работаю...
там кодировка уже указывается при коннекте к базе (win1251)

Добавлено: 22 мар 2006, 23:33
vsg
эмпирическим путем выяснено, что какая-то запись(и) все гадит - таблица была импортирована из ACCESS. (обнаружены кавычки и перевод строки). Наверняка что-то еще есть типа этого. Можно ли определить какая строка все рушит? (всего 14500 записей)

Добавлено: 22 мар 2006, 23:45
Merlin
Зависит от того, на чём программы пишешь. Вариант, который должен сработать пожалуй везде - сделай два запроса мастер-деталь, в мастере тащи только ID, в детали всё остальное. Мастер тогда где угодно отселектится целиком, при навигации на проблемные записи деталь будет давать эксепшн.

Добавлено: 28 мар 2006, 17:23
ZiBiT
Спасибо
заработало :lol:

Добавлено: 29 май 2006, 15:37
alecsar
У меня примерно такая же проблема как и у vsq : Пропадают русские буквы по пути на базу данных(FB 1.5.3);
IBDatabase.Params:

...
lc_ctype=WIN1251

Ввожу по английски - запись появляется в базе данных, по русски - изменяется генератор но не появляется новая сторока как будто не вводил.
Параметры поля:
Name VARCHAR(255) CHARACTER SET WIN1251
COLLATE WIN1251

для базы:
DEFAULT CHARACTER SET WIN1251:
Самое странное что при вводе того же самого из IBExpert поля заполняются нормально :cry:

Добавлено: 29 май 2006, 18:52
kdv
все эти глюки - причина скакания в базу из разных инструментов то с указанием чарсета коннекта, то без. Данные, метаданные... если все создавалось вперемешку, то так и будет глючить. Особенно если ковыряли системные таблицы на предмет "смены чарсета". Если было все единообразно, то тогда глюков нет никаких.

А еще чаще - банальная ошибка в виде стирания параметра чарсета в IBDatabase при каких-нибудь манипуляциях с заполнением IBDatabase.Params.

p.s. collate win1251 - это collate по умолчанию, его указывать не надо. Как не надо указывать чарсет у создаваемого столбца, если база уже в default win1251.
"единообразно" - это база создана с win1251, и затем у всех инструментов, компонент и драйверов при работе указано win1251. Ничего экстраординарного.

Добавлено: 29 май 2006, 21:27
alecsar
Спасибо, я нашёл ошибку! :D

Добавлено: 11 авг 2006, 13:15
aaa3d
в догонку.....

имеется база firebird. кодировка win1251.
наш офис в ближайших планах переезжает на Linux с виндов.
соответственно переезда собственно базы, клиентского софта и
администратора (меня любимого).
основная клиентская софтина корректно работает под wine.
а проблема есть у меня как у админа базы - не понимаю как из
линуксового Flamerobin'а (типа IbExpert'а) посмотреть поля базы по русски, а не крякозябликами.
никогда особо не ковырялся с кодировками, всегда работал в винде, и идей у меня не возникает а времени мало блин

есть методы? (кодировки при соединении я уже все перепробовал вроде)

Добавлено: 11 авг 2006, 13:27
Dimitry Sibiryakov
Либо запускай Малиновку в локали 1251 или ставь в параметрах соединения koi8r (или какая там у тебя локаль в линухе настроена) и молись что сервер ее знает и может между ними перекодировывать.

Добавлено: 11 авг 2006, 13:28
aaa3d
извиняюсь за собственное недомыслие
дело решилось выбором шрифта с кодировкой win1251 для использования в гриде.