标题:
mysql 字符集设定总结
[打印本页]
作者:
xiexie
时间:
2011-6-10 14:38
标题:
mysql 字符集设定总结
MySQL(4.1
以后版本
)
服务器中有六个关键位置使用了字符集的概念,他们是:
client
、
connection
、
database
、
results
、
server
、
system
。
MySQL
有两个字符集概念:一个就是字符集本身,一个是字符集校验规则。字符集影响数据在传输和存储过程中的处理方式,而字符集校验则影响
ORDER BY
和
GROUP BY
这些排序方式。
1.
和存储有关的
服务器字符集
(@@
character_set_server
)
库字符集
(@@
character_set_database
)
表字符集
字段字符集
character_set_server
:
服务器安装时指定的默认字符集设定。
character_set_database
:
数据库服务器中某个库使用的字符集设定,如果建库时没有指明,将使用服务器安装时指定的字符集设置。
character_s
ystem
:
数据库系统使用的字符集设定。
在创建一个表的时候,每个字段只要不是
binary
,都会有一个字符集。如果不指定,那么在
SHOW CREATE TABLE
的时候,它是不会显示出来的。
建表时候,字段字符集的选取方式如下:
* if
字段指定的字符集
* else if
表指定的字符集
* else if @@
character_set_database
* else @@
character_set_server
(
如果没有设定,这个值为
latin1)
2.
和传输有关的
@@
character_set_connection
@@
character_set_results
@@
character_set_client
character_set_connection:
连接数据库的字符集设置类型,如果
php
没有指明连接数据库使用的字符集类型就按照服务器端默认的字符设置
character_set_results:
数据库给客户端返回时使用的字符集设定,如果没有指明,使用服务器默认的字符集
character_set_client:
客户端使用的字符集,相当于网页中的字符集设置
3.
字符集的校对规则
字符集的校对规则设定分别由上面的
character_set_connection, character_set_database, character_set_server
决定
collation_connection
:
连接字符集的校对规则
collation_database
:
默认数据库使用的校对规则。当默认数据库改变时服务器则设置该变量。如果没有默认数据库,变量的值同
collation_server
collation_server
:
服务器的默认校对规则
以上内容中
character_set_client,
character_set_connection,
character_set_results
受客户端默认字符集影响,其中
php
编译
mysql
模块时的默认字符集同样也受到它链接的
mysql
动态库影响,从而影响到
php
的
character_set_connection, character_set_client
设定。当默认字符集不是
utf8
时,设置
my.cnf
[mysqld]
default-character-set=utf8
default-collation=utf8_general_ci
default-character-set
只能改变对存储层(
server,database,table,column,system
)的设定,对于客户端和服务器端的通讯层没有任何影响。
mysql>
SHOW VARIABLES LIKE ‘character_set_%’;
+?????????+?????????????????????????+
| Variable_name
| Value
|
+?????????+?????????????????????????+
| character_set_client
| latin1
|
| character_set_connection | latin1
|
| character_set_database
| utf8
|
| character_set_filesystem | binary
|
| character_set_results
| latin1
|
| character_set_server
| utf8
|
| character_set_system
| utf8
解决字符集通讯设置不匹配的方法:
(
修改默认的
character_set_client
,
character_set_connection
,
character_set_result
)
1.
重新编译
mysql
和
php,mysql
加入编译参数
?default-character-set=utf8
2.
PHP
程序在查询数据库之前,执行
mysql_query(”set names utf8;”);
3.
修改
my.cnf
,在
[mysqld]
中加入
init-connect=”
set names utf8
” (
对于超级用户连接该选项无效
)
4.
启动
mysqld
加入参数
?skip-character-set-client-handshake
忽略客户端字符集
欢迎光临 PHP开发笔记 (http://phpvi.com/)
Powered by Discuz! 6.1.0