WEB开发网
开发学院数据库MySQL mysql4.0以后的编码配置详解 阅读

mysql4.0以后的编码配置详解

 2008-02-17 15:51:24 来源:WEB开发网   
核心提示:简要说一下mysql4.1以后的问题第一:mysql4.1的存储方式已经是utf8的了,,mysql4.0以后的编码配置详解,也就是说他的文件编码是utf8格式,我们不需要担心会有存储不了的字符第二:mysql服务器需要以一种编码方式来启动,这个是在mysql安装目录下的share/mysql/中,其中有my-smal

简要说一下mysql4.1以后的问题

第一:mysql4.1的存储方式已经是utf8的了。。也就是说他的文件编码是utf8格式,我们不需要担心会有存储不了的字符

第二:mysql服务器需要以一种编码方式来启动,设定连接(通讯)过来的字符编码是什么,就是所谓的我们的交流语言

第三:mysql的client端,需要设定一种编码去和mysql的服务器端通讯,也是交流语言

那么为什么回出现乱码哪?

就是出在这个连接的过程中,试想一个人用英文和你说话,而你只明白中文,真的和小燕子一样,三块肉喂了马吃了。。

那么如何解决乱码的问题哪?

有几个办法:

第一,服务器端mysql和客户端mysql编译时候用相同的charset

./configure --with-extra-charsets=big5,gbk,gb2312,utf8 --with-charset=utf8

其中--with-charset=utf8就是设定服务器或者客户端的默认连接方式中的编码,当然你可以用各种编码,只要统一就可以。

(我感觉这个是吓唬人的,因为就算你用--with-charset=gbk,在日文或者其他文字中也不会出现乱码)

第二,在编译后进行设置,这个也有两种方式,读配置文件,或者直接加参数

先说直接加参数的方式:

以下是我用的一个服务器脚本,用来启动mysql

#!/bin/sh
rundir=`dirname "$0"`
echo "$rundir"
/usr/local/soft/mysql4112/bin/mysqld_safe --user=mysql --pid-file="$rundir"/mysql.pid --datadir="$rundir"/var "$@"-O max_connection
s=500 -O wait_timeout=60 -O key_buffer=32M --port=6000 --socket="$rundir"/mysql.sock --default-character-set=utf8 &

其中可以看到服务器启动的连接编码为utf8,当然你可以用别的方式比如gbk

客户端那更容易了

/$mysqlpath/bin/mysql -hxxxx -uxxx -pxxx -P6000 --default-character-set=utf8

呵呵,然后你在mysql中看到mysql>show 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

说一下参数

character_set_system | utf8 这个是系统的文件编码,所有的都是utf8

| character_set_database | utf8 这个就是我们服务器的启动的时候设置的编码

其他几项是客户端的连接编码

然后说通过my.cnf设置的方法,这个也分服务器和客户端的方式

编译的时候我们可以通过--sysconfdir=/etc的方式设置my.cnf的读取目录

my.cnf的配置,cnf在client端和server端的设置是一样的,位置不同

以下是client端my.cnf一脚

[client]
#password = your_password
port = 3306
socket = /tmp/mysql.sock
default-character-set=utf8

看一下就明白了,服务器端同理,不过是在[mysqld]下。

ps:my.cnf的位置是个问题,如果编译的时候不设置sysconfdir的话,默认是在mysql的安装目录下的etc下面,这个目录需要你自己建一个,使用client端连接既可以读取。

php有个问题,他的mysql连接不会读取mysql目录下的,而是读取/etc的根目录中的配置文件,不知道是不是个bug

ps:如何找到适合我自己的my.cnf文件那,这个是在mysql安装目录下的share/mysql/中,其中有

my-small.cnf

my-medium.cnf

my-large.cnf

my-huge.cnf

my-innodb-heavy-4G.cnf

分别对应数据库的大小设置相应的配置文件,这些设置的不同只对server端起作用。

Tags:

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接