Обрезка строки utf-8 в таблице MySQL с использованием Perl / DBI

Я пытаюсь записать строки utf-8 в таблицу MySQL, используя perl / DBI. По какой-то причине строка обрезается до первого символа, отличного от 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');

Вся строка написана правильно. Есть идеи, что я делаю не так?

5
задан plasticinsect 28 October 2011 в 23:37
поделиться