abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 12:44 | Nová verze

    Byla vydána nová verze 5.5 (novinky) skriptovacího jazyka Lua (Wikipedie). Po pěti a půl letech od vydání verze 5.4.

    Ladislav Hagara | Komentářů: 0
    včera 23:44 | Nová verze

    Byla vydána nová verze 5.4.0 programu na úpravu digitálních fotografií darktable (Wikipedie). Z novinek lze vypíchnout vylepšenou podporu Waylandu. Nejnovější darktable by měl na Waylandu fungovat stejně dobře jako na X11.

    Ladislav Hagara | Komentářů: 0
    21.12. 05:00 | Nová verze

    Byla vydána beta verze Linux Mintu 22.3 s kódovým jménem Zena. Podrobnosti v přehledu novinek a poznámkách k vydání. Vypíchnout lze, že nástroj Systémová hlášení (System Reports) získal mnoho nových funkcí a byl přejmenován na Informace o systému (System Information). Linux Mint 22.3 bude podporován do roku 2029.

    Ladislav Hagara | Komentářů: 2
    21.12. 01:55 | Nová verze

    GNU Project Debugger aneb GDB byl vydán ve verzi 17.1. Podrobný přehled novinek v souboru NEWS.

    Ladislav Hagara | Komentářů: 0
    19.12. 17:22 | IT novinky

    Josef Průša oznámil zveřejnění kompletních CAD souborů rámů tiskáren Prusa CORE One a CORE One L. Nejsou vydány pod obecnou veřejnou licenci GNU ani Creative Commons ale pod novou licencí OCL neboli Open Community License. Ta nepovoluje prodávat kompletní tiskárny či remixy založené na těchto zdrojích.

    Ladislav Hagara | Komentářů: 14
    19.12. 17:00 | Komunita

    Nový CEO Mozilla Corporation Anthony Enzor-DeMeo tento týden prohlásil, že by se Firefox měl vyvinout v moderní AI prohlížeč. Po bouřlivých diskusích na redditu ujistil, že v nastavení Firefoxu bude existovat volba pro zakázání všech AI funkcí.

    Ladislav Hagara | Komentářů: 1
    19.12. 10:11 | IT novinky

    V pořadí šestou knihou autora Martina Malého, která vychází v Edici CZ.NIC, správce české národní domény, je titul Kity, bity, neurony. Kniha s podtitulem Moderní technologie pro hobby elektroniku přináší ucelený pohled na svět současných technologií a jejich praktické využití v domácích elektronických projektech. Tento knižní průvodce je ideální pro každého, kdo se chce podívat na současné trendy v oblasti hobby elektroniky, od

    … více »
    Ladislav Hagara | Komentářů: 10
    19.12. 03:11 | Komunita

    Linux Foundation zveřejnila Výroční zprávu za rok 2025 (pdf). Příjmy Linux Foundation byly 311 miliónů dolarů. Výdaje 285 miliónů dolarů. Na podporu linuxového jádra (Linux Kernel Project) šlo 8,4 miliónu dolarů. Linux Foundation podporuje téměř 1 500 open source projektů.

    Ladislav Hagara | Komentářů: 0
    19.12. 02:11 | Zajímavý článek

    Jean-Baptiste Mardelle se v příspěvku na blogu rozepsal o novinkám v nejnovější verzi 25.12.0 editoru videa Kdenlive (Wikipedie). Ke stažení také na Flathubu.

    Ladislav Hagara | Komentářů: 0
    19.12. 02:00 | Nová verze

    OpenZFS (Wikipedie), tj. implementace souborového systému ZFS pro Linux a FreeBSD, byl vydán ve verzi 2.4.0.

    Ladislav Hagara | Komentářů: 0
    Kdo vám letos nadělí dárek?
     (27%)
     (2%)
     (13%)
     (2%)
     (2%)
     (2%)
     (11%)
     (27%)
     (16%)
    Celkem 56 hlasů
     Komentářů: 16, poslední včera 23:13
    Rozcestník

    Dotaz: Perl - dbi a utf

    pek avatar 3.12.2009 16:29 pek | skóre: 20
    Perl - dbi a utf
    Přečteno: 646×
    Snažím se přesunout instalaci RT z MySQL na PostgreSQL pomocí perlového skriptu.
    #!/usr/bin/perl -w 
    
    use strict;
    use DBI;
    
    my $new_handle = DBI->connect("dbi:Pg:dbname=rtdb",'rtuser','****');
    
    $new_handle->{pg_enable_utf8}=1;
    $new_handle->do("SET client_encoding TO 'UTF8'");
    
    my $old_handle = DBI->connect("dbi:mysql:dbname=rtdb",'rtuser','****');
    $old_handle->do("SET NAMES 'utf8'");
    $old_handle->do("SET CHARACTER SET 'utf8'");
    
    my @tables = qw/Attachments/; 
    
    foreach my $table (@tables) {
      print "Migrating $table...\n";
      # Find all the rows in the table
      my $sth = $old_handle->prepare("SELECT * FROM $table") || die $@; 
      $sth->execute || die $@; 
      copy_table_rows($table, $sth);
    }
    
    sub copy_table_rows {
      my $table = shift;
      my $sth = shift;
    
      while (my $row = $sth->fetchrow_hashref) {
        my @keys;
        my @values;
        my @placeholders;
        foreach my $key (keys %$row) {
          push @keys, $key;
          push @values, $row->{$key};
          push @placeholders, '?';
        }   
    
        my $insert = "INSERT into $table (".join(',',@keys).") VALUES (".join(',',@placeholders).")\n";
        my $sth= $new_handle->prepare($insert) || die  $@; 
        $sth->execute(@values) || die $@  . "\n ".join(",",@values);
      }
    }
    
    $old_handle->disconnect();
    $new_handle->disconnect();
    Ten skončí s chybou:
    DBD::Pg::st execute failed: ERROR:  invalid byte sequence for encoding "UTF8": 0xed6d2c
    HINT:  This error can also happen if the byte sequence does not match the encoding expected by the server, which is controlled by "client_encoding". at ./rt3-on-mysql-to-pg.pl line 45.
    Use of uninitialized value $values[2] in join or string at ./rt3-on-mysql-to-pg.pl line 45.
    A v tabulce je jen prvních zhruba 30 záznamů.

    Podle chybové hlášky, z dokumentace a pomocí google jsem získal dojem, že problém bude ve špatném kódování vkládaných znaků do databáze Pg. Nemůžu ale přijít na způsob, jak to opravit. Nastavení client_encoding, NAMES ani CHARACTER SET nepomohlo. Co ještě můžu vyzkoušet?

    Odpovědi

    3.12.2009 21:15 pht | skóre: 48 | blog: pht
    Rozbalit Rozbalit vše Re: Perl - dbi a utf
    A co zkusit encode/decode, nebo to dělá za vás DBI? UTF8 není interní reprezentace perlu a tudíž při nějaké manipulaci může stringy zmršit.
    In Ada the typical infinite loop would normally be terminated by detonation.
    pek avatar 4.12.2009 10:07 pek | skóre: 20
    Rozbalit Rozbalit vše Re: Perl - dbi a utf
    V tom to asi bude. Upravil jsem kód pro načítání dat:
    push @values, decode("utf8",$row->{$key});
    a vkládání zpět do databáze:
    $sth->execute(@values) || die $@  . "\n ".encode("utf8",join(",",@values));
    Skript zpracuje úspěšně 3500 řádků v tabulce (předtím 30). Pak ale opět skončí s chybou:
    DBD::Pg::st execute failed: ERROR:  invalid byte sequence for encoding "UTF8": 0xfd
    4.12.2009 12:09 petr_p | skóre: 59 | blog: pb
    Rozbalit Rozbalit vše Re: Perl - dbi a utf
    A není prostě problém v tom, že některá data ve zdrojové databázi prostě nejsou UTF-8. Pak totiž zcela logicky převod selže. Zjistěte si kontext chybných dat, podívejte se do zdrojové databáze jiným prostředkem, co tam opravdu máte uloženo.
    3.12.2009 21:26 Petr Šobáň | skóre: 80 | blog: soban | Olomouc
    Rozbalit Rozbalit vše Re: Perl - dbi a utf
    Co use locale; ? A nastavit na UTF8 ?
    3.12.2009 21:35 Petr Šobáň | skóre: 80 | blog: soban | Olomouc
    Rozbalit Rozbalit vše Re: Perl - dbi a utf
    Případně nepomůže Perl: problém s češtinou v regexpu
    pek avatar 4.12.2009 10:18 pek | skóre: 20
    Rozbalit Rozbalit vše Re: Perl - dbi a utf
    Přidání:
    use locale;
    binmode(STDOUT, ":encoding(UTF-8)");
    binmode(STDIN, ":encoding(UTF-8)");
    ani nastavení LANG=en_US.UTF-8 a LC_ALL=en_US.UTF-8 nepomohlo.
    pek avatar 8.12.2009 12:35 pek | skóre: 20
    Rozbalit Rozbalit vše Re: Perl - dbi a utf

    Vypadá to na problém se sloupcem Content. Když ho vyřadím z exportovaných dat, tak se import povede.

    my $sth = $old_handle->prepare("SELECT Created,id,TransactionId,Parent,MessageId,Subject,Filename,ContentType,ContentEncoding,Headers,Creator,Created FROM $table) || die $@;
    

    Sloupec Content je v MySQL typu longblob v PostgreSQL typu bytea. Takže otázka zní: Jak dostat v perlu data ze sloupce longblob do sloupce typu bytea?

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.