遇到的问题------perl脚本mysql新建表后字段名(列名)中文乱码
create table IF NOT EXISTS `AllRooms`( `id` int NOT NULL ?AUTO_INCREMENT PRIMARY KEY,? 用该语句在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中连接数据库时设置字符集。
执行代码改为: 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'; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |