mysql编码问题

简要说一下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端起作用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值