Perl/DBI kullanarak bir MySQL tablosuna utf-8 dizeleri yazmaya çalışıyorum. Bir sebepten dolayı dize ilk ascii olmayan karakterde kesiliyor. Örneğinutf-8 dize Perl/DBI kullanarak MySQL tablosunda kesiliyor
, aşağıdaki tabloyu kurarsanız:
CREATE DATABASE testdb DEFAULT CHARSET=utf8;
CREATE TABLE testdb.testtable (textval CHAR(30)) DEFAULT CHARSET=utf8;
Ve sonra aşağıdaki Perl kodu çalıştırın: Aslında "N" yazıyor
#!/usr/bin/perl
use strict;
use DBI;
my $dbh = DBI->connect('DBI:mysql:host=localhost;database=testdb', 'testuser', 'somepassword', {mysql_enable_utf8 => 1}) or die $DBI::errstr;
$dbh->do('SET NAMES utf8');
$dbh->do("INSERT INTO testtable (textval) VALUES ('the N\xFCrburgring')");
.
271 Query INSERT INTO testtable (textval) VALUES ('the Nürburgring')
Yani dize bozulmamış sunucusunun DB ulaşıyor: MySQL sorgu günlüğüne Looking
(o "Nürburgring" yazılı gerekirken), bunu gördüm. Ben MySQL konsolunda doğrudan aynı sorguyu girerseniz
:
INSERT INTO testtable (textval) VALUES ('the Nürburgring');
tüm dizeyi doğru yazılır. Ne yaptığım hakkında bir fikrin var mı?
Komut dosyanızda '\ xFC' -' ü' değiştirirseniz ne yazılır? – TLP
Perl kodunda bir literal ü kullanırsam tam olarak aynı şeyi yapar. – plasticinsect