[Tallinn-pm] lidbdb-mysql-perl ja UTF8

WK wk at hot.ee
Thu Apr 2 06:22:38 PDT 2009


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


More information about the Tallinn-pm mailing list