论坛首页 综合技术论坛

MySQL4.1的字符集讲解

浏览 32532 次
该帖已经被评为精华帖
作者 正文
   发表时间:2005-01-26  
MySQL数据库的4.1是一个分水岭,4.1直接支持Unicode,以下版本支持的不好;

MySQL JDBC Driver的3.0.16也是一个分水岭,3.0.16版本会取数据库本身的编码,然后按照该编码转换,这种方式和Oracle的JDBC Driver是一样的。例如你的数据库是GBK编码的话,JDBC Driver就会把数据库里面的取出来的字符串按照GBK往unicode转换,送给JVM。因此正确的设置数据库本身的编码就尤为重要。

MySQL JDBC Driver3.0.16以下的版本则不然,它不会那么智能的根据数据库编码来确定如何转换,它总是默认使用ISO8859-1,因此你必须使用 characterEncoding=GBK来强制他把数据库中取出来的字符串按照GBK来往unicode转换。

因此,使用什么数据库版本,不管是3.x,还是4.0.x还是4.1.x,其实对我们来说不重要,重要的有二:

1) 正确的设定数据库编码,MySQL4.0以下版本的字符集总是默认ISO8859-1,MySQL4.1在安装的时候会让你选择。如果你准备使用UTF- 8,那么在创建数据库的时候就要指定好UTF-8(创建好以后也可以改,4.1以上版本还可以单独指定表的字符集)

2) 使用3.0.16以上版本的JDBC Driver,那么你就不需要再写什么characterEncoding=UTF-8
   发表时间:2005-01-27  
robbin 写道
MySQL数据库的4.1是一个分水岭,4.1直接支持Unicode,以下版本支持的不好;

MySQL JDBC Driver的3.0.16也是一个分水岭,3.0.16版本会取数据库本身的编码,然后按照该编码转换,这种方式和Oracle的JDBC Driver是一样的。例如你的数据库是GBK编码的话,JDBC Driver就会把数据库里面的取出来的字符串按照GBK往unicode转换,送给JVM。因此正确的设置数据库本身的编码就尤为重要。

MySQL JDBC Driver3.0.16以下的版本则不然,它不会那么智能的根据数据库编码来确定如何转换,它总是默认使用ISO8859-1,因此你必须使用 characterEncoding=GBK来强制他把数据库中取出来的字符串按照GBK来往unicode转换。

因此,使用什么数据库版本,不管是3.x,还是4.0.x还是4.1.x,其实对我们来说不重要,重要的有二:

1) 正确的设定数据库编码,MySQL4.0以下版本的字符集总是默认ISO8859-1,MySQL4.1在安装的时候会让你选择。如果你准备使用UTF- 8,那么在创建数据库的时候就要指定好UTF-8(创建好以后也可以改,4.1以上版本还可以单独指定表的字符集)

2) 使用3.0.16以上版本的JDBC Driver,那么你就不需要再写什么characterEncoding=UTF-8


谢谢Robbin

项目中两次使用mysql都为encoding的事情困扰
当时就觉得mysql各种版本对encoding的支持不一样
但是由于换个版本就好了,所以一直没有细究

看来这就是靠实力编程和靠运气编程的差别
0 请登录后投票
   发表时间:2005-02-01  
robbin 写道

1) 正确的设定数据库编码,MySQL4.0以下版本的字符集总是默认ISO8859-1,MySQL4.1在安装的时候会让你选择。如果你准备使用UTF- 8,那么在创建数据库的时候就要指定好UTF-8(创建好以后也可以改,4.1以上版本还可以单独指定表的字符集)

2) 使用3.0.16以上版本的JDBC Driver,那么你就不需要再写什么characterEncoding=UTF-8

在linux上怎么设置utf-8?在/etc/my.cnf设置似乎不起作用。
0 请登录后投票
   发表时间:2005-02-01  
"在linux上怎么设置utf-8?在/etc/my.cnf设置似乎不起作用."

在linux就容易了. 最彻底的方法就是用mysql 的source直接编译成支持gbk的, 还可以自己定制 优化mysql的性能.
0 请登录后投票
   发表时间:2005-02-01  
winterwolf 写道
"在linux上怎么设置utf-8?在/etc/my.cnf设置似乎不起作用."

在linux就容易了. 最彻底的方法就是用mysql 的source直接编译成支持gbk的, 还可以自己定制 优化mysql的性能.

照你的意思,我图省事直接用rpm包的是不是没有戏?
还有支持gbk和utf-8一样吗?发现数据库里的数据存储的是gbk,但希望是utf-8。
0 请登录后投票
   发表时间:2005-02-02  
"照你的意思,我图省事直接用rpm包的是不是没有戏?
还有支持gbk和utf-8一样吗?发现数据库里的数据存储的是gbk,但希望是utf-8"

1 rpm包没有戏

2 用utf-8会也有问题 只有用gbk才更避免不必要的转换.
0 请登录后投票
   发表时间:2005-02-05  
数据库,我不是很熟悉,但我很想知道的一点,数据库和应用之间的

编码转换是不是对资源的开销很大?
0 请登录后投票
   发表时间:2005-03-11  
版主,这篇应该加精华吧?
0 请登录后投票
   发表时间:2005-11-11  
请问mysql 4.1以上怎么手动设置字符集,我用的是windows免安装版。
0 请登录后投票
   发表时间:2005-11-12  
引用
请问mysql 4.1以上怎么手动设置字符集,我用的是windows免安装版。


打开你的系统服务MySQL,查看你的服务中的可执行文件路径内容:
1、可执行文件路径仅有%MySQL%/4.1/bin/mysqld-nt.exe的话,修改系统路径下的my.ini
即%WINNT%\my.ini文件,设置字符集
default-character-set=GBK

default-character-set=UTF8

2、如果可执行文件路径是%MySQL%/4.1/bin/mysqld-nt.exe -- xxxx/my.ini的话,就去修改xxxx/my.ini

重启你的MySQL服务。
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics