Есть ли ошибка с обработкой umlaute в первичном ключе в mysql (или DBD)? - PullRequest
0 голосов
/ 20 августа 2011

У меня есть кое-что, чего я не понимаю.

Вот кусок кода:

use warnings;
use strict;

my $db_name = 'xxx';
my $user    = 'xxx';
my $pw      = 'xxx';

use DBI;

my $dbh = DBI->connect("DBI:mysql:$db_name", $user, $pw) 
          || die "Could not connect to database: $DBI::errstr";


$dbh -> do('drop table umlaute;');


$dbh -> do(
  "create table umlaute (
     txt varchar(3)  primary key -- will not work if primary key enabled
   )") ||  die "could not create table";


$dbh -> begin_work;
my $sth = $dbh -> prepare ("insert into umlaute values (?)") or die "prepare failed";

for my $a ( 'a' .. 'z' , 'ä', 'ö', 'ü') {
for my $b ( 'a' .. 'z' , 'ä', 'ö', 'ü') {
for my $c ( 'a' .. 'z' , 'ä', 'ö', 'ü') {

  $sth -> execute ("$a$b$c") or die "could not insert $a$b$c"; 

}}}

$dbh->commit;

# check count
my $cnt = $dbh -> selectrow_arrayref("select count(*) from umlaute")->[0];

if ($cnt != 29*29*29) {
   print "$cnt != 29*29*29\n";
}
else {
  print "$cnt\n";
}

$dbh -> do('drop table performance_insert;');

Он будет работать так, как я думаю, и тогда, когда на столе нет первичного ключа umlaute . Тем не менее, если я «включу» первичный ключ, он потерпит неудачу. Интересно, что сценарию удается вставить ä и ö , но не ü .

Любые намеки на то, почему это не работает, приветствуются. Скорее всего, это то, чего я не замечаю, поэтому четыре глаза видят больше двух.

Ответы [ 2 ]

0 голосов
/ 20 августа 2011

Столбец, скорее всего, имеет сопоставление latin1_swedish_ci . Объявите другой порядок сортировки при создании таблицы, например, latin1_bin. Наборы символов и сопоставления заслуживают понимания, поскольку в дальнейшем это может сэкономить ваши усилия, если вы обнаружите, что вам необходимо поддерживать символы вне набора символов latin1.

0 голосов
/ 20 августа 2011

Это, похоже, проблема с кодировкой, вы должны прочитать раздел руководства Поддержка набора символов , чтобы это исправить. Попробуйте установить кодировку в UTF-8.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...