0

わからないことがあります。

コードの一部を次に示します。

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に主キーがない場合、私が思うように機能します。それでも、主キーを「有効」にすると失敗します。興味深いことに、このスクリプトはäöを挿入できますが、 üは挿入できません。

これが機能しない理由についてのヒントをいただければ幸いです。おそらく私には見えないものなので、4 つの目は 2 つ以上のものを見ています。

4

2 に答える 2

0

列には、 latin1_swedish_ci照合順序が含まれている可能性が最も高いです。テーブルの作成時に、latin1_bin などの別の照合順序を宣言します。後で latin1 文字セット以外の文字をサポートする必要があることがわかった場合に、労力を節約できるため、文字セットと照合は理解しておく価値があります。

于 2011-08-20T17:49:20.597 に答える
0

これはエンコーディングの問題のようです。これを修正するには、マニュアルの「 Character Set Support 」セクションを読む必要があります。エンコーディングを UTF-8 に設定してみてください。

于 2011-08-20T17:30:11.753 に答える