在
perl
中操作数据库中文字段
Perl
中对程序中的语句是按
utf8
的编码处理的,对英文没有什么影响,但是中文就有一些麻烦。
比方说,在
notepad
中默认是以
gb2312
的编码处理中文。如果在其中编写带有中文的
perl
程序,一般都难令人如意。这种情况下,一般会拜托
encode
模块,它是天然集成在
activeperl5.8.8
中的,如果没有找到可在
ppm
中
search
一下。
通常只要用到一下两个函数即可:
l
encode(‘
编码
’, ‘
文字
’)
l
decode(‘
编码
’,
数据
)
其中
decode
是将其中编码形式的文字转换为
utf8
数据;而
encode
则是将以
utf8
编码的数据转换为编码形式的文字。举一个例子:
$str = decode(‘gb2312’, ‘
你好
’);
Print encode(‘gb2312’, $str);
以上是可以正确打印出“你好”二字的。首先是告诉
perl
“你好”是一个
gb2312
编码的文字,
perl
把它以
utf8
的形式存在
$str
中;在将
$str
以
gb2312
的形式转换为文字并打印出来。
再说一下数据库。数据库都有自己的编码方式,比如说
utf8
、
eu_cn
、
gbk
等等。一定编码方式的数据库只能接受相应编码的数据,一般从兼容性上考虑会使用
utf8
编码的数据库。
在
postgres8.1
中,向一定编码的数据库中输入数据时,可以用
\encoding
将
client encode
设为与输入数据相同的形式。比方说在
psql
中向
utf8
编码的数据库插入
gbk
编码的汉字,就可以:
\encoding ‘gbk’
不然只会得到一个无法输入的提示。遗憾的是,
perl
里没有像
\encoding
这样的命令,于是又要拜托
encode
模块了。
#------------------------------------
use DBI;
use Encode;
use strict;
#连接数据库
my $dbh = DBI->connect("dbi:PgPP:dbname=
数据库名
:host=
服务器地址
:port=
服务器端口
",
登录名
,
登录密码
,{PrintError => 0})
or die $DBI::errstr;
#准备sql语句
my $inr = $dbh->prepare("insert into name values('encode('utf8', decode('gb2312','
你好
'))')")
or die $DBI::errstr;
#执行sql语句
$inr->execute() or die $DBI::errstr;
#打印成功信号
print "WELL DONE!";
#---------------------------------------