QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 2084|回复: 10

色兔版主在吗?老问题,UTF-8

[复制链接]
发表于 2005-4-25 09:38:29 | 显示全部楼层 |阅读模式
色兔老大,小弟还想请教UTF-8问题,麻烦您了。

小弟在mysql-3.x, mysql-4.0.x, mysql-4.1.x上分别作了尝试,得出以下不成熟的结论:

MySQL-3.x:
如果页面编码是UTF-8,则向数据库写入的文字的编码也是UTF-8.

MySQL-4.0.x:
如果页面编码是UTF-8,则向数据库写入的text类型文字的编码也是UTF-8; 而char类型文字的编码则不是UTF-8, 必须通过character set utf8来强制。

MySQL-4.1.x:
即使页面编码是UTF-8,所有类型的文字都必须通过character set utf8才能以UTF-8编码存入数据库。

如果上述结论正确,岂不是MySQL-3.x对UTF-8支持得最好?而且由于加入了character set utf8这句话,是不是不存在对上述三种MySQL版本都适用的table?
发表于 2005-4-25 10:54:14 | 显示全部楼层
你只要把写入数据库的文本编码和你使用的文本编码一致就不用考虑编码问题。
如果你写入数据库的编码和你的文本所使用的编码不一致。
就必须进行转换。
回复

使用道具 举报

 楼主| 发表于 2005-4-25 11:33:53 | 显示全部楼层
谢谢jiangtao9999版主回复,但请问如何使写入数据库的文本编码和你使用的文本编码一致?

比如一个用户发言界面,在MySQL-4.1.x下,浏览器显示当前编码为UTF-8,但插入数据库的用户发言却不是UTF-8。
回复

使用道具 举报

发表于 2005-4-25 16:38:30 | 显示全部楼层
[quote:8b038f62b8="Bill_huohuo"]谢谢jiangtao9999版主回复,但请问如何使写入数据库的文本编码和你使用的文本编码一致?

比如一个用户发言界面,在MySQL-4.1.x下,浏览器显示当前编码为UTF-8,但插入数据库的用户发言却不是UTF-8。[/quote]

对,MySQL4.1.x多了Collation的概念

首先这个Textarea获得的char必须是UTF8的,这就需要HTML的编码必须是UTF8 的

其次PHP程序把获得的char存储到MySQL的过程中,报保持编码不变,*.php文件的编码也必须是UTF8的
回复

使用道具 举报

发表于 2005-4-25 17:04:36 | 显示全部楼层
就是要保证所有的编码都是 utf-8




怎么那么多中国人用 utf-8 ???有着好好的 GB18030 不用非用它?
回复

使用道具 举报

 楼主| 发表于 2005-4-25 22:36:23 | 显示全部楼层
[quote:22e2789ff0="涩兔子"][quote:22e2789ff0="Bill_huohuo"]谢谢jiangtao9999版主回复,但请问如何使写入数据库的文本编码和你使用的文本编码一致?

比如一个用户发言界面,在MySQL-4.1.x下,浏览器显示当前编码为UTF-8,但插入数据库的用户发言却不是UTF-8。[/quote]

对,MySQL4.1.x多了Collation的概念

首先这个Textarea获得的char必须是UTF8的,这就需要HTML的编码必须是UTF8 的

其次PHP程序把获得的char存储到MySQL的过程中,报保持编码不变,*.php文件的编码也必须是UTF8的[/quote]

小弟大概了解了,目前我只把多国语言包中的*.php文件改成了UTF-8编码,然后在header中将charset设置为UTF-8,所以在切换任何一种语言时,界面都会以UTF-8显示语言包中预先设置的该语言信息,但在处理用户输入这类非语言包预设信息时,各版本数据库就会反应不一。

看来这样还不够,需要把多国语言包以外的HTML文件和PHP文件也改成UTF-8编码。小弟再试试看。

谢谢两位老大,多语言存储及显示的问题已经困扰小弟很久了,多亏了公社的帮助。
回复

使用道具 举报

发表于 2005-4-26 08:48:51 | 显示全部楼层
[quote:54be3184cc="Bill_huohuo"]需要把多国语言包以外的HTML文件和PHP文件也改成UTF-8编码[/quote]

right
回复

使用道具 举报

发表于 2005-4-28 02:04:55 | 显示全部楼层
我的JSP页面是ISO8859_1,因为我使用如下 语句能正常显示中文。。
System.out.println(new String(sex.getBytes("ISO8859_1"),"GBK"));
但我如何知道MYSQL(4.1.10a)默认使用哪个编译呢。。。。
如何在JSP才不显示?号呢?
回复

使用道具 举报

发表于 2005-4-28 08:06:05 | 显示全部楼层
sex.getBytes cool class

MySQL的collations表明了数据库、数据表、数据项的编码

用phpmyadmin管理MySQL,如果你不熟悉MySQL命令行
回复

使用道具 举报

发表于 2005-4-28 18:52:26 | 显示全部楼层
说一句:GBK 、GB2312、GB18030 均兼容 ISO8859-1 编码。
回复

使用道具 举报

发表于 2005-4-30 02:00:14 | 显示全部楼层
我从JSP写入数据里直接使用JSP页面的默认的编译ISO8859_1写入中文。。
从MYSQL读出刚刚写入的中文用的方法是如下:
String sex = new String(rs.getString("sex").getBytes("GBK"),"ISO8859_1));
读到JSP页面还是??。已经弄了几天还是不行,郁闷啊。
对了,我连接MYSQ的URL分别用了jdbc:mysql://localhost/rzdata?useUnicode=true&characterEncoding=UTF-8和jdbc:mysql://localhost/rzdata都还是??号。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-16 19:45 , Processed in 0.038706 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表