Home > php教程 > php手册 > 学习PHP:详解mysql4.0以后的编码配置

学习PHP:详解mysql4.0以后的编码配置

WBOY
Release: 2016-06-21 09:00:26
Original
1071 people have browsed it

简要说一下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

CODE:
#!/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一脚

CODE:
[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端起作用。



Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Recommendations
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template