hi,
Charset, Collation muss stimmen und das Programm muss mit MySQL per UTF-8 kommunizieren (SET NAMES ...), dann passt alles rein.
Zur Demo hab eich mal eine Tabelle angelegt:
CREATE TABLE `test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`text` varchar(10) COLLATE utf8_unicode_ci DEFAULT '',
`datum` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
Anstelle "set names ..." gibt es in Perl ein spezielles Attribute fürn Connect:
# Kommunikation per UTF-8
my $dbh = DBI->connect(
"DBI:mysql:myweb:localhost:3306",
'', '',
{RaiseError => 1, PrintError => 0, mysql_enable_utf8 => 1}
);
$dbh->do('truncate test');
$dbh->do( qq(insert into test(text)values('1234567€€€')) );
my $s = $dbh->selectrow_array(qq(select text from test));
use bytes; # binmode STDOUT
print $s; # 1234567€€€
Und siehe da, die drei EUROs passen rein, macht zusammen 10 Zeichen, wie vereinbart. Ohne Attribute (mysql_enable_utf8 => 1) meldet der Treiber einen Fehler: String ist zu lang.
MfG