我想使用perl/DBI將utf-8字符串寫入MySQL表。出於某種原因,字符串在第一個非ASCII字符處被截斷。使用Perl/DBI在MySQL表中截斷utf-8字符串
例如,如果我下表設置:
CREATE DATABASE testdb DEFAULT CHARSET=utf8;
CREATE TABLE testdb.testtable (textval CHAR(30)) DEFAULT CHARSET=utf8;
然後運行下面的Perl代碼:
#!/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')");
它實際上寫的 「N」。 (當它應該寫「紐伯格林」)
尋找在MySQL查詢日誌,我看到:
271 Query INSERT INTO testtable (textval) VALUES ('the Nürburgring')
所以串到達DB服務器完好。
如果我直接在MySQL控制檯中輸入相同的查詢:
INSERT INTO testtable (textval) VALUES ('the Nürburgring');
整個字符串被正確寫入。任何想法我做錯了什麼?
又是什麼,如果你改變'\ xFC'爲'在你的腳本ü'寫? – TLP
如果我在perl代碼中使用文字ü,它完全一樣。 – plasticinsect