gyn

Win32下的Perl,无用的select,停滞的Tk,结束吧....

在perl中操作数据库中文字段

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!";

#---------------------------------------

posted on 2006-09-17 10:48 gyn_tadao 阅读(1499) 评论(1)  编辑 收藏 引用 所属分类: perl

只有注册用户登录后才能发表评论。
<2006年4月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

导航

统计

常用链接

留言簿(15)

随笔分类(126)

随笔档案(108)

相册

搜索

最新评论

阅读排行榜

评论排行榜