---恢复内容开始---

  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.cnf
 53
 54 [mysqld]
 55
 56 character_set_server=utf8
 57
 58                  --影响参数:character_set_server 和 character_set_database
 59
 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=utf8
151
152  --影响参数:character_set_server 和 character_set_database
153
154 --注意:修改后要重启数据库才能生效。
155
156 [client]
157
158 default-character-set=utf8
159
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_database
169
170 b)     mysql -uroot -pmysql --default-character-set=utf8
171
172 --影响参数:set character_set_client,set character_set_connection,set character_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客户端使用:set names 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 set utf8;
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)转换会造成信息丢失,反之不会。

---恢复内容结束---

01-13 00:09