使用Perl将utf8保存和检索到MySQL的步骤
我对处理utf8的Perl DBI设置感到困惑:使用Perl将utf8保存和检索到MySQL的步骤,mysql,perl,utf-8,Mysql,Perl,Utf 8,我对处理utf8的Perl DBI设置感到困惑: $db->{mysql_enable_utf8} = 1 $db->do(qq{SET NAMES utf8}); 我读到我应该在以这种方式连接db后立即发布它们: my $db = DBI->connect($cstring, $user, $password); $db->{mysql_enable_utf8} = 1 $db->do(qq{SET NAMES utf8}); 问题是: 1) -我有一个表单设
$db->{mysql_enable_utf8} = 1
$db->do(qq{SET NAMES utf8});
我读到我应该在以这种方式连接db后立即发布它们:
my $db = DBI->connect($cstring, $user, $password);
$db->{mysql_enable_utf8} = 1
$db->do(qq{SET NAMES utf8});
问题是:
1) -我有一个表单设置为utf8的网页,因此用户数据以utf8格式发送到脚本
2) -脚本使用CGI::Simple读取表单数据。我应该使用utf8::decode()
对表单数据进行解码,还是不使用它
3) -我是否应该设置这两个:
$db->{mysql_enable_utf8} = 1
$db->do(qq{SET NAMES utf8});
我希望有人能解释一下保存和读取utf8的步骤,从将网页上的用户输入到MySQL数据库开始。我做了一些测试,这些测试可能有助于回答部分问题 考虑使用utf8阿拉伯语表示的此变量:
my $string = "السلام عليكم";
根据这个uft8计数器:
它是12个字符,总共23个字节
这两种说法
$strlen = length(($string));
say $strlen;
$strlen = length(decode_utf8($string));
say $strlen;
打印12个字符,因此Perl知道它是utf-8字符,因为我使用了使用utf8
告诉perl
我的源代码是使用utf-8编码的。这相当于解码CGI输入
现在转到Mysql:
1) -我创建了具有以下属性的测试表:
ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci
2) -连接mysql数据库后,将这两个设置如下:
$dbh->{'mysql_enable_utf8'} = 1;
$dbh->do('SET NAMES utf8');
当我在MySQL Windows查询浏览器中看到该表时,我看到它存储为正确的阿拉伯语,总共23个字节,并且我可以按如下方式读取文本
السلام عليكم
3) -不设置这两个:
$dbh->{'mysql_enable_utf8'} = 1;
$dbh->do('SET NAMES utf8');
当我在MySQL Windows查询浏览器中看到该表时,我看到错误的编码数据总计50字节
السلام عليكم
我正在Windows上使用Perl 5.10
这意味着我们必须设置这两个设置,以便在立即连接后使用mysql正确存储和检索utf8数据:
$dbh->{'mysql_enable_utf8'} = 1;
$dbh->do('SET NAMES utf8');
我认为这澄清了从mysql存储和检索数据的部分问题,仍然是关于从表单接收数据开始处理数据的问题的其余部分应该首先解码或按原样使用