二进制安装的数据库可能会有乱码的问题,编译安装的数据库指定默认utf-8的不会产生乱码
1.编译安装的字符集情况
|
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
|
查看字符集的格式mysql> show create table sanlang \G*************************** 1. row *************************** Table: sanlang
Create Table: CREATE TABLE `sanlang` ( `id` int(11) DEFAULT NULL,
`name` varchar(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf81 row in set (0.00 sec)
mysql>插入数据mysql> insert into sanlang values(22,"刘海笑");
Query OK, 1 row affected (0.00 sec)测试mysql> select * from sanlang;
+------+-----------+| id | name |
+------+-----------+| 1 | xiaoming || 2 | xiaoli || 3 | tt || 4 | gg || 22 | testdata || 22 | 刘海笑 |+------+-----------+6 rows in set (0.00 sec)
mysql> |
更改字符集测试(更改字符集以后可以看出id为22的出现乱码):
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
mysql> set names gbk ;
Query OK, 0 rows affected (0.00 sec) mysql> select * from sanlang;
+------+----------+| id | name |
+------+----------+| 1 | xiaoming || 2 | xiaoli || 3 | tt || 4 | gg || 22 | testdata || 22 | Ц |+------+----------+6 rows in set (0.10 sec)
mysql> |
2.mysql数据库常见的字符集介绍
3.MYSQL如何选择合适的字符集
|
1
2
3
4
5
|
1.如果处理各种各样的文字,发布到不同一眼国家地区,mysql来说UTF-8(每个汉字三个自己),如果应用需要处理英文,仅有少量汉字utf8更好2.如果只需要支持中文,并且数据量很大,性能要求也很高,可选GBK(订场,每个汉字占用双字节,英文也占双字节),如需大量的运算,比较排序等,定长字符集,更快,性能高3.处理移动互联网业务,可能需要使用utf8MP4的字符集4.老师建议:没有特别的需求,就选择utf8的字符集 |
4.查看系统字符集
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
mysql> show character set ;
mysql> show variables like 'character_set%';
+--------------------------+-------------------------------------------+| Variable_name | Value |+--------------------------+-------------------------------------------+| character_set_client | utf8 | #客户端字符集
| character_set_connection | utf8 |#客户端连接字符集
| character_set_database | utf8 |#数据库字符集,配置文件指定或者建表指定
| character_set_filesystem | binary |#文件系统字符集
| character_set_results | utf8 |#返回结果字符集
| character_set_server | utf8 |#服务器字符集,配置文件指定或建库建表指定
| character_set_system | utf8 |#系统字符集
| character_sets_dir | /application/mysql-5.5.49/share/charsets/ |
+--------------------------+-------------------------------------------+8 rows in set (0.00 sec)
mysql> |
5.set names 控制客户端的字符集
可以看出set names只是控制了客户端的字符集
|
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
|
mysql> show variables like 'character_set%';
+--------------------------+-------------------------------------------+| Variable_name | Value |+--------------------------+-------------------------------------------+| character_set_client | utf8 || character_set_connection | utf8 || character_set_database | utf8 || character_set_filesystem | binary || character_set_results | utf8 || character_set_server | utf8 || character_set_system | utf8 || character_sets_dir | /application/mysql-5.5.49/share/charsets/ |
+--------------------------+-------------------------------------------+8 rows in set (0.00 sec)
mysql> set name gbk;
mysql> show variables like 'character_set%';
+--------------------------+-------------------------------------------+| Variable_name | Value |+--------------------------+-------------------------------------------+| character_set_client | gbk || character_set_connection | gbk || character_set_database | utf8 || character_set_filesystem | binary || character_set_results | gbk || character_set_server | utf8 || character_set_system | utf8 || character_sets_dir | /application/mysql-5.5.49/share/charsets/ |
+--------------------------+-------------------------------------------+8 rows in set (0.00 sec)
|
6.客户端字符集统一
|
1
2
3
4
5
6
7
8
9
10
11
12
|
1.客户端字符集统一法①set names utf8
法②下面三个命令代替set names(其实就是更改了client的字符集)
SET character_set_client = gbkSET character_set_connection = gbkSET character_set_results = gbk法③登录的时候指定字符集[[email protected] ~]# mysql -uroot -poldboy123 -S /data/3306/mysql.sock --default-character-set=utf8;
法④通过修改my.cnf 实现修改mysl客户端的字符集,并且永久生效[client]default-character-set = utf8 #不需要重启服务,退出登录就生效
备注:多实例修改客户端 字符集要修改/etc/my.cnf
|
7.更改mysql服务端的字符集
|
1
2
3
4
|
按照要求修改my.cnf参数
[mysqld]
default-character-set = utf8 #适合5.1以及以前的版本
character-set-server = utf8 #适合5.5
|
8.创建库的时候指定字符集
|
1
2
|
mysql> create database oldboy CHARACTER SET gbk COLLATE gbk_chinese_ci; 说明:建表的时候指定字符集,如果不指定字符集,那么表和库的字符一样
|
9.程序也要统一
|
1
|
程序和库表的字符集统一
|
10.系统的字符集
|
1
2
|
[[email protected] ~]# cat /etc/sysconfig/i18n
LANG="zh_CN.UTF-8"
|
11.数据库中执行sql语句的方法
|
1
2
3
|
a.sql语句在windows客户端改成utf8没有签名的格式b.导入数据指定字符集的格式mysql -uroot -poldboy123 --default-character-set=utf8 <test.sql
|
12.更改库字符集的思路(库的表里面已经有数据了)
|
1
2
3
4
5
6
7
|
说明:有数据的情况下,对新数据生效,对老数据库不生效更改库字符集的思想1.数据库不要更新,导出所有的数据2.把导出的数据进行字符集的替换(替换表和库)3.修改my.cnf,更改mysql客户端的服务端的字符集,重启生效4.导入更改过的字符集的数据,包括表结构语句,提供服务5.ssh客户端,以及程序更改为对应的字符集
|
本文转自 小小三郎1 51CTO博客,原文链接:http://blog.51cto.com/wsxxsl/1793875,如需转载请自行联系原作者