mysql字符串乱码_解决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.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)转换会造成信息丢失,反之不会。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值