1 # 字符集和字符序2
3 字符集(character set):定义了字符以及字符编码。4
5 字符序(collation):定义了字符的比较规则。6
7 MySQL支持多种字符集 与 字符序。8
9 -一个字符集对应至少一种字符序(一般是1对多)。10
11 -两个不同的字符集不能有相同的字符序。12
13 -每个字符集都有默认的字符序。14 1. 查看字符集15
16 SHOW CHARACTER SET WHERE Charset="utf8";17
18 ![img](clip_image001.png)19
20 2. 查看字符序21
22 SHOW COLLATION WHERE Charset="utf8";23
24 ![img](clip_image002.png)25
26 3. 查看当前数据库的字符集27
28 SHOW VARIABLES LIKE "%character%";29
30 ![img](clip_image003.png)31
32 # 字符集设置33
34 ## 各级别字符集35
36 ### 服务器默认字符集37
38 1. 用途:39
40 默认的内部字符集。创建数据库或表时,若未指定库或表的字符集、字符序,使用该服务器的服务器默认字符集。41
42 2. 查询Server字符集、字符序43
44 SHOW VARIABLES LIKE "character_set_server";45
46 SHOW VARIABLES LIKE "collation_server";47
48 3. 设置Server字符集49
50 *永久生效,需要重启MySQL服务生效。51
52 修改参数文件my.cnf53
54 [mysqld]55
56 character_set_server=utf857
58 --影响参数:character_set_server 和 character_set_database59
60 --注意:修改后要重启数据库才能生效。61
62 *临时生效,重启MySQL服务后丢失。63
64 mysql>SET GLOBAL character_set_server=utf8;65
66 ### 数据库字符集67
68 1. 用途:指定数据库级别的字符集。不同数据库可以使用不同字符集。69
70 2. 查看字符集:71
72 USE IungoPNT;73
74 SELECT @@character_set_database, @@collation_database;75
76 ![图片打不开](clip_image004.png)77
78 3. 设置字符集:79
80 创建数据库时设置。81
82 CREATE DATABASE IungoPNT DEFAULT CHARACTER SET utf8;83
84 若未指定字符集,使用character_set_server。85
86 ### 表字符集87
88 1. 用途:指定表的字符集。不同表可以使用不同字符集。89
90 2. 查看字符集:91
92 SHOW TABLE STATUS FROM IungoPNT;93
94 ![图片打不开](clip_image006.jpg)95
96 3. 设置字符集:97
98 创建表时设置。99
100 USE IungoPNT;101
102 DROP TABLE IF EXISTS `SysConfig`;103
104 CREATE TABLE `SysConfig` (105
106 `ID` INT NOT NULL AUTO_INCREMENT,107
108 `ParamID` VARCHAR(255) NOT NULL ,109
110 `ParamName` VARCHAR(255) NOT NULL ,111
112 `SubParamID` VARCHAR(255) NOT NULL ,113
114 `Value` VARCHAR(500) NOT NULL ,115
116 PRIMARY KEY (`ID`)117
118
119
120 ) auto_increment=1000 default charset=utf8;121
122 若未指定字符集,使用数据库字符集。123
124 # 列字符集125
126 暂不考虑。127
128 ##字符集系统变量129
130 -character_set_server:默认的内部操作字符集131
132 -character_set_client:客户端来源数据使用的字符集133
134 -character_set_connection:连接层字符集135
136 -character_set_results:查询结果字符集137
138 -character_set_database:当前选中数据库的默认字符集139
140 -character_set_system:系统元数据(字段名等)字符集141
142 -字符集指定143
144 1. 编译时指定145
146 2. 配置文件my.cnf中指定:147
148 [mysqld]149
150 character_set_server=utf8151
152 --影响参数:character_set_server 和 character_set_database153
154 --注意:修改后要重启数据库才能生效。155
156 [client]157
158 default-character-set=utf8159
160 --影响参数:character_set_client,character_set_connection 和character_set_results。161
162 --注意:修改后无需重启数据库。163
164 3. 启动时指定:165
166 a) ./mysqld --character-set-server=utf8 &
167
168 --影响参数:character_set_server 和 character_set_database169
170 b) mysql -uroot -pmysql --default-character-set=utf8171
172 --影响参数:set character_set_client,set character_set_connection,setcharacter_set_results。173
174 4. SQL临时指定:175
176 a) 分别指定177
178 mysql> SET character_set_client =utf8;179
180 mysql> SET character_set_connection =utf8;181
182 mysql> SET character_set_database =utf8;183
184 mysql> SET character_set_results =utf8;185
186 mysql> SET character_set_server =utf8;[]()187
188 b) mysql客户端使用:setnames utf8;189
190 等价于:191
192 set character_set_client=utf8;193
194 set character_set_connection=utf8;195
196 set character_set_results=utf8;197
198 c) set character setutf8;199
200 等价于:201
202 set character_set_client=utf8;203
204 set character_set_results=utf8;205
206 set collation_connection=@@collation_database;207
208 # 字符集转换209
210 1. MySQL Server收到请求时将请求数据从character_set_client转换为character_set_connection;211
212 2. 进行内部操作前将请求数据从character_set_connection转换为内部操作字符集,其确定方法如下:213 使用每个数据字段的CHARACTER SET设定值;214 若上述值不存在,则使用对应数据表的DEFAULT CHARACTER SET设定值(MySQL扩展,非SQL标准);215 若上述值不存在,则使用对应数据库的DEFAULT CHARACTER SET设定值;216 若上述值不存在,则使用character_set_server设定值。217
218 3. 将操作结果从内部操作字符集转换为character_set_results。219
220 4. 乱码原因:221
222 字符集转换过程中造成信息丢失。223
224 大字符集(utf8)往小字符集(gb2312)转换会造成信息丢失,反之不会。