Estoy tratando de escribir cadenas utf-8 en una tabla MySQL usando perl/DBI. Por algún motivo, la cadena se trunca en el primer carácter no ascii.cadena utf-8 que se trunca en la tabla MySQL usando Perl/DBI
Por ejemplo, si me juego hasta la siguiente tabla:
CREATE DATABASE testdb DEFAULT CHARSET=utf8;
CREATE TABLE testdb.testtable (textval CHAR(30)) DEFAULT CHARSET=utf8;
y ejecute el siguiente código 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')");
En realidad, escribe "N". (Cuando debería estar escribiendo "Nürburgring")
Mirando en el registro de consultas MySQL, veo esto:
271 Query INSERT INTO testtable (textval) VALUES ('the Nürburgring')
lo que la cadena está alcanzando el servidor de base de datos intactos.
Si entro en la misma consulta directamente en la consola de MySQL:
INSERT INTO testtable (textval) VALUES ('the Nürburgring');
La cadena entera está escrita correctamente. ¿Alguna idea de lo que estoy haciendo mal?
¿Y qué escribe si cambia '\ xFC' a' ü' en su script? – TLP
Hace exactamente lo mismo si uso un literal ü en el código perl. – plasticinsect