Topic: 终于搞定了mysql 4.1的中文问题:D

  Print this page

1.终于搞定了mysql 4.1的中文问题:D Copy to clipboard
Posted by: wuliang
Posted on: 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

2.Re:终于搞定了mysql 4.1的中文问题:D [Re: wuliang] Copy to clipboard
Posted by: scud
Posted on: 2004-11-01 11:20

建的表或者database是utf-8也可以,如果服务器不是你控制的话

3.Re:终于搞定了mysql 4.1的中文问题:D [Re: wuliang] Copy to clipboard
Posted by: wuliang
Posted on: 2004-11-03 21:45

hehe,竟然加了精:D

4.Re:终于搞定了mysql 4.1的中文问题:D [Re: wuliang] Copy to clipboard
Posted by: chaiwei
Posted on: 2004-11-05 00:51

无论采用什么字符集,只要将被查询的字段属性加为二进制,即可实现中文查询

5.Re:终于搞定了mysql 4.1的中文问题:D [Re: wuliang] Copy to clipboard
Posted by: wes109
Posted on: 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;

6.Re:终于搞定了mysql 4.1的中文问题:D [Re: wuliang] Copy to clipboard
Posted by: lcwling
Posted on: 2005-01-13 21:13

还是老问题,用utf8不知道客户端用什么工具方便view or edit?中文还是显示不太正常,不方便前端查看?!

7.Re:终于搞定了mysql 4.1的中文问题:D [Re: wuliang] Copy to clipboard
Posted by: kirk
Posted on: 2005-03-28 17:39

我试过楼主的方法,只有character_set_system的值为utf8,其他没有任何变化,why?
对了,我的mysql4。1非安装版的,是直接更新4.0的系统(除data目录)。

8.Re:终于搞定了mysql 4.1的中文问题:D [Re: wuliang] Copy to clipboard
Posted by: chengbd
Posted on: 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就可以。而且这是不管是转换了的还是没转换的字段都不会出现乱码。而转换了的字段可以正常的对中文进行排序。

9.Re:终于搞定了mysql 4.1的中文问题:D [Re: wuliang] Copy to clipboard
Posted by: chengbd
Posted on: 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页上的统一即可。

10.Re:终于搞定了mysql 4.1的中文问题:D [Re: wuliang] Copy to clipboard
Posted by: benjaminliang
Posted on: 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了
昨天搞了一天 谢谢楼上各位!!

11.Re:终于搞定了mysql 4.1的中文问题:D [Re: wuliang] Copy to clipboard
Posted by: dazern
Posted on: 2005-05-13 01:44

还是不明白!
问题依旧!

12.Re:终于搞定了mysql 4.1的中文问题:D [Re: wuliang] Copy to clipboard
Posted by: aiff
Posted on: 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\chars
ets/ |
+--------------------------+----------------------------------------------------
-----+
7 rows in set (0.00 sec)

我现在变成这样了 怎么理解Sad
是我以前的表的问题 还是现在的问题没有解决?


   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923