---恢复内容开始---
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)转换会造成信息丢失,反之不会。
---恢复内容结束---