MySQL出现乱码怎么解决
如何修改了系统编码了:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
# centos 6.x 版本是/etc/sysconfig/i18n修改这个文件shell> vim /etc/sysconfig/i18n# 这一行改为utf8LANG=en_US.UTF-8# 修改完,不要重启,立即生效如下shell> source /etc/sysconfig/i18n# centos 7.x 版本是/etc/locale.conf 这个文件[root@mysql-150 ~]# vim /etc/locale.confLANG="en_US.UTF-8"#立即生效[root@mysql-150 ~]# source /etc/locale.conf |
- 数据库层面:
在参数文件中的[mysqld] 下,加入相应utf8字符集
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
# 注意数据库的系统版本5.6.x 和 5.7.x设置字符集参数不一样,8.x和5.7.x设置是一样的#查看当前数据库的字符集参数,查看当前字符集参数mysql> show variables like '%character%';# 查看数据库支持的字符编码,和编码的排序规则mysql> show character set;# 修改sutdents表中sname 字段的字符编码mysql> alter table students modify sname varchar(66) character set gbk;Query OK, 3 rows affected (0.06 sec)Records: 3 Duplicates: 0 Warnings: 0#看看表结构mysql> show create table students;...| students | CREATE TABLE `students` ( `sid` int(11) NOT NULL, `sname` varchar(66) CHARACTER SET gbk DEFAULT NULL, `sex` int(11) DEFAULT NULL, PRIMARY KEY (`sid`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 |...# 查看连接级字符集和排序规则mysql> show variables like '%collation%';+----------------------+-----------------+| Variable_name | Value |+----------------------+-----------------+| collation_connection | utf8_general_ci || collation_database | utf8_general_ci || collation_server | utf8_general_ci |+----------------------+-----------------+ |
从上面示例可以得出:
-
列级别字符集
-
表级别字符集
-
库级别字符集
-
mysql 实例字符集
|
1
2
3
4
5
6
7
8
9
10
11
|
vim /etc/my.cnf[mysqld]init-connect='SET NAMES utf8'character-set-server=utf8然后去数据库操作:mysql> set @@global.character_set_server=utf8;Query OK, 0 rows affected (0.00 sec)mysql> set @@global.init_connect='SET NAMES utf8';Query OK, 0 rows affected (0.00 sec)# 注 用户操作的时候看看有没有super权限,对super用户权限 set names 不生效 |
有人说,修改完还是乱码, 这时候就乱码是哪个库的字符集,哪个表的字符集,哪个字段的字符集,还有操作系统字符集,程序连接的字符集,这些都的查看。
比如:
|
1
2
3
4
5
6
|
# 举例init_connectmysql> SET @@GLOBAL.init_connect='SET AUTOCOMMIT=0;set namesutf8';shell> vim my.cnf[mysqld]init_connect='SET AUTOCOMMIT=0;set names utf8' |
-
每个数据库客户端连接都有自己的字符集和排序规则属性,
客户端发送的语句的字符集是由character_set_client决定,
而与服务端交互时会根据character_set_connection和collation_connection两个参数将接收到的语句转化。当涉及到显示字符串的比较时,由collation_connection参数决定,
-
character_set_result参数决定了语句的执行结果以什么字符集返回给客户端
-
客户端可以很方便的调整字符集和排序规则,比如使用SET NAMES 'charset_name' [COLLATE 'collation_name']表明后续的语句都以该字符集格式传送给服务端,而执行结果也以此字符集格式返回。
set names 字符集
|
1
2
3
4
|
set names charset_name 语句相当于执行了以下三行语句:SET character_set_client = charset_name;SET character_set_results = charset_name;SET character_set_connection = charset_name; |
|
1
2
3
|
SET character_set_client = charset_name;SET character_set_results = charset_name;SET character_set_connection = @@character_set_database; |
数据库从: 全局数据库server字符集——>数据库字符集——> 表字符集——> 列字符集
浙公网安备 33010602011771号