首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Perl保存utf8并将其检索到MySQL的步骤

问使用Perl保存utf8并将其检索到MySQL的步骤
EN

Stack Overflow用户
提问于 2014-12-23 22:35:44
回答 1查看 173关注 0票数 1

我对用于处理utf8的Perl设置感到困惑:

代码语言:javascript
复制
$db->{mysql_enable_utf8} = 1
$db->do(qq{SET NAMES utf8});

我读到,我应该在以这种方式建立db连接之后立即发出它们:

代码语言:javascript
复制
my $db = DBI->connect($cstring, $user, $password);
$db->{mysql_enable_utf8} = 1
$db->do(qq{SET NAMES utf8});

以下是问题所在:

1)-I具有表单设置为utf8的网页,因此用户数据以utf8的形式发送给脚本。

2)-the脚本使用CGI::Simple读取表单数据。我是应该用utf8::decode()解码表单数据,还是只留下它?

3)-Should --我设置了这两种方法:

代码语言:javascript
复制
$db->{mysql_enable_utf8} = 1
$db->do(qq{SET NAMES utf8});

我希望有人能解释保存和读取utf8的步骤,从将网页上的用户输入到MySQL数据库开始。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-24 12:58:42

我做了一些测试,这些测试可能有助于回答问题的一部分。

考虑一下utf8阿拉伯语中的这个变量:

代码语言:javascript
复制
my $string = "السلام عليكم";

根据这个uft8计数器:

https://mothereff.in/byte-counter

它是12个字符,总计23个字节。

这两种说法

代码语言:javascript
复制
$strlen = length(($string));
say $strlen;

$strlen = length(decode_utf8($string));
say $strlen;

打印12,所以Perl知道它是utf-8字符,因为我使用use utf8;告诉perl我的源代码是用utf-8编码的。这相当于解码您的CGI输入。

下面是Mysql:

1)-我创建了具有属性的测试表:

代码语言:javascript
复制
ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci

2)-连接到mysql db后,将这两者设置为:

代码语言:javascript
复制
$dbh->{'mysql_enable_utf8'} = 1;
$dbh->do('SET NAMES utf8');

当我在MySQL中看到表时,我看到它被存储为正确的阿拉伯语和总共23个字节,并且我可以将文本读取为。

代码语言:javascript
复制
السلام عليكم

3)-但不设定这两种情况:

代码语言:javascript
复制
$dbh->{'mysql_enable_utf8'} = 1;
$dbh->do('SET NAMES utf8');

当我在MySQL中看到表时,我会看到错误编码的数据总计50个字节。

代码语言:javascript
复制
السلام عليكم

我在Windows上使用Perl 5.10。

这意味着我们必须设置这两个设置,以便在连接后立即使用mysql正确存储和检索utf8数据:

代码语言:javascript
复制
$dbh->{'mysql_enable_utf8'} = 1;
$dbh->do('SET NAMES utf8');

我认为这在一定程度上解决了从mysql存储和检索数据的问题,但是关于从从表单接收数据开始处理数据的其余问题应该先解码或按原样使用。

​

​

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27629041

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档