Запросы, планы, оптимизация запросов, ...
Модераторы: kdv, CyberMax
-
vsg
- Сообщения: 4
- Зарегистрирован: 22 мар 2006, 20:38
Сообщение
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
Спасибо
заработало
-
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 поля заполняются нормально
-
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
Спасибо, я нашёл ошибку!
-
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 для использования в гриде.