Модераторы: Akella
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Кодировка символов Windows.WIN1251<>Linux.WIN1251? FirebirdSS 2.0.3 release 
:(
    Опции темы
tishaishii
Дата 5.4.2008, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Создатель
***


Профиль
Группа: Завсегдатай
Сообщений: 1262
Регистрация: 14.2.2006
Где: Москва

Репутация: нет
Всего: 8



БД на Windows с кодировкой WIN1251. Точно такая же БД на Linux с той же кодировкой (скопировано по сети методом CTRL+C, CTRL+V).

Подключаюсь к БД на Windows и перебрасываю информацию в БД Linux.
UDF format элементарно удаляет лишние пробелы.
Скрипт работает на Linux:
Код

use DBI;
use locale;

my@row;
my$idbh=DBI->connect('dbi:InterBase:db=E:/Realter/server/database;ib_dialect=3;ib_charset=win1251;host=192.168.10.5', 'SYSDBA', 'masterkey');
my$odbh=DBI->connect('dbi:InterBase:db=/opt/firebird/bases/database;ib_dialect=3;ib_charset=win1251', 'sysdba', 'masterkey');
my$sel=$idbh->prepare(<<'.');
SELECT format(KLIENT), format(DOP_KLIENT), K_KLIENT FROM KLIENT
.
my$upd=$odbh->prepare(<<'.');
UPDATE KLIENT SET KLIENT=format(?), DOP_KLIENT=format(?) WHERE K_KLIENT=?
.
$sel->execute;
while(@row=$sel->fetchrow_array) {
    $upd->execute(@row);
}
$upd->finish;
$sel->finish;
$odbh->disconnect;
$idbh->disconnect;

После данной манипуляции  поля KLIENT на Linux кракозябрятся.

Если при обновлении не использовать UDF format, т.е:
Код
SELECT KLIENT, DOP_KLIENT, K_KLIENT FROM KLIENT
.........
UPDATE KLIENT SET KLIENT=?, DOP_KLIENT=? WHERE K_KLIENT=?
---а затем
UPDATE KLIENT SET KLIENT=format(KLIENT), DOP_KLIENT=format(DOP_KLIENT)

всё будет как надо. Я чего-то не понимаю: в какой кодировке на Linux приходят данные и почему за один присест нельзя сразу обновить всё как надо?

Это сообщение отредактировал(а) tishaishii - 5.4.2008, 12:29
PM MAIL ICQ Skype   Вверх
jsa
Дата 6.4.2008, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 704
Регистрация: 19.1.2006
Где: Новосибирск

Репутация: 1
Всего: 20



вполне может быть что здесь в дело вмешивается LANG, наверное мало одной кодировки базы, надо еще и кодировку окружения правильно выставлять
попробуй set names win1251 
вот нашел
Цитата

When a client application, such as isql, connects to a database, it may have its own
character set requirements. The server providing database access to the client does not
know about these requirements unless the client specifies them. The client application
specifies its character set requirement using the SET NAMES statement before it connects
to the database.

SET NAMES specifies the character set the server should use when translating data from
the database to the client application. Similarly, when the client sends data to the
database, the server translates the data from the client’s character set to the database’s
default character set (or the character set for an individual column if it differs from the
database’s default character set).

For example, the following isql command specifies that isql is using the DOS437 character
set. The next command connects to the europe database created above, in “Specifying a
Character Set for a Column in a Table”:

SET NAMES DOS437;
CONNECT ’europe.gdb’ USER ’JAMES’ PASSWORD ’U4EEAH’;


Это сообщение отредактировал(а) jsa - 6.4.2008, 15:39


--------------------
Все мы, на перине с песней, строим небо на земле © Ю. Шевчук
PM MAIL ICQ   Вверх
Akella
Дата 6.4.2008, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 20
Всего: 329



Цитата(tishaishii @  5.4.2008,  12:28 Найти цитируемый пост)
скопировано по сети методом CTRL+C, CTRL+V

думаю, что лучше через gbak "копировать"
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Interbase"
Alex

Обязательно указание:

1. Версию InterBase (Firebird, Yaffil)

2. Способа доступа (ADO, BDE, IBX и т.д.)

  • КАК ПРАВИЛЬНО ОФОРМИТЬ КОД - ЗДЕСЬ
  • КАК ПРАВИЛЬНО УКАЗАТЬ ТЕКСТ ОШИБКИ - ЗДЕСЬ
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • FAQ раздела лежит здесь!

Если Вам понравилась атмосфера форума, заходите к нам чаще! С Уважением, Akella.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Firebird, Interbase | Следующая тема »


 




[ Время генерации скрипта: 0.0456 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.