From wk at hot.ee Thu Apr 2 06:22:38 2009 From: wk at hot.ee (WK) Date: Thu, 2 Apr 2009 16:22:38 +0300 Subject: [Tallinn-pm] lidbdb-mysql-perl ja UTF8 Message-ID: Terr! Rikuks pisut vaikust siin. Nimelt on mul pisuke probleem, mille kohta tegin h?? mitu aastat tagasi veateavituse: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=318058 L?hidalt kordan siin. Situatsioon on siis selline, et serveris (minul Debian) on keeratud kogu s?steem kasutama UTF8-i, Mysql kasutab vaikimisi utf8 ja k?ik andmebaasid ja tabelid kasutavad UTF8. Miskip?rast alates lidbdb-mysql-perl versioonist 2.9007-1 ei saa enam Mysqlist korralikult k?tte UTF8 kodeeritud andmeid. Variatsioone on olnud erinevaid, aga praeguse seisuga on v?hemasti ? ja ? valesti kodeeritud. Mingitel tingimuste on esinenud seda, et k?ik kahebaidiste m?rkide m?lemad baidid on omakorda kahebaidisteks kodeeritud, nagu oleks tegu olnud miski ISO-kooditabeli m?rkidega. Praegune s?num siinse listi kontekstis: mul on valmistatud testimiseks lihtne n?idis, ?kki viitsite oma masinates proovida , kas saate viisaka tulemuse v?i mitte. Kuidagi ??rmiselt veidralt k?lab v?imalus, et kusagil mujal seda h?irivat probleemi ei esine, seep?rast loodan ikka veel, et viga on minu s?steemis, mitte lidbdb-mysql-perl-is. ?ige v?ljund peaks siis olema: 1 ?? ?? Script testimiseks (v?ljakommenteeritud ridadest v?ite v?lja lugeda, mida ma raviks proovinud olen) on selline, andmebaasi loomiseks vajalik skelett ja andmerida sabas: #!/usr/bin/perl # -C63 use strict; use warnings; # use utf8; # use locale; # binmode STDIN, ":utf8"; # binmode STDOUT, ":utf8"; use DBI; my ($db, $user, $password, $hostname, $data_source) = (); $db = "utf8"; $user = ""; $password = ""; $hostname = "localhost"; $data_source = "DBI:mysql:database=$db;host=$hostname"; my $dbh = DBI->connect($data_source, $user, $password) || die "ei saa yhendust\n"; my (@data) = $dbh->selectrow_array("SELECT * FROM utf8.utf8 LIMIT 1"); print "@data\n"; __END__ Andmebaasi ja tabeli loomiseks: CREATE database utf8; use utf8 SET character_set_client = utf8; CREATE TABLE `utf8` ( `id` int(10) unsigned NOT NULL auto_increment, `string` varchar(255) collate utf8_estonian_ci NOT NULL default '', PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=35610 DEFAULT CHARSET=utf8 COLLATE=utf8_estonian_ci; Rida andmeid tabelisse: INSERT INTO utf8.utf8 (id, string) values (1, '?? ??'); Andke siis tulemustest teada. -- K?ike h??d, WK