Mysql字符集

Posted zhixiaoxiao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mysql字符集相关的知识,希望对你有一定的参考价值。

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

  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)转换会造成信息丢失,反之不会。

 

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

以上是关于Mysql字符集的主要内容,如果未能解决你的问题,请参考以下文章

带有神秘附加字符的 Javascript Date getTime() 代码片段

从mysql的片段中加载ListView

连接MySQL出现错误:ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)(代码片段

2021-12-24:划分字母区间。 字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。返回一个表示每个字符串片段的长度的列表。 力扣763。某大厂面试

21个常用代码片段

使用 json rereiver php mysql 在片段中填充列表视图