1.1mysql字符集知识:

概述:字符集就是一套文字符号及其编码,比较规则的集合。 Mysql数据库字符集包括字符集(character)和校对规则(collation)这两个概念。其中字符集用于定义mysql数据库的存储方式,而校对规则是定义字符串的比较方式,并且字符集和校对规则是一对多的关系

查看mysql可用的字符集的命令是show character set;

1.2mysql数据库使用常见字符集介绍:

常用·字符集

长度

说明

GBK

2

不是国际标准,但支持的系统较多

UTF-8

3

中英文合并,建议使用此字符集

utf8mb4

4

UTF-8 Uniconde

Lantin1

1

Mysql默认安装使用的字符集

1.3选择合适的字符集

1)满足应用支持语言的需求,处理各种各样的文字,支持不同语言的国家和地区,应选Unicode字符集,即utf-8。

2)处理数据量较大,且要支持中文,性能要求很高,可选GBK(定长字符集,占用两个字节)对大量运算处理,比较排序,更快,更高。

3)移动互联网业务,建议使用utf8mb4字符集。

2.1mysql字符集的设置

1)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.6.36/share/charsets/ |

2)linux服务器端

[root@db01 mysql]# cat /etc/sysconfig/i18n

LANG="zh_CN.UTF-8

3)临时修改mysql客户端字符集

mysql> set names utf8;

Query OK, 0 rows affected (0.00 sec)

永久修改:

[client]

default-character-set=utf8

4)修改mysql服务器端字符集

在mysqld下添加default-character-set=utf8

Mysql5.5及其以后版本

[mysqld]

character-set-server=utf8

5)修改库表字符集的方法:

修改库:alter database databasename character set ******

修改表:alter table tablename character set ******

库的修改:

例如:show create database oldboyG;

*************************** 1. row ***************************

Database: oldboy

Create Database: CREATE DATABASE `oldboy` /*!40100 DEFAULT CHARACTER SET gbk */

1 row in set (0.00 sec)

oldboy数据库字符集目前是gbk,将其修改为utf8,命令如下;

alter database oldboy character set utf8 collate utf8_general_ci ;

表的修改:

alter table student character set utf8 collate utf8_general_ci ;

2.2生产环境中字符集的修改

说明:如何生产环境中没有调整好字符集的设定,而运行之后发现满足不了需求而调整,但不想丢失数据的话,可以进行字符集的修改,直接通过alter database databasename character set ******和alter table tablename character set ******命令进行修改,只能对修改后插入的数据有效,在修改之前插入的数据依然会保留之前的字符集,要想实现对之前数据也能修改字符集,必须将其数据导出,再经过调整重新导入即可。

模拟过程:

1) 导出表结构

mysqldump -uroot -p --default-character-set=utf8 -d oldboy>oldboy.sql

说明:--default-character-set=utf8 :以什么字符集连接 -d:只导出表结构,不导出数据

手工修改oldboy.sql表中的字符集为新的字符集。

2) 确保数据库不再更新数据,导出数据。

mysqldump -uroot -p --quick --no-create-info --extended-insert --default-character-set=gbk oldboy>data.sql

参数说明:

--quick:功能是从服务器一次一行检索表中的行,而不是检索所有的行,并在输出前将它缓存到内存中,用于转储较大的表。

--extended-insert:使转储文件更小,重新载入文件可以加速插入。

--no-create-info:不会重新创建转储表create table语句。

--default-character-set=gbk:保留原有导出数据的字符集,这样导出的文件不会出现·乱码。

3)打开data.sql,将set names gbk 修改为 set names utf8

4)使用新的字符集创建新的数据库

show create database oldboy default charset utf8;

5)创建表结构,执行oldboy.sql。

mysql -uroot -p oldboy

6)重新导入数据u,执行data.sql。

mysql -uroot -p oldboy