终于搞定了mysql 4.1的中文问题:D(转帖)

转自: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

One thought on “终于搞定了mysql 4.1的中文问题:D(转帖)”

  1. 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;

Comments are closed.