博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mysql数据库字符集初步理解
阅读量:6859 次
发布时间:2019-06-26

本文共 2452 字,大约阅读时间需要 8 分钟。

1.MySQL(4.1以后版本) 服务器中有六个关键位置使用了字符集的概念,他们是:

1
2
3
4
5
6
1
.client
2
.connection
3
.database
4
.results
5
.server
6
.system 

  MySQL有两个字符集概念:

1
2
一个就是字符集本身,
一个是字符集校验规则。  

  字符集影响数据在传输和存储过程中的处理方式,而字符集校验则影响ORDER BY和GROUP BY这些排序方式。

2. 字符集功能细分如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2.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.2
.和传输有关的

  @@character_set_connection

@@character_set_results
@@character_set_client

  character_set_connection: 连接数据库的字符集设置类型,如果jsp没有指明连接数据库使用的字符集类型就按照服务器端默认的字符设置

character_set_results: 数据库给客户端返回时使用的字符集设定,如果没有指明,使用服务器默认的字符集
character_set_client: 客户端使用的字符集,相当于网页中的字符集设置

3.字符集的校对规则

1
2
3
4
5
6
7
字符集的校对规则设定分别由上面的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 受客户端默认字符集影响,其中jsp编译mysql模块时的默认字符集同样也受到它链接的mysql动态库影响,从而影响到php的character_set_connection, character_set_client设定。

4.当默认字符集不是utf8时,设置my.cnf:

1
2
3
[mysqld]
default
-character-set=utf8
default
-collation=utf8_general_ci
//default-character-set只能改变对存储层(server,database,table,column,system)的设定,对于客户端和服务器端的通讯层没有任何影响。

5.查看字符集设置:

1
2
3
4
5
6
7
8
9
10
11
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

6.解决字符集通讯设置不匹配的方法:

1
2
3
4
5
(修改默认的character_set_client,character_set_connection,character_set_result)
 
1
. jsp程序在查询数据库之前,执行mysql_query(”set names utf8;”);
2
.修改my.cnf,在[mysqld]中加入init-connect=”set names utf8” (对于超级用户连接该选项无效)
3
. 启动mysqld 加入参数 –skip-character-set-client-handshake 忽略客户端字符集

  本文转自二郎三郎博客园博客,原文链接:http://www.cnblogs.com/haore147/p/3618028.html,如需转载请自行联系原作者

你可能感兴趣的文章
Zend Studio (eclipse)使用速度优化
查看>>
Linux系统各个目录的一般作用
查看>>
maven安装与配置
查看>>
Windows Phone 8 开发环境配置(记录)
查看>>
MVC
查看>>
使用重置按钮,重置表单信息
查看>>
在指定时间干,必须干(kbmmw 中的事件调度)
查看>>
通过微信查找SAP TCODE代码
查看>>
c 二叉树的使用
查看>>
Helpers\Assets
查看>>
Thrift安装问题
查看>>
Linux常用命令大全
查看>>
JavaScript:下拉列表框的事件处理
查看>>
ASP.NET Aries 3.0发布(附带通用API设计及基本教程介绍)
查看>>
jQuery EasyUI实现关闭全部tabs
查看>>
poj3635Full Tank?[分层图最短路]
查看>>
【USACO 1.4】Mother's Milk
查看>>
CentOs 设置静态IP 方法
查看>>
使用Maven构建多模块项目
查看>>
李洪强经典面试题47--UNIX常用命令
查看>>