转自:http://www.cjsdn.net/post/view?bid=10&id=120763&sty=1&tpg=1&age=0
中国Java开发网
注册 | 登录 | 帮助 | 搜索 | 排行榜 | 发帖统计
您没有登录
» 中国Java开发网 » Database/JDBC/JDO » MySQL
打印话题 寄给朋友 订阅主题
作者 终于搞定了mysql 4.1的中文问题:D [精华]
wuliang
发贴: 46
积分: 20
于 2004-11-01 11:04
--------------------------------------------------------------------------------
4.0之前用缺省字符集latin1,连接加useUnicode=true&characterEncoding=GBK可以了,
后来因为有子查询的需要,升级到4.1,发现这招失灵,经过一天摸索,终于搞定:D
1、mysql字符集要设成utf8,可以在安装时设置,也可以在my.ini里改(需要重新启动mysql)
#必须在[mysqld]这段
[mysqld]
default-character-set=utf8
这就足够,设置后重启server,用mysqladmin variables命令检查
| 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_general_ci
| collation_database | utf8_general_ci
| collation_server | utf8_general_ci
2、jdbc连接无需加characterEncoding,会自动检测
jdbc:mysql://localhost/test
实际上server端字符集不是utf8的话,加了也没用(jdbc:mysql://localhost/test&characterEncoding=UTF-8或者GBK)
可能还会报错;是utf8的话,加不加都行
3、mysql client记得加--default-character-set
windows平台:
mysql -u root -p --default-character-set=gbk
linux平台:
mysql -u root -p --default-character-set=utf8
否则进去select中文是乱码,insert中文也不能正确保存,一整天主要是被这个困扰~~
这是我的办法,按理mysql字符集是latin1也可以操作中文(4.0就是这样),不过我没试出来,客户端还是需要额外编码
******
windows xp简体中文
redhat fedora core 2, LANG=zh_CN
mysql-4.1.7
wuliang edited on 2004-11-03 22:11
--------------------------------------------------------------------------------
• 一个很好的关于swt布局管理的例子(希望加精)!
作者 Re:终于搞定了mysql 4.1的中文问题:D [Re:wuliang]
scud
CJSDN高级会员
发贴: 107
积分: 10
于 2004-11-01 11:20
--------------------------------------------------------------------------------
建的表或者database是utf-8也可以,如果服务器不是你控制的话
--------------------------------------------------------------------------------
• system.in.read()能够读入INT型的数据吗
作者 Re:终于搞定了mysql 4.1的中文问题:D [Re:wuliang]
wuliang
发贴: 46
积分: 20
于 2004-11-03 21:45
--------------------------------------------------------------------------------
hehe,竟然加了精:D
wuliang edited on 2004-11-03 22:12
--------------------------------------------------------------------------------
• 寻找长期合作伙伴,外包小型专案,适合兼职,每月case稳定名额有限...
作者 Re:终于搞定了mysql 4.1的中文问题:D [Re:wuliang]
chaiwei
发贴: 1
积分: 0
于 2004-11-05 00:51
--------------------------------------------------------------------------------
无论采用什么字符集,只要将被查询的字段属性加为二进制,即可实现中文查询
--------------------------------------------------------------------------------
• 去欧洲玩 只能去一个地区 随便选 去哪儿好呢?
作者 Re:终于搞定了mysql 4.1的中文问题:D [Re:wuliang]
wes109
龙的传人
CJSDN高级会员
发贴: 819
积分: 51
于 2004-12-13 14:39
--------------------------------------------------------------------------------
补充几点:
如果你已经创建了数据库,并且是latin1编码的,还需要修改具体数据库和表的charset
修改数据库的字符集:
ALTER DATABASE `dbname` CHARACTER SET utf8 COLLATE utf8_general_ci;
修改具体表的字符集:
ALTER TABLE `tablename`CHARACTER SET utf8 COLLATE utf8_general_ci;
在建表时指定字符集:
DROP TABLE IF EXISTS `area`;CREATE TABLE `area` ( `code` varchar(4) NOT NULL default '', `name` varchar(10) NOT NULL default '', PRIMARY KEY (`code`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
--------------------------------------------------------------------------------
千年后如若我再生于祖国的河岸
千年后我再次拥有中国的稻田 和周天子的雪山 天马踢踏
和所有以梦为马的诗人一样
我选择永恒的事业.
--------------------------------------------------------------------------------
• 还有半年就没课了,最后一年实习,而我........
作者 Re:终于搞定了mysql 4.1的中文问题:D [Re:wuliang]
lcwling
Java咋就这么难呢?!
CJSDN高级会员
发贴: 342
积分: 82
于 2005-01-13 21:13
--------------------------------------------------------------------------------
还是老问题,用utf8不知道客户端用什么工具方便view or edit?中文还是显示不太正常,不方便前端查看?!
--------------------------------------------------------------------------------
认真对待每一天吧,因为生活每天都是新的!
--------------------------------------------------------------------------------
• Java的JFrame怎么设置最大化!
作者 Re:终于搞定了mysql 4.1的中文问题:D [Re:wuliang]
kirk
发贴: 55
积分: 0
于 2005-03-28 17:39
--------------------------------------------------------------------------------
我试过楼主的方法,只有character_set_system的值为utf8,其他没有任何变化,why?
对了,我的mysql4。1非安装版的,是直接更新4.0的系统(除data目录)。
--------------------------------------------------------------------------------
• 请各位帮忙看看哪里出错了(Cannot invoke length() on the array type char[])
作者 Re:终于搞定了mysql 4.1的中文问题:D [Re:wuliang]
chengbd
版主
发贴: 621
积分: 112
于 2005-04-18 06:18
--------------------------------------------------------------------------------
经过几天的翻阅文档和实验,终于找到了比较好的解决办法。
可以不需要修改my.ini。
在建立数据库的时候,对库和表的字符集设置不太重要,但是对文本类型的字段最好都设置为GBK字符集。
对于已有的数据库可以用以下方法转换字段编码:
ALTER TABLE t MODIFY hoverfly BINARY(100);
ALTER TABLE t MODIFY hoverfly CHAR(100) CHARACTER SET gbk;
注意用此方法如果不修改程序,会发现查询出的结果都是乱码,可以通过在my.ini的[mysqld]段内加default-character-set=gbk来纠正。但是这样你会发现那些没有转换编码的文本字段里的中文都是乱码。
其实有更简单的办法,在进行查询前,只要执行SET character_set_results = NULL就可以。而且这是不管是转换了的还是没转换的字段都不会出现乱码。而转换了的字段可以正常的对中文进行排序。
--------------------------------------------------------------------------------
• 去欧洲玩 只能去一个地区 随便选 去哪儿好呢?
作者 Re:终于搞定了mysql 4.1的中文问题:D [Re:wuliang]
chengbd
版主
发贴: 621
积分: 112
于 2005-04-18 06:19
--------------------------------------------------------------------------------
SET character_set_results = GB2312
在my.ini里
加入
default-character-set=gb2312
当然位置要放对了才可以
create database ......set charset=UTF-8
困扰了1天,昨天看了台湾的一个哥们写的说明才基本搞定。
在my.ini中的两处加入,分别是[mysqld]和[*client]处
default-character-set=gb2312 ,reboot机器(重要)。
在网页中就可以访问了,注意使用可视工具的来维护mysql的,
可能由于不支持中文的编码,插入中文数据后,仍然是乱码。
使用命令行的应该可以了。 另外gb2312也可以改成其他的编码方式,只要和jsp页上的统一即可。
--------------------------------------------------------------------------------
• 一个Java问题请教~(输入一个变量 叫 “11th of January 2002”)
作者 Re:终于搞定了mysql 4.1的中文问题:D [Re:wuliang]
benjaminliang
发贴: 9
积分: 0
于 2005-04-27 11:23
--------------------------------------------------------------------------------
mysql> status
--------------
D:\Program Files\MySQL\MySQL Server 4.1\bin\mysql.exe Ver 14.7 Distrib 4.1.11,
for Win32 (ia32)
Connection id: 1
Current database: qtedu
Current user: root@localhost
SSL: Not in use
Using delimiter: ;
Server version: 4.1.11-nt
Protocol version: 10
Connection: localhost via TCP/IP
Insert id: 98
Server characterset: gbk
Db characterset: latin1
Client characterset: gbk
Conn. characterset: gbk
TCP port: 3306
Uptime: 18 min 49 sec
-----------------
mysql> show variables like 'character%';
+--------------------------+------------------------
-----+
| Variable_name | Value
|
+--------------------------+------------------------
-----+
| character_set_client | gbk
|
| character_set_connection | gbk
|
| character_set_database | latin1
|
| character_set_results | gbk
|
| character_set_server | gbk
|
| character_set_system | utf8
|
表的字符集设置还真不起作用 !
修改了字段的编码方式为gbk后,插入的数据显示都正常在Query Broswer中显示也正常,
不设置建立数据库的字符集
String DBConnStr="jdbc:mysql://localhost:3306/qtedu?user=root&password=benjamin";
在jsp+bean的应用中插入和查询都正常。(用驱动mysql-connector-java-3.1.8-bin.jar)
新建立的数据库会按设置的默认的gbk编码,这时候字段也是默认的gbk了
昨天搞了一天 谢谢楼上各位!!
benjaminliang edited on 2005-04-27 11:39
--------------------------------------------------------------------------------
• 还有半年就没课了,最后一年实习,而我........
作者 Re:终于搞定了mysql 4.1的中文问题:D [Re:wuliang]
dazern
发贴: 11
积分: 3
于 2005-05-13 01:44
--------------------------------------------------------------------------------
还是不明白!
问题依旧!
哎
--------------------------------------------------------------------------------
• "~"非运算的值怎么往后跑了一位?
作者 Re:终于搞定了mysql 4.1的中文问题:D [Re:wuliang]
aiff
发贴: 85
积分: 10
于 2005-06-13 16:31
--------------------------------------------------------------------------------
mysql> SHOW VARIABLES LIKE 'character_set_%';+--------------------------+---------------------------------------------------------+| Variable_name | Value |+--------------------------+---------------------------------------------------------+| character_set_client | latin1 || character_set_connection | latin1 || character_set_database | gbk || character_set_results | latin1 || character_set_server | gbk || character_set_system | utf8 || character_sets_dir | C:\Program Files\MySQL\MySQL Server 4.1\share\charsets/ |+--------------------------+---------------------------------------------------------+7 rows in set (0.00 sec)
我现在变成这样了 怎么理解
是我以前的表的问题 还是现在的问题没有解决?
aiff edited on 2005-06-13 16:34
--------------------------------------------------------------------------------
• 请各位帮忙看看哪里出错了(Cannot invoke length() on the array type char[])
已读帖子
新的帖子
被删除的帖子
返回中国Java开发网论坛
Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2006 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号
客服电话 13606058863 客服信箱 support@cjsdn.net 客服QQ 714913
CREATE DATABASE `dbname` CHARACTER SET utf8 COLLATE utf8_general_ci;
下面是摘自上面的修改默认字符集的片断:
修改数据库的字符集:
ALTER DATABASE `dbname` CHARACTER SET utf8 COLLATE utf8_general_ci;
修改具体表的字符集:
ALTER TABLE `tablename`CHARACTER SET utf8 COLLATE utf8_general_ci;
在建表时指定字符集:
DROP TABLE IF EXISTS `area`;CREATE TABLE `area` ( `code` varchar(4) NOT NULL default '', `name` varchar(10) NOT NULL default '', PRIMARY KEY (`code`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;