I
Izver84
Здрасте.
Есть lдосовский дбф (866) s_produc файл.
мне надо перенести данные из дбф в postgres.
кодировка базы в postgres utf8.
выдает ошибку
можно ли при конекте xbase указать кодировку дбф или обязательно изменить кодировку дбф на utf8?
Есть lдосовский дбф (866) s_produc файл.
мне надо перенести данные из дбф в postgres.
кодировка базы в postgres utf8.
Код:
use DBD::Xbase;
use DBI;
# имя базы данных
$dbname = "sbit";
# имя пользователя
$username = "postgres";
# пароль
$password = "syrus";
# имя или IP адрес сервера
$dbhost = "192.168.4.30";
# порт
$dbport = "5432";
# терминал
$dbtty = "utf8";
my $dir = "s://molds//copy";
my $xbase_dbh = DBI->connect("DBI:XBase:$dir" undef undef {RaiseError =>1});
$dbh = DBI->connect("dbi:PgPP:dbname=$dbname;host=$dbhost;port=$dbport;tty=$dbtty" "$username" "$password"
{PrintError => 0});
if ($DBI::err != 0) {
print $DBI::errstr . "\n";
exit($DBI::err);
}
my $sel = "select kg77 KGTR KOLT KPKG KVP KVPR2 KZPR KZPRN NVPR NVPRK OBUPAK SKLAD VESB VESN ZAPRET ED_IZM PR_NDS SXRAN MOROZ KODGP KODPRZ KODUPAK KODPR_PO
YES_BUGET SKLAD_I YES_REALIZ UZINA NZPR NZPRN PZA PZAV YES_TECI YES_GRAMM KVPR3 KVPR4 KGTR2 DATS ZAIAVKA from s_produc.dbf";
my $table = new XBase "dats.dbf" or die XBase->errstr;
my $sel_csr = $xbase_dbh->prepare($sel);
$sel_csr->execute();
@st=();
while ( @row = $sel_csr->fetchrow_array )
{
foreach $st(@row)
{push(@st $st."\t");}
$qw="Insert into s_product_new
(kg77 kgtr KOLT KPKG KVP KVPR KZPR KZPRN NVPR NVPRK OBUPAK SKLAD VESB VESN ZAPRET ED_IZM PR_NDS SXRAN tip KODGP KODPRZ KODUPAK KODPR_PO YES_BUDGET SKLAD_I YES_REALIZ ceh NZPR NZPRN PZA PZAV YES_TECI YES_GRAMM KVPR2 KVPR3 KGTR2 DATS ZAIAVKA)
values($st[-38] $st[-37] $st[-36] $st[-35] $st[-34] substr('$st[-33]' 1 10) substr('$st[-32]' 1 2) substr('$st[-31]' 1 4) substr('$st[-30]' 1 20)
substr('$st[-29]' 1 11) $st[-28] $st[-27] $st[-26] $st[-25] $st[-24] substr('$st[-23]' 1 3) $st[-22] $st[-21] $st[-20] $st[-19] $st[-18] $st[-17]
$st[-16] $st[-15] $st[-14] $st[-13] $st[-12] substr('$st[-11]' 1 20) substr('$st[-10]' 1 20) $st[-9] $st[-8] $st[-7] $st[-6] substr('$st[-5]' 1 6)
substr('$st[-4]' 1 4) $st[-3] substr('$st[-2]' 1 6) $st[-1])";
$pgb = $dbh->prepare($qw) or die "Prepare: $qw" $dbh->errstr;
$pgb->execute or die "Executing: $qw" $pgb->errstr;
}
выдает ошибку
Код:
Executing: Insert into s_product_new
(kg77 kgtr KOLT KPKG KVP KVPR KZPR KZPRN NVPR NVPRK OBUPAK SKLAD VESB VESN ZAPRET ED_IZM
PR_NDS SXRAN tip KODGP KODPRZ KODUPAK KODPR_PO YES_BUDGET SKLAD_I YES_REALIZ ceh NZPR
NZPRN PZA PZAV YES_TECI YES_GRAMM KVPR2 KVPR3 KGTR2 DATS ZAIAVKA)
values(55 99 1 1 0 substr('0065014400 ' 1 10)
substr('73 ' 1 2) substr('164 ' 1 4) substr('RГОЛУБ КАПУСТ ЛИСТ' 1 20)
substr('ГОЛКАПЛИСТ ' 1 11) 0.4 4 0.4 0.4 0 substr('BUC ' 1 3) 20 2160
1 0 999 0 0 0 0 0 0 substr('LEVADA ' 1 20)
substr('RГОЛУБ КАПУСТ ЛИСТ ' 1 20) 1 0 0 0 substr(' ' 1 6)
substr(' ' 1 4) 0 substr('091014 ' 1 6) 1 )
ERROR: invalid byte sequence for encoding "UTF8": 0x83
можно ли при конекте xbase указать кодировку дбф или обязательно изменить кодировку дбф на utf8?