powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / И всетаки опять кодировка
25 сообщений из 33, страница 1 из 2
И всетаки опять кодировка
    #32380148
pole
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Arithmetic overflow or division by zero has occurred.
arithmetic exception, numeric overflow, or string truncation.
Cannot transliterate character between character sets.

По форуму поискал, посмотрел что нужно сделать чтоб такого не было, вроде все так и сделал везде, где можно кодировку для полей таблиц(в доменах) поставил win1251 collate тоже win1251, база по умолчанию тоже как надо

в IBExpert написал хранимку запускаю ввожу русское слово и на тебе :(

причем, что самое интересно если запустить отладчик процедуры и иницилизировать входной параметр с тем же самым русским словом то запрос выполняется !!!!!

была бы моя воля, никогда бы не стал связывться с interbase

люди помогите, сроки горят, процедуры километровые уже написаны
уже не знаю что делать
...
Рейтинг: 0 / 0
И всетаки опять кодировка
    #32380164
Фотография Zmeishe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Покажи процедурку и слово.
...
Рейтинг: 0 / 0
И всетаки опять кодировка
    #32380215
Фотография fedd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> в IBExpert написал хранимку запускаю ввожу русское слово и на тебе :(

в IBExpert в параметрах подклчения тоже нужно указать русский язык и кодировку - там где что-то вроде Registration info.

> была бы моя воля, никогда бы не стал связывться с interbase

кто ж тебя неволит?
...
Рейтинг: 0 / 0
И всетаки опять кодировка
    #32380261
aPT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Там может быть что угодно: слишком длинная строка, неправильное приведение типов, разные типы данных в базе и в запросе клиента...
Код в студию!!!
...
Рейтинг: 0 / 0
И всетаки опять кодировка
    #32380324
Фотография Zmeishe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aPTТам может быть что угодно: слишком длинная строка, неправильное приведение типов, разные типы данных в базе и в запросе клиента...

Вот, вот. Я с такой же проблемой только что столкнулся.
Написал процедуру - работает.
Через IBComparer синхронизировал с клиентской базой.
При вызове процедуры с клиента выдаёт эту самую ошибку.
Перекомпилировал в IBExpert - работает.
Проблема была в том, одному параметру(переменной) присваиваю значение в теле процедуры русскими буквами:
Param = 'Максимальное значение';
Вот на это и ругается после модификации через IBComparer,
и НЕ ругается после модификации через IBExpert. Теперь и клиент работать может.
...
Рейтинг: 0 / 0
И всетаки опять кодировка
    #32380350
Фотография fedd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zmeishe, а ты знаешь что в интербейсе тексты процедур хранятся в юникоде, а IBExpert его показывает и редактирует некорректно (как однобайтовую кодировку)?
...
Рейтинг: 0 / 0
И всетаки опять кодировка
    #32380422
Фотография Zmeishe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fedd, вполне возможно ты прав.
Но у меня IBExpert и показывает корректно (в смысле, что написал то и показывает), и редактирует корректно, и компилирует корректно, и работает корректно. И клиент не жалуется. После бэкап/ресторе тоже всё корректно.
Только после вмешательства IBComparer некорректности начинаются.
...
Рейтинг: 0 / 0
И всетаки опять кодировка
    #32380425
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
feddZmeishe, а ты знаешь что в интербейсе тексты процедур хранятся в юникоде, а IBExpert его показывает и редактирует некорректно (как однобайтовую кодировку)?
BLOB'у кодировка до лампады ;)
(на сегодняшний день)
...
Рейтинг: 0 / 0
И всетаки опять кодировка
    #32380436
Фотография fedd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий

а вот и нет!!!!!

там есть BLOB типа 1, и там можно указать кодировку! Проверено электроникой!
...
Рейтинг: 0 / 0
И всетаки опять кодировка
    #32380450
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
feddа вот и нет!!!!!
там есть BLOB типа 1, и там можно указать кодировку! Проверено электроникой!

Можно то оно можно, да только толку от этого 0%.
Серверу эта кодировка фиолетова ;)
Так что, не гони на IBExpert позазря. :)
...
Рейтинг: 0 / 0
И всетаки опять кодировка
    #32380458
