设为首页 收藏本站
查看: 536|回复: 0

[经验分享] mysql中的字符集

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-6-30 09:47:38 | 显示全部楼层 |阅读模式
二进制安装的数据库可能会有乱码的问题,编译安装的数据库指定默认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=utf8
1 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数据库常见的字符集介绍
QQ截图20160630094720.jpg
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  = gbk
SET character_set_connection = gbk
SET character_set_results = gbk
法③登录的时候指定字符集
[iyunv@oldboy ~]# 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
[iyunv@oldboy ~]# 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、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-237289-1-1.html 上篇帖子: centos7下yum安装mysql5.6.30及配置多实例 下篇帖子: 使用xtrabackup备份innodb引擎的数据库 mysql
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表