mysql 默认字符集概述
首先,MySQL的字符集问题主要是两个概念:
- haracter Sets
- Collations
前者是字符内容及编码,后者是对前者进行比较操作的一些规则。这两个参数集可以在数据库实例、单个数据库、表、列等四个级别指定。
对于使用者来说,一般推荐使用utf8编码来存储数据
。而要解决乱码问题,不单单是MySQL数据的存储
,还和用户程序文件的编码方式
、用户程序和MySQL数据库的连接方式
都有关系。
服务端
编译安装Mysql时可以指定默认字符集 -- 将编码问题扼杀在摇篮里
MySQL有默认的字符集,这个是安装的时候确定的,在编译MySQL的时候可以通过这两个参数来指定默认的字符集为utf8
在MySQL5.5版本中
DEFAULT_CHARSET=utf8
DEFAULT_COLLATION=utf8_general_ci
在mysql5.1版本中
--with-charset=utf8
--with-collation=utf8_general_ci
这样指定后,客户端连接到数据库的编码方式也默认是utf8了,应用程序不需要任何处理。
二进制安装后修改默认字符集 -- 补救行动
通过二进制程序的方式安装,那么这时候MySQL的默认字符集是latin1
,可以修改my.cnf文件中参数,改变默认字符集。
首先,解决数据存储和比较的问题,但是对客户端的连接是没有作用的。
- 在[mysqld]下添加
mysql 5.5 版本
character-set-server=utf8
mysql 5.1 版本
default-character-set=utf8
- 在
[client]
下添加
default-character-set=utf8
这样建数据库建表的时候的默认字符集就是utf8
。
客户端
客户端登录时需要设置这几个参数,但这三个参数是不能写在配置文件my.cnf里,只能通过set命令来动态修改
SET character_set_client = utf8
SET character_set_results = utf8
SET character_set_connection = utf8
init_connect命令在每个普通用户连接上来的时候都会触发执行,可以在[mysqld]
部分增加以下一行设置连接字符集:
在[mysqld]
下添加:
init_connect = 'SET NAMES utf8'
但是要注意的是,这个命令对具有super权限的用户是不生效的。