Фотография fedd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может быть. то есть оно с русским текстом нормально скомпилировалось, и там в BLR оказалась нормальная русская строка?
я такого не решался пробовать. ан вот оно что....
...
Рейтинг: 0 / 0
И всетаки опять кодировка
    #32380466
Фотография Zmeishe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
feddтам есть BLOB типа 1, и там можно указать кодировку! Проверено электроникой!
А вот это уже интересно.
Похоже IBComparer устанавливает какую-то кодировку по умолчанию, а IBExpert нужную. Поэтому у Expert`a корректно, а у Comparer`a кривовато.
...
Рейтинг: 0 / 0
И всетаки опять кодировка
    #32380482
pole
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
процедура допустим такая

CREATE PROCEDURE TEST2 (
NAME VARCHAR(60) CHARACTER SET WIN1251)
RETURNS (
ID_ATD CHAR(10) CHARACTER SET WIN1251)
AS
begin
select ID_ATD
from asatd
where name_atd = :name
into :ID_ATD ;
suspend;
end


вот процедура которая дергает процедуру выше, но это для теста, на самом деле у меня процедура дергается из кода
CREATE PROCEDURE TEST
RETURNS (
ID_ATD CHAR(10) CHARACTER SET WIN1251)
AS
DECLARE VARIABLE NAME VARCHAR(60) CHARACTER SET WIN1251;
begin
name = "Зимбабве" ;
execute procedure test2(name) returning_values :ID_ATD ;
suspend;
end


ддл таблицы нужен ?
SET NAMES WIN1251;
CREATE TABLE ASATD (
ID_ATD D_PK_DM NOT NULL,
IDPARENT_ATD D_PK_DM,
ID_KLS D_PK_DM NOT NULL,
NAME_ATD D_NAME_MID_DM,
OKATO_ATD D_OKATO_DM,
GID_ATD D_GID_DM,
LEVEL_ATD D_ATETYPE_DM NOT NULL,
STATUS_ATD SMALLINT,
SQ_ATD NUMERIC(15,2),
PLANSH_ATD VARCHAR(255),
ID_GEOMAP CHAR(10) NOT NULL
);

пройдусь по доменам:
CREATE DOMAIN D_PK_DM AS
CHAR(10) CHARACTER SET WIN1251
COLLATE WIN1251

CREATE DOMAIN D_NAME_MID_DM AS
VARCHAR(60) CHARACTER SET WIN1251
COLLATE WIN1251

CREATE DOMAIN D_OKATO_DM AS
VARCHAR(16) CHARACTER SET WIN1251
COLLATE WIN1251

CREATE DOMAIN D_GID_DM AS
VARCHAR(40) CHARACTER SET WIN1251
COLLATE WIN1251

CREATE DOMAIN D_ATETYPE_DM AS
INTEGER


to fedd:
>кто ж тебя неволит?
меня ни кто не неволит :) меня неволит "что" ! а "что" - это уже работающая субд на interbase

ps попробовал из кода простым запросом это сделать все проходит на ура
...
Рейтинг: 0 / 0
И всетаки опять кодировка
    #32380489
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
feddможет быть. то есть оно с русским текстом нормально скомпилировалось, и там в BLR оказалась нормальная русская строка?
я такого не решался пробовать. ан вот оно что....
Если при коннекте указана кодировка WIN1251 , а данные пишутся в поле с кодировкой UNICODE_FSS , то сервер автоматом преодразует входящие данные в UNICODE. Если же при подключении кодировку не указать, и начать пихать данные в это же UNICODE-поле, то преобразование происходить не будет . И данные запишутся as ist. Т.е. вместо мультибайтовых символов запишутся однобайтовые. Ну, а дальше, сами представляете как оно и чего...
...
Рейтинг: 0 / 0
И всетаки опять кодировка
    #32380494
Фотография fedd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а Зимбабве не должно быть в одинарных ковычках? ;)
...
Рейтинг: 0 / 0
И всетаки опять кодировка
    #32380497
pole
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to fedd:
должно, но это сути дела не меняет, я и так и так пробовал
...
Рейтинг: 0 / 0
И всетаки опять кодировка
    #32380508
