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_system: 数据库系统使用的字符集设定。
在创建一个表的时候,每个字段只要不是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_clientcharacter_set_connection: 连接数据库的字符集设置类型,www.linuxidc.com如果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_cidefault-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 忽略客户端字符集
MySQL关闭问题创建表空间遇到的字符大小些问题相关资讯 MySQL教程
- 30分钟带你快速入门MySQL教程 (02月03日)
- MySQL教程:关于I/O内存方面的一些 (01月24日)
- CentOS上开启MySQL远程访问权限 (01/29/2013 10:58:40)
| - MySQL教程:关于checkpoint机制 (01月24日)
- MySQL::Sandbox (04/14/2013 08:03:38)
- 生产环境MySQL 5.5.x单机多实例配 (11/02/2012 21:02:36)
|
本文评论 查看全部评论 (1)
评论声明- 尊重网上道德,遵守中华人民共和国的各项有关法律法规
- 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
- 本站管理人员有权保留或删除其管
|