hotti: MySQL 5.5, Information_Schema, utf-8

Beitrag lesen

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