遇到的问题------perl脚本mysql新建表后字段名(列名)中文乱码

前端之家收集整理的这篇文章主要介绍了遇到的问题------perl脚本mysql新建表后字段名(列名)中文乱码前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。


create table IF NOT EXISTS `AllRooms`( `id` int NOT NULL  AUTO_INCREMENT PRIMARY KEY, 
 `集团KEYID` varchar(255), 
 `公司KEYID` varchar(255), 
 `项目名称` varchar(255), 
 `网上项目名称` varchar(255), 
 `楼层` varchar(255), 
 `房号` varchar(255), 
 `面积` varchar(255), 
 `状态` varchar(255));


用该语句在perl中执行创建表。

my $data_base = "DBI:MysqL:$db_name:$location:$port";
	
	
	my $dbh3=DBI -> connect($data_base,$db_user,$db_pass);
		my	 $data_str=encode("utf-8",decode("gbk",$_[0]));
		

	my $sth=$dbh3->prepare($data_str);

	
	open(FILE,">createtable.txt");  
syswrite(FILE,"$_[0]");  
close(FILE); 
print "\n",$data_str,"\n";
	open(FILE,">createtable1.txt");  
syswrite(FILE,"$data_str");  
close(FILE); 
	
	$sth->execute() or die "ERROR::$_[0]::$dbh3->errstr";	
	$dbh3->disconnect;
	print 'ok';

执行后发现表的列名为乱码。(在workbench中查看 和 MysqL中show create table 都是显示的乱码)


这时候 检查 Linux的环境  MysqL的环境发现都已经设为utf-8, create语句字符串也已经转码为utf-8.   输出到txt中也能正常显示。 但就是列名是乱码。

 ps:检查环境方法 具体可见mysql乱码问题完美解决篇(我用的perl其他语言类推可解)

我在MysqL中 直接用这语句创建表  可以正常显示。 说明问题出在perl与MysqL的连接时。



即排除了  1.MysqL的环境的编码

2.数据源(执行语句字符串)的编码

这两个问题后

那问题应该出在 连接上。


 这个时候 要在perl中连接数据库时设置字符集。



$dbh->do("SET character_set_client = 'utf8'");
    $dbh->do("SET character_set_connection = 'utf8'");


执行代码改为:

my $data_base = "DBI:MysqL:$db_name:$location:$port";
	
	
	my $dbh3=DBI -> connect($data_base,$db_pass);
	$dbh3->do("SET character_set_client = 'utf8'");
   $dbh3->do("SET character_set_connection = 'utf8'");
	my	 $data_str=encode("utf-8","$data_str");  
close(FILE); 
	
	$sth->execute() or die "ERROR::$_[0]::$dbh3->errstr";	
	$dbh3->disconnect;
	print 'ok';

猜你在找的Perl相关文章