У меня есть кое-что, чего я не понимаю.
Вот кусок кода:
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 . Тем не менее, если я «включу» первичный ключ, он потерпит неудачу. Интересно, что сценарию удается вставить ä и ö , но не ü .
Любые намеки на то, почему это не работает, приветствуются. Скорее всего, это то, чего я не замечаю, поэтому четыре глаза видят больше двух.