免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2423 | 回复: 5
打印 上一主题 下一主题

Perl操作mysql,中文显示问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-04-15 00:24 |只看该作者 |倒序浏览

操作系统:ubuntu 11.10
mysql版本:5.1.61-0ubuntu0.11.10.1 (Ubuntu)
1."show variables like "character%";"输出如下:

  1. +--------------------------+----------------------------+
  2. | Variable_name            | Value                      |
  3. +--------------------------+----------------------------+
  4. | character_set_client     | utf8                       |
  5. | character_set_connection | utf8                       |
  6. | character_set_database   | utf8                       |
  7. | character_set_filesystem | binary                     |
  8. | character_set_results    | utf8                       |
  9. | character_set_server     | utf8                       |
  10. | character_set_system     | utf8                       |
  11. | character_sets_dir       | /usr/share/mysql/charsets/ |
  12. +--------------------------+----------------------------+
复制代码
2."show create database jadb;"部分输出如下:
  1. DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci
复制代码
3."show create table dict;"部分输出如下:
  1. ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
复制代码
4."show full fields from dict;"显示中文字段的Collation是utf8_general_ci。

--------------------------------------------------------------------------------------
使用perl脚本:
perl脚本编码是utf-8,直接执行插入和查询操作,没有进行其它可能改变编码的操作。
在ubuntu终端执行perl脚本,插入中文数据,查询后print,中文显示正常;

mysql交互终端:
在终端上直接连接到mysql服务器,执行查询时,刚才使用perl脚本插入的中文显示为乱码;
在交互终端执行"set names latin1;"后,再次查询,中文显示正常。
--------------------------------------------------------------------------------------

为什么两次查询状况不一致呢?是不是mysql虽然被设置为使用utf8字符集,但是实际上并没有使用?

论坛徽章:
0
2 [报告]
发表于 2012-04-15 01:16 |只看该作者

  1. #!/usr/bin/env perl

  2. $dbh = .....
  3. $dbh->do("set names utf8");
  4. ....

复制代码

论坛徽章:
13
双鱼座
日期:2013-10-23 09:30:05数据库技术版块每日发帖之星
日期:2016-04-20 06:20:00程序设计版块每日发帖之星
日期:2016-03-09 06:20:002015亚冠之塔什干火车头
日期:2015-11-02 10:07:452015亚冠之德黑兰石油
日期:2015-08-30 10:07:07数据库技术版块每日发帖之星
日期:2015-08-28 06:20:00数据库技术版块每日发帖之星
日期:2015-08-05 06:20:002015年迎新春徽章
日期:2015-03-04 09:57:09辰龙
日期:2014-12-03 14:45:52酉鸡
日期:2014-07-23 09:46:23亥猪
日期:2014-03-13 08:46:22金牛座
日期:2014-02-11 09:36:21
3 [报告]
发表于 2012-04-15 08:40 |只看该作者
set names utf8

论坛徽章:
0
4 [报告]
发表于 2012-04-15 10:29 |只看该作者
多谢楼上两位。
在执行SQL语句之前先“set names utf8”就OK了。

“set names utf8”会改变以下三个默认编码
character_set_client
character_set_connection
character_set_results

这三个的默认值明明已经设置为utf8了,为什么在脚本中还要再次执行"set names utf8"?

论坛徽章:
0
5 [报告]
发表于 2012-04-15 18:00 |只看该作者
都是惯性加上set names utf8的路过

论坛徽章:
0
6 [报告]
发表于 2012-04-16 20:35 |只看该作者
wxgiter 发表于 2012-04-15 10:29
多谢楼上两位。
在执行SQL语句之前先“set names utf8”就OK了。

因为你的SQL语句不见得就是 utf8。
一般都习惯性的加上 “set names utf8”。 以免有稀奇古怪的问题发生
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP