免费注册 查看新帖 |

Chinaunix

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

使用mysql4.1,全面使用utf8时,一个没想明白的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-04-10 16:04 |只看该作者 |倒序浏览
最近搞个开发,准备用php5.02+mysql4.1.X来作这个项目,因为没有用过utf8,所以这次准备把整个代码都用utf8来做,遇见一个没有想明白的问题,想清高手指点一下。
已经将mysql4.1的所有charset都设置为utf8,如下所示:
character set client          utf8
character set connection         utf8
character set database         utf8
character set results         utf8
character set server         utf8
character set system         utf8
collation connection          utf8_unicode_ci
(全局值)         utf8_general_ci
collation database         utf8_general_ci
collation server         utf8_general_ci
数据库里的数据也全部iconv成utf8数据,如下所示:
first_db           浏览            结构          搜索            插入          清空            删除          2          MyISAM          utf8_general_ci          2.1 KB          -
按照我的理解,用php将数据从mysql中查询出来后,就无需再做编码转换就可以正常显示了,也就是说,使用:
$link=@mysql_pconnect($dbhost,$dbuser,$dbpw) or exit();
      mysql_select_db($dbname) or exit();
      $resource=mysql_query("select * from first_db");
while ($row=mysql_fetch_array($resource))
   {
   $id=$row['id'];
   $name=$row['name'];
   echo $id.$name."<br>";
   }
应该可以正常显示中文,可是查询出来的结果居然全部都是???。
只有在query前加入:
      mysql_query("set names 'utf8'");
才可以正常显示中文,这是说明原因??请指点。
可以确定mysql和数据库中的内容已经全部都是utf8的了。

论坛徽章:
0
2 [报告]
发表于 2006-04-10 16:05 |只看该作者
我没有做过PHP,专门搞JAVA的,所以不敢贸然作答。
不过,我在用JAVA操作MYSQL数据库的时候,有点心得,也是CU的朋友给我指点的,
我的意思是:尽管在数据库里已经设置了UTF8,不见得就高枕无忧了,比如在JAVA连接数据库操作
时,除了上述的要作到,而且在连接数据库的时候,URL要带一个参数:
URL="jdbc:mysql://localhost:3306/daname?useUnicode=true&characterEncoding=UTF8";
并且在JSP页面里还要加入这个JSP标签<%@ page contentType="text/html;charset=UTF8"%>
还有,页面在存储的时候还要选定相应的编码

我的意思是,要解决汉字现实的问题,就要解决下面三个问题:
1 数据库存储编码 //数据库的编码制
2 网络传输编码   //数据库连接URL,页面标签
3 页面存储编码   //存储页面的码制

[ 本帖最后由 xxjoyjn 于 2006-4-10 16:17 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2006-04-10 17:38 |只看该作者
原帖由 happyhunter 于 2006-4-10 16:04 发表
最近搞个开发,准备用php5.02+mysql4.1.X来作这个项目,因为没有用过utf8,所以这次准备把整个代码都用utf8来做,遇见一个没有想明白的问题,想清高手指点一下。
已经将mysql4.1的所有charset都设置为utf8,如下所 ...


http://imysql.cn/index.php?q=node/20
希望对你有帮助

论坛徽章:
0
4 [报告]
发表于 2006-04-10 20:06 |只看该作者
是可以直接使用,但需要你的要显示数据的编码也是 utf-8 编码.

论坛徽章:
0
5 [报告]
发表于 2006-04-10 22:14 |只看该作者
1. 数据库的编码,你做好了
2. apache设置,就是不要用 AddDefaultCharset 设置字符集,不过现在这个设置可能用的人少了。
3. 在 HTML 文件中指定 charset=utf-8
4. PHP 文件保存为 UTF-8 编码(不要用记事本保存,用 EditPlus 之类,保存为不带 BOM 字节的,否则 session 无法使用)
   如果 PHP 脚本本身要输出文字,先发送 header("Content-Type:text/html;charset=utf-8")
5. 如果结果还是要发送 "set names 'utf8'" 的(经过上面设置,应该不要了),就放到 my.cnf 的 [mysqld] 段,init_connect = 'set names utf8'

论坛徽章:
0
6 [报告]
发表于 2006-04-11 17:30 |只看该作者
谢谢rardge  的意见,我的开发环境为linux+vi,应该不存在你说的php文件编码问题,我想了解的是 ,php在处理过程中用的是什么编码?这个编码的设置应该怎样设置?

论坛徽章:
0
7 [报告]
发表于 2006-04-11 17:45 |只看该作者
原帖由 happyhunter 于 2006-4-10 16:04 发表
只有在query前加入:
      mysql_query("set names 'utf8'");
才可以正常显示中文,这是说明原因??请指点。
可以确定mysql和数据库中的内容已经全部都是utf8的了。

客户端指定了编码选项则会覆盖服务的选项。

http://bbs.chinaunix.net/viewthr ... &extra=page%3D1
这个哥们说了,php的mysql默认是iso8859-1。

论坛徽章:
0
8 [报告]
发表于 2006-04-12 09:13 |只看该作者
可能是php-mysql在连接的时候默认编码是iso-8859-1
我也是用jdbc的,在连接时都要指定useUnicode...等参数或者连接后执行set names 'utf8'

因为mysql是基于拉丁语系开发的,所以这个默认的编码让大家费不少事:em12:
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP