mysql'存在漏洞吗;主键中umlaute的s(或DBD';s)处理?
我有些不明白的事 下面是一段代码:mysql'存在漏洞吗;主键中umlaute的s(或DBD';s)处理?,mysql,primary-key,diacritics,dbd,Mysql,Primary Key,Diacritics,Dbd,我有些不明白的事 下面是一段代码: 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
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上没有主键时,它将像我认为的那样工作。但是,如果我“启用”主键,它将失败。有趣的是,脚本设法插入了ä和ö,但没有插入ü
如果有任何提示说明这不起作用,我们将不胜感激。这很可能是我没有发现的东西,所以四只眼睛看的比两只眼睛多。这似乎是一个编码问题,你应该阅读手册部分来解决这个问题。尝试将编码设置为UTF-8。列很可能具有排序规则。创建表时声明不同的排序规则,例如latin1_-bin。字符集和排序规则值得理解,因为如果您发现需要支持latin1字符集以外的字符,可以节省以后的工作。您是否也会收到错误消息?