- 论坛徽章:
- 7
|
- #!/usr/bin/perl -w
- USE strict;
- use DBI;
- use Encode;
- my $dbName = 'mytest';
- my $dbUser = 'test';
- my $dbUserPass = 'test123';
- my $dbh = DBI->connect("dbi:Oracle:$dbName", $dbUser, $dbUserPass) or die "can't connect to database " . $DBI::errstr;
- my $hostSql = qq{select hostname,username,password from t_hostserver where name like '生产%'};
- my ($hostname, $username, $passwd);
- my $selStmt = $dbh->prepare($hostSql);
- $selStmt->bind_columns(undef, \$hostname, \$username, \$passwd);
- $selStmt->execute();
- while( $selStmt->fetch() ){
- print "$hostname\t\t$username\t\t$passwd\n";
- }
- $selStmt->finish;
- $dbh->disconnect;
复制代码 使用上面的代码在windows下执行,能够正确查询出数据。但是使用上面的代码在linux下执行,不能查询出数据。通过抓数据包和oracle session中的sql语句,发现sql语句中的“生成”都被替换成了问号。
请问问什么会这样?怎么能让代码在windows和linux下都能运行?
windows和linux下NLS_LANG均设置成了SIMPLIFIED CHINESE_CHINA.ZHS16GBK,和数据库的设置是一致的。
linux下的locale设置如下:
LANG=en_US.utf8
LC_CTYPE="en_US.utf8"
LC_NUMERIC="en_US.utf8"
LC_TIME="en_US.utf8"
LC_COLLATE="en_US.utf8"
LC_MONETARY="en_US.utf8"
LC_MESSAGES="en_US.utf8"
LC_PAPER="en_US.utf8"
LC_NAME="en_US.utf8"
LC_ADDRESS="en_US.utf8"
LC_TELEPHONE="en_US.utf8"
LC_MEASUREMENT="en_US.utf8"
LC_IDENTIFICATION="en_US.utf8"
LC_ALL=
如果我将LANG设置成en_US,会报如下错误:- perl: warning: Setting locale failed.
- perl: warning: Please check that your locale settings:
- LANGUAGE = (unset),
- LC_ALL = (unset),
- LANG = "en_US"
- are supported and installed on your system.
- perl: warning: Falling back to the standard locale ("C").
复制代码 这又是为什么啊?
新手提问,还望大家帮忙解惑。谢谢!! |
|