Фотография Zmeishe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я проверил. У этого IBComparer вообще нет параметра кодировки при подключении к БД. Поэтому и кривоватость возникает.
Pole, а ты при подключении к БД кодировку указать не забыл???
...
Рейтинг: 0 / 0
И всетаки опять кодировка
    #32380511
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pole
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE PROCEDURE TEST 
RETURNS ( 
ID_ATD CHAR( 10 ) CHARACTER SET WIN1251) 
AS 
DECLARE VARIABLE NAME VARCHAR( 60 ) CHARACTER SET WIN1251; 
begin 
name =  "Зимбабве"  ; 
execute procedure test2(name) returning_values :ID_ATD ; 
suspend; 
end 


А квалификатор поставить мы не умеем?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE PROCEDURE TEST 
RETURNS ( 
ID_ATD CHAR( 10 ) CHARACTER SET WIN1251) 
AS 
DECLARE VARIABLE NAME VARCHAR( 60 ) CHARACTER SET WIN1251; 
begin 
name = _WIN1251 'Зимбабве' ; 
execute procedure test2(name) returning_values :ID_ATD ; 
suspend; 
end 


И проверь, что у тебя в регистрационных параметрах базы в IBExpert
задана кодировка подключения.
...
Рейтинг: 0 / 0
И всетаки опять кодировка
    #32380514
Фотография fedd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pole, сорри, тут типа подтопик в твоем топике ;)\r
\r
Мимопроходящий\r
мои эксперименты показывают, что ты не прав. вот здесь я описывал один из этапов - /topic/32338&hl=#217554\r
\r
можно вбить русские буквы в эксперте в юникодное поле (блоб-не блоб - не важно), но они так и будут лежать там по одному байту на букву\r
\r
Zmeishe \r
\r
а про подключение я уже спрашивал ;))
...
Рейтинг: 0 / 0
И всетаки опять кодировка
    #32380538
Фотография Zmeishe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Упс!
name = _WIN1251 'Зимбабве' ;
Я у себя поставил и у IBComparer`a мозги на место встали!!! Лепота!
...
Рейтинг: 0 / 0
И всетаки опять кодировка
    #32380540
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedd, в том посте ты пишешь:
feddВ таблице одно поле charset unicode_fss. Так вот, если я ввожу в таблицу английские буквы, они в ibexpertе отображаются также, а если русские, то в ibexpertе они превращаются в мусор, который и скопировать сюда страшно.

Расскажу "в чем беда твоих обид" ;)
VCL-контролы которые использованы в IBExpert'е не умеют работать с UNICODE.
Намёк понятен? ;)
...
Рейтинг: 0 / 0
И всетаки опять кодировка
    #32380558
Фотография fedd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedd сегодня, 14:28 в юникоде, а IBExpert его показывает и редактирует некорректно (как однобайтовую кодировку)...

Мимопроходящий сегодня, 15:06...не гони на IBExpert позазря. :)

Мимопроходящий сегодня, 15:39VCL-контролы которые использованы в IBExpert'е не умеют работать с UNICODE.

Мимопроходящий, мы стобой спорим или соглашаемся, я не понил???
...
Рейтинг: 0 / 0
И всетаки опять кодировка
    #32380576
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
feddв юникоде, а IBExpert его показывает и редактирует некорректно (как однобайтовую кодировку)...
Ысчо раз читаем мой пост
...
Рейтинг: 0 / 0
И всетаки опять кодировка
    #32380582
pole
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
нет нет нет, погодите

про квалификатор: я его ставил до того как сюда запостил и все проходило, но есть одно большое "НО", я же процедуры дергаю из программного кода, там про квалификаторы ничего не известно :)

в регпараметрах базы в ibexpert под полем role, charset замореженный стоит
...
Рейтинг: 0 / 0
И всетаки опять кодировка
    #32380584
Фотография fedd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ааааааааа!

дошло!!!

спасибо!

и за это

name = _WIN1251 'Зимбабве' ;

спасибо - не знал про такую штуку. где она описана?
...
Рейтинг: 0 / 0
25 сообщений из 33, страница 1 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / И всетаки опять кодировка
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]