免费注册 查看新帖 |

Chinaunix

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

MySQL5的UTF8资料库仍无法储存GBK的中文字 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-04-12 13:50 |只看该作者 |倒序浏览
用GBK中的一些中文字, 竟无法储入mysql5 的UTF8资料库 ...
即使用phpmyadmin去insert亦不行, 包括此网站亦无法储存 ...
一旦强行去储存则该字之后的内容全部不见 ...
但在Window下用txt档, 以utf8格式是可以储存这些字的,
因本网站无法显示这些字, 只好用JS的escape()将其unicode显示出来 ...
%uD85F%uDD73
%uD860%uDEE2
%uD845%uDC84

MySQL5的utf8还有储存不了的中文字, 真的奇怪  .........

如有大大想知道以上3个中文字, 可用以下程式储为test.html去显示:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<SCRIPT language=javascript>
<!--
        document.write(unescape("%uD85F%uDD73") + '<br>');
        document.write(unescape("%uD860%uDEE2") + '<br>');
        document.write(unescape("%uD845%uDC84") + '<br>');       
//-->
</SCRIPT>
</body>
</html>


[ 本帖最后由 kk298 于 2008-4-12 13:52 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2008-04-12 13:54 |只看该作者

论坛徽章:
0
3 [报告]
发表于 2008-04-12 14:39 |只看该作者
原帖由 yueliangdao0608 于 2008-4-12 13:54 发表
看看这个先

http://topic.csdn.net/u/20071124 ... 5-9930bf3601af.html


多谢楼上大大指点, 但我的不是中文乱码的问题, 我的MySQL5是UTF8,
已可以储存绝大多数的繁简中文字, 只是遇到一些4字节的中文无法
正确处理和储存, 因此奇怪发问…

请求各位将以上3个中文在您的mysql5的utf8资料库看能否储存 ….

对于mysql utf8储存繁简体的有关的设定我早已设好了:
比如: Apache中加入: AddDefaultCharset UTF-8
Php中加入: default_charset = "utf-8"
Mysql中加入:
[mysqld]
init_connect='SET NAMES utf8'
        default-character-set=utf8
[client]
        default-character-set = utf8
创建utf8资料库table用:
CREATE TABLE  IF NOT EXISTS `aat` (
                  `id` char(1) NOT NULL default '1',
                  `myStr` varchar(200) default NULL,
                  PRIMARY KEY  (`id`)
                ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

在连接DB的档中必须加入:
                        $host="localhost";                $DBname="aa";
                        $user= "root";         $passwd  = "";     
                        $link = mysql_connect($host,$user,$passwd) or die ("Fail");
                        $db = mysql_select_db($DBname, $link) or die ("Fail");
                                        // 要在真正query DB取出资料前,加入以下3行
                        mysql_query("SET NAMES 'utf8'");
                        mysql_query("SET CHARACTER_SET_CLIENT=utf8");
                        mysql_query("SET CHARACTER_SET_RESULTS=utf8");

                        $sql  = "select * from aat where crid='1'";
                        $rows = mysql_query($sql);

论坛徽章:
0
4 [报告]
发表于 2008-04-15 17:18 |只看该作者
没人遇上这个问题还是不愿帮人呀 ?! .....

终上在mysql.com找到了解释, 说出来给有需要的人参考一下:

UTF-8分為1至4 bytes的字符:
http://zh.wikipedia.org/w/index.php?title=UTF8&variant=zh-hk

但MySQL 3/4/5 最多只支援 3 bytes UTF-8 (Unicode 3.0), 如果要用到 4 bytes UTF-8 (Unicode 5.0),  则要等到 MySQL 6.0 的版本吧.
http://dev.mysql.com/doc/refman/6.0/en/charset-unicode.html


从未想过MySQL 5.0的UTF8只是支援至3个字节而已 ....
现在唯有等mySQL 6.0的到来了 ...

但目前只能在储入DB前, 将4字节的字变为Unicode, 显示时再变为正常字 ....
打算在用户端submit form之前, 由JavaScript去做 ....

但我不懂得JavaScript如何去判断一个4字节的字呢?
请指教, 谢 ~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP