求助-有关perl及数据库中文编码问题

求助-有关perl及数据库中文编码问题

求助-有关perl及数据库中文编码问题
这个问题郁闷了我好久,请各位perl编码高手指点!
我用的数据库是sql sever 2000
程序如下:
#!c:/perl/bin/perl -w
use strict;
use DBI;
use DBD::ODBC;
use CGI qw(:standard);
use encoding "euc-cn";
use Encode qw(encode decode);
print header(-charset=>"gb2312");
print start_html(-text=>"00008B");
if(!param)
{
print start_form();
my $tablerows=
Tr(th(' '))
.Tr(th('<h5>查询表单</h5>'))
.Tr(th("<small>请输入要查找的名字:<input type='text' name='name' size='15'> </small>"))
.Tr(th('&nbsp;'))
.Tr(th(" <input type='submit' name='submit' value='立即查询'>"));
print table({border=>0,-cellpadding=>5,-cellspacing=>0,-width=>"100%"},$tablerows);
print end_form();
}
else
{
my $dbh=DBI->connect("DBI:ODBC:project","sa","",{RaiseError=>1});
my $name=param('name');
my $Name=encode("gb2312",$name);
my $string="select * from users where users like '\%"."$Name"."\%'";
my $sth=$dbh->prepare($string);
$sth->execute();
my $rows=$sth->fetchall_arrayref();
$sth->finish();
my $tablerows=Tr(th({-align=>"left"},["姓名","密码","是否为管理员"]));
foreach my $row(@ $rows)
{
$tablerows.=Tr(td{-align=>"left"},($row));
}
print h1("员工信息");
print table({border=>0,-cellpadding=>5,-cellspacing=>0},$tablerows);
print br(),br(),"共查询到",b(scalar(@$rows)),"结果.",br(),br();
$dbh->disconnect();
}
print end_html();
上面的程序,如果用户的名字是英文的,可以正常搜索出来
可是如果用户名是中文的,就搜索不出来了,搜索的结果总是为空
我知道是perl与sql sever 2000编码的地方出了问题,但是在网上查了好久
也试了很多方法,但是还是解决不了,请各位高手帮忙小弟改下
最好能把问题出在哪里,进行一下详细说明,谢谢各位了~~




   

my $Name=encode(
my $Name=encode("gb2312",$name);
my $string="select * from users where users like '\%"."$Name"."\%'";

如果sql server 2000是以gb2312存储的,这一步不必编码了,而直接进行查询,
#my $Name=encode("gb2312",$name);
my $string="select * from users where users like '\%$name\%'";
因为本代码页的编码是gb2312。

我的测试代码如下:
#!/usr/bin/perl

print "Content-type: text/html\n\n";
use DBI;
use CGI qw/:standard/;

my $name = url_param('name');

my $dbh;
eval {
$dbh = DBI->connect('dbi:ODBC:test', 'sa', 'sa',
{
PrintError => 0,
RaiseError => 1
}
)
};
if ($@) {
print $@;
}
$dbh->{LongReadLen} = 500 * 1024;
$dbh->{LongTruncOk} = 1;
my $sth = $dbh->prepare("select * from o_article where a_title like '\%$name\%'");
$sth->execute;

while (my $row = $sth->fetchrow_hashref('NAME_lc')) {
print $row->{'a_id'}, '&nbsp;-&nbsp;', $row->{'a_title'}, '<br />';
}
$dbh->disconnect;