【发布时间】:2011-10-28 23:37:43
【问题描述】:
我正在尝试使用 perl/DBI 将 utf-8 字符串写入 MySQL 表。由于某种原因,字符串在第一个非 ascii 字符处被截断。
例如,如果我设置了下表:
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')
所以字符串完好无损地到达数据库服务器。
如果我直接在 MySQL 控制台中输入相同的查询:
INSERT INTO testtable (textval) VALUES ('the Nürburgring');
整个字符串写入正确。知道我做错了什么吗?
【问题讨论】:
-
如果你把脚本中的
\xFC改成ü会写什么? -
如果我在 perl 代码中使用文字 ü,它的作用完全相同。