Доступ к базе данных latin1 mysql из сценария perl с использованием utf8 - PullRequest
2 голосов
/ 30 апреля 2011

У меня есть Perl-скрипт, использующий прагму utf8, и по разным причинам наиболее практично, что он выполняет большинство своих операций в utf8.Однако мне нужно получить доступ к базе данных mysql, где все таблицы находятся в латинице 1.Как мне это сделать?

Немного псевдокода:

use utf8;
use DBI;

my $dbh = DBI->connect("DBI:mysql:$database;host=$server", $user, $pw);
my $sth = $dbh->prepare(
  "SELECT recipe.ingredients 
   FROM recipe
   WHERE recipe.id=?");

$sth->execute('rødgrød');

Если я уроню use utf8; и сохраню свой скрипт на латинице 1, это будет работать как положено.

(Мне никогда не нужно вставлять в таблицу, просто читайте из нее, но я не думаю, что это действительно имеет значение.)

Ответы [ 3 ]

3 голосов
/ 30 апреля 2011

При подключении к mysql вы должны указать, что ваш скрипт ожидает и предоставляет UTF-8, поэтому вам нужно указать его при подключении:

my $dbh = DBI->connect("DBI:mysql:$database;host=$server", $user, $pw, {mysql_enable_utf8 => 1 });

AFAIK, лучше сообщить об этом при подключении, а не после.

1 голос
/ 30 апреля 2011

попробуйте установить что-то вроде этого:

$dbh->{'mysql_enable_utf8'} = 1;
$dbh->do(qq{SET NAMES 'utf8';});
0 голосов
/ 30 апреля 2011

Обратите внимание, что прагма utf8 обязательна, только если ваш исходный файл Perl закодирован в UTF-8.Если, с другой стороны, он закодирован на латинице 1, вы должны не использовать прагму utf8.Так rødgrød состоит из семи (Latin1) или девяти (UTF-8) октетов?

Взаимодействие с MySQL не зависит от настройки utf8, и soulSurfer2010 дал правильный ответ на этот вопрос.

...