Perl Mysql中文乱码

转自http://www.istartupcn.com/?q=node/688

perl5.8+mysql4.1,用perl DBI mysql往数据库插入数据,总是乱码,而用phpmyadmin能插入中文;而用perl插入的中文在phpmyadmin里面也是乱码。数据库的创建,我用了:

create database cnews default character set gbk;
CREATE TABLE `news` (
`id` int(10) unsigned NOT NULL auto_increment,
`title` varchar(50) default NULL,
`context` text,
`date` date default NULL,
`site` varchar(20) default NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=gbk

如果在my.cnf里面设置了
[client]
default-character-set = gbk
[mysqld]
default-character-set = gbk

mysql -uroot -p;
mysql>use cnews;
mysql> status
--------------

Server characterset: gbk
Db characterset: gbk
Client characterset: gbk
Conn. characterset: gbk

则perl能够正常插入中文无须其它设置。

如果不在my.cnf里设置default-character-set,例如:

mysql -uroot -p;
msyql>use cnews
mysql> status

Server characterset: latin1
Db characterset: gbk
Client characterset: latin1
Conn. characterset: latin1

在调用perl 的时候,需要下面设置:

$db->do("SET character_set_client = 'gbk'");
$db->do("SET character_set_connection = 'gbk'");

如果需要显示结果,加上

$db->do("SET character_set_results= 'gbk' ");

其实可以把database 设置为gbk,然后用character_set_*来设置相关编码,mysql其实还是很灵活的。perl运行跟linux的locale没有关系,对于数据库操作。

刚学perl,希望对跟我一样的新手有所帮助。

在Perl里简单的执行这个也.

没有评论:

发表评论