Я пытаюсь записать строки 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');
Вся строка написана правильно. Есть идеи, что я делаю не так?