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

Запросы, планы, оптимизация запросов, ...

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

Ответить
vsg
Сообщения: 4
Зарегистрирован: 22 мар 2006, 20:38

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

Сообщение vsg » 22 мар 2006, 21:05

Доброе время суток.
есть 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 - читал)

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 22 мар 2006, 21:07

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

vsg
Сообщения: 4
Зарегистрирован: 22 мар 2006, 20:38

Сообщение vsg » 22 мар 2006, 21:15

делал
set names win1251;
insert into TMP2 select sname_field from TMP1;
- ругается на NAMES

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

Сообщение kdv » 22 мар 2006, 21:27

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

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

vsg
Сообщения: 4
Зарегистрирован: 22 мар 2006, 20:38

Сообщение vsg » 22 мар 2006, 21:35

я из IB Expert работаю...
там кодировка уже указывается при коннекте к базе (win1251)

vsg
Сообщения: 4
Зарегистрирован: 22 мар 2006, 20:38

Сообщение vsg » 22 мар 2006, 23:33

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

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 22 мар 2006, 23:45

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

ZiBiT
Сообщения: 35
Зарегистрирован: 28 мар 2006, 11:06

Сообщение ZiBiT » 28 мар 2006, 17:23

Спасибо
заработало :lol:

alecsar
Сообщения: 9
Зарегистрирован: 19 май 2006, 18:08

Сообщение alecsar » 29 май 2006, 15:37

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

...
lc_ctype=WIN1251

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

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

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

Сообщение kdv » 29 май 2006, 18:52

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

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

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

alecsar
Сообщения: 9
Зарегистрирован: 19 май 2006, 18:08

Сообщение alecsar » 29 май 2006, 21:27

Спасибо, я нашёл ошибку! :D

aaa3d
Сообщения: 69
Зарегистрирован: 23 ноя 2005, 11:06

Сообщение aaa3d » 11 авг 2006, 13:15

в догонку.....

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

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

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Сообщение Dimitry Sibiryakov » 11 авг 2006, 13:27

Либо запускай Малиновку в локали 1251 или ставь в параметрах соединения koi8r (или какая там у тебя локаль в линухе настроена) и молись что сервер ее знает и может между ними перекодировывать.

aaa3d
Сообщения: 69
Зарегистрирован: 23 ноя 2005, 11:06

Сообщение aaa3d » 11 авг 2006, 13:28

извиняюсь за собственное недомыслие
дело решилось выбором шрифта с кодировкой win1251 для использования в гриде.

Ответить