Próbuję napisać ciągi utf-8 do tabeli MySQL przy użyciu perl/DBI. Z jakiegoś powodu ciąg znaków jest przycinany przy pierwszym znaku spoza ASCII.Łańcuch utf-8 zostaje obcięty w tabeli MySQL przy użyciu Perl/DBI
Na przykład, jeśli mogę skonfigurować poniższej tabeli:
CREATE DATABASE testdb DEFAULT CHARSET=utf8;
CREATE TABLE testdb.testtable (textval CHAR(30)) DEFAULT CHARSET=utf8;
a następnie uruchom następujący kod perla:
#!/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')");
To faktycznie pisze "N". (Kiedy należy pisać „Nürburgring”)
Patrząc w dzienniku zapytań MySQL, widzę to:
271 Query INSERT INTO testtable (textval) VALUES ('the Nürburgring')
więc ciąg jest osiągnięcie serwer DB nienaruszone.
Gdybym wprowadzić tę samą kwerendę bezpośrednio w konsoli MySQL:
INSERT INTO testtable (textval) VALUES ('the Nürburgring');
Cały ciąg jest napisane poprawnie. Masz pojęcie, co robię źle?
Co pisze, jeśli zmienisz '\ xFC' na' ü' w swoim skrypcie? – TLP
Robi dokładnie to samo, jeśli użyję literału ü w kodzie perla. – plasticinsect