Страница 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
Спасибо
заработало

Добавлено: 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 поля заполняются нормально

Добавлено: 29 май 2006, 18:52
kdv
все эти глюки - причина скакания в базу из разных инструментов то с указанием чарсета коннекта, то без. Данные, метаданные... если все создавалось вперемешку, то так и будет глючить. Особенно если ковыряли системные таблицы на предмет "смены чарсета". Если было все единообразно, то тогда глюков нет никаких.
А еще чаще - банальная ошибка в виде стирания параметра чарсета в IBDatabase при каких-нибудь манипуляциях с заполнением IBDatabase.Params.
p.s. collate win1251 - это collate по умолчанию, его указывать не надо. Как не надо указывать чарсет у создаваемого столбца, если база уже в default win1251.
"единообразно" - это база создана с win1251, и затем у всех инструментов, компонент и драйверов при работе указано win1251. Ничего экстраординарного.
Добавлено: 29 май 2006, 21:27
alecsar
Спасибо, я нашёл ошибку!

Добавлено: 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 для использования в гриде.