MySQL数据库字符集

编程

目录

  • 1.MySQL数据库字符集知识
    • 1.1.什么是字符集
    • 1.2.MySQL数据库字符集
    • 1.3.常用字符集介绍与选择建议
      • 1.3.1.常用字符集介绍
      • 1.3.2.MySQL如何选择合适的字符集
      • 1.3.3.查看MySQL数据库字符集和校对规则
  • 2.MySQL数据库字符集配置
    • 2.1.Linux系统服务端字符集设置
    • 2.2.Linux系统客户端字符集设置
    • 2.3.MySQL服务端数据库字符集设置
    • 2.4.MySQL数据库中的库的字符集设置
    • 2.5.MySQL数据库表的字符集设置
    • 2.6.MySQL数据库客户端字符集设置
  • 3.防止数据库的中文显示乱码
    • 彻底防止MySQL数据库内的数据中文乱码方法
  • 4.更改MySQL数据库库表的字符集
    • 4.1.更改库的字符集
    • 4.2.更改表的字符集
    • 4.3.生产环境更改数据库(含数据)字符集的方法

1.MySQL数据库字符集知识

1.1.什么是字符集

计算机只能识别0和1这样的二进制数字,无论是处理计算机程序,还是进行科学运算,最终都要转换为二进制数据来完成操作;例如,我们输入一个数字“8”,计算机会将其识别成二进制数字“1000”。

但是,计算机要处理的数据不仅仅是数字,还会有字母,为了处理字母,就产生了ASCII码系统。英文字母共有26种变化,算上大小写也才52种变化,即使加上特殊的英文标点符号、特殊字符,变化也不多,而用8位二进制数字可以表达256种字符,也就是说,8位二进制数字就足以胜任英文字符的处理工作了。

但是,各个国家的语言文字大多不同,不仅仅是数字、字母以及特殊字符。例如中国的汉字数量就有数万之多,常用的有几千个。这时,使用ASCII编码就会无法满足需求,于是就有了GBK、BIG5、GB2312这类的字符编码,采用16位二进制数可以表达65535个汉字,这对于常用的汉字使用来说就足够用了。

现在,在简体中文环境下,常用的编码除了GB2312和GB18030之外,还会用到UTF-8。GBK是专门用作中文的字符编码规范,UTF是通用转换格式的缩写,又可称为万国码,理论上来说,UTF可以表达各种文字的编码格式。

字符编码其实就是将人类使用的英文字母、汉字、特殊符号等信息,通过预先设定的转换规则,将其转换为计算机可以识别的二进制数字的一种编码方式。

1.2.MySQL数据库字符集

字符集其实就是一套文字符号及编码,对应的文字及编码,可以将人类可以识别的内容与计算机可以识别的信息进行互相转换。

一个字母表使用了四个字母:A、B、a、b。每个字母赋予一个数值:A=0,B=1,a=2,b=3。字母A是一个符号,数字0是A的编码,这四个字母和它们的编码组合在一起就可以称为一个字符集。

MySQL数据库的字符集不仅包括字符集(CHARACTER),还包括校对规则(COLLATION)。其中,校对规则的作用是定义比较字符串的方式。

假设比较两个字符串的值:A和B。最简单的方法是查找编码:A为0,B为1。因为0小于1,所以可以说A小于B。所做的仅仅是在字符集上应用了一个校对规则。校对规则是一套规则,作用是对编码进行比较。

1.3.常用字符集介绍与选择建议

1.3.1.常用字符集介绍

在操作系统以及各类软件中都有字符集,MySQL也不例外。

常用字符集知识:

常用字符集

最大长度

说明

GB2312

2字节

早期制定的标准,不推荐使用

GB18030

4字节

受一些系统支持,数据库支持的不多,不推荐使用

GBK

2字节

不是国际标准,对中文环境支持的很好,不推荐使用

UTF8

3字节

中英文混合的环境,建议使用此字符集,目前使用的比较多,互联网场景的Linux/UNIX及MySQL都支持UTF8,重点推荐

latin1

1字节

MySQL系统的默认字符集,不推荐使用

utf8mb4

4字节

utf8mb4字符集主要从5.5开始被支持,兼容UTF8,且比UTF8能表示更多的字符,正在成为未来趋势字符集,重点推荐

1.3.2.MySQL如何选择合适的字符集

1、如果存储的是各种各样的语言文字,则可以选择UTF8,这是目前国内应用最为广泛的字符集,没有之一。

2、如果只需要支持中文,并且数据量很大,此外,还包含了大量的运算,则可以选择GBK,理论上其可以获得更高的性能,但不推荐使用。

3、对于新型的互联网以及移动互联网的混合业务,推荐使用utf8mb4字符集替代UTF8字符集。总之,如果没有极特别的需求,请选择UTF8或utf8mb4作为数据库的字符集。

4、如果使用开源程序,则可以根据上述说明进行选择,如果是公司开发人员自己开发产品,那么选择权就在开发人员手里,DBA只能提供建议。

1.3.3.查看MySQL数据库字符集和校对规则

查看当前MySQL系统支持的字符集

MySQL数据库支持的字符集有很多种,通过命令可以查看当前MySQL支持的字符集:

show character set;

2.MySQL数据库字符集配置

设置MySQL的字符集需要考虑到很多个层次,将这些需要考虑的层次大概分为7个级别。

1、操作系统级别。

2、操作系统客户端级别(SSH)。

3、MySQL实例级别。

4、数据库中的库级别。

5、表级别(含字段级别)。

6、MySQL客户端级别(连接及返回结果)。

7、程序代码级别。

2.1.Linux系统服务端字符集设置

很多人在使用MySQL时经常会被中文乱码所困扰,其中Linux系统和连接Linux系统客户端的字符集设置可能就是问题之一,对此,要尽量将系统的字符集和系统中软件的字符集进行统一,设置和生效的方法:

vim /etc/sysconfig/il8n  #配置到配置文件里可以永久生效。

LANG="zh_CN.UTF-8" #LANG为系统字符集环境变量,设置为中文UTF8.

SYSFONT="latarcyrheb-sun16"

source /etc/sysconfig/il8n #使得修改生效。

echo $LANG #检查生效情况。

在Linux服务器里使用MySQL登录到数据库,要注意系统字符集的使用。

2.2.Linux系统客户端字符集设置

常见的连接Linux的客户端为SecureCRT、XShell。

SecureCRT:会话选项-终端-外观-字符编码

XShell:地球-下拉箭头

2.3.MySQL服务端数据库字符集设置

设置服务器的字符集有很多种方法,常用的三种方法:

方法一:在编译安装MySQL的时候指定服务器端字符集。

cmake .

-DDEFAULT_CHARSET=utf8

-DDEFAULT_COLLATION=utf8_general_ci

-DWITH_EXTRA_CHARSETS=all

方法二:编译时没指定字符集,或者指定了不合适的字符集,也还可以在安装后修改配置文件。

[mysqld]

character-set-server=utf8

方法三:可以在启动数据库时,增加选项指定的字符集。

mysqld --character-set-server=utf8

2.4.MySQL数据库中的库的字符集设置

在MySQL中,库的字符集设置一般是在建库的时候指定的,如果在建库的时候未指定,则库的字符集与MySQL数据库实例的字符集一致。可通过命令查看当前实例的字符集:

show variables like "character_set_database%";

show variables like "collation_database%";

创建数据库test,并查看建库的字符集:

create database test;

show create database testG

在编译MySQL时,若指定了正确的字符集或者修改配置文件调整过的服务器的字符集,那么,在以后建库的时候就可以直接执行简化的命令“create database test;”。

也可以在建库的时候指定字符集和校对规则来建库;

create database oldboy default character set utf8 default collate = utf8_general_ci;

"CHARACTER SET UTF8"即为数据库字符集,而“utf8_general_ci”则为校对规则。

2.5.MySQL数据库表的字符集设置

建表的字符集与库的字符集应一致,设置表字符集的命令:

use test;

create table test(id int(4));

show create table testG;

2.6.MySQL数据库客户端字符集设置

对MySQL数据库客户端字符集进行设置,对于防止MySQL更新时,出现中文乱码有极大的影响,设置方法也有几种。

方法一:临时生效单条命令法。

set names utf8;

“set names utf8”也可以用三个命令来替代。

set character_set_client = utf8;

set character_set_results = utf8;

set character_set_connection = utf8;

方法二:登录数据库时指定字符集。

mysql --default-character-set=utf8;

方法三:通过修改my.cnf实现修改MySQL客户端的字符集,配置方法。

[client]

default-character-set=utf8

人工登录数据库执行“set names UTF8”,以及使用MySQL命令指定字符集登录操作,或者更改my.cnf配置文件客户端模块的参数,来实现更改客户端字符集,都是改变了MySQL客户端的client、connection、results3个参数的字符集。

3.防止数据库的中文显示乱码

管理员在配置MySQL数据库字符集时,需要尽可能地确保7大项字符集统一,对于管理员来说,查看数据库字符集的基本方法:

show variables like "character_set%";

character_set_client #客户端字符集

character_set_connection #客户端连接字符集

character_set_database #数据库字符集,配置文件时指定或建库建表时指定

character_set_filesystem #文件系统字符集

character_set_results #客户端返回结果字符集

character_set_server #服务器字符集,配置文件时指定或建库建表时指定

character_set_system #系统字符集

更改Linux系统字符集变量之后,可以查看MySQL中字符集的变化。

彻底防止MySQL数据库内的数据中文乱码方法

字符集的不一致是数据库乱码的罪魁祸首,要想避免MySQL数据库内的数据中文乱码方法,就要遵循7大项字符集设置规则,即Linux系统服务端与Linux系统客户端字符集、MySQL服务端数据库实例与MySQL数据库客户端字符集、MySQL数据库中的库和表的字符集、程序代码的字符集要一致。如果是利用文件还原数据,还要注意文件的编码问题。

4.更改MySQL数据库库表的字符集

4.1.更改库的字符集

管理员可以使用alter命令对数据库的字符集进行更改:

show create database oldboyG

alter database oldboy character set latin1 collate = latin1_swedish_ci;

show create database oldboyG

alter database oldboy character set utf8 collate utf8_general_ci;

show create database oldboyG

4.2.更改表的字符集

管理员也可以使用alter命令对数据库的表的字符集进行更改:

use test;

show create table t1G

alter table t1 character set latin1;

show create table t1G

4.3.生产环境更改数据库(含数据)字符集的方法

对于已经包含了数据的库表,若要对字符集进行调整,就需要将数据先导出,然后更改数据库环境,更改建库和表的字符集之后,重新导入数据,这样才能实现相应的调整。

1、确保数据库不要更新,然后导出所有数据为SQL的文件。

2、针对导出的数据进行字符集替换(替换表和库),例如把GBK改为UTF8。

3、修改my.cnf配置文件,更改MySQL客户端及服务端的字符集,重启生效。

4、导入更改过新字符集的库表的数据,包括表结构语句,然后提供服务。

5、将操作系统、SSH客户端,以及程序更改为对应的新字符集。

更改字符集时,要将小的字符集集合更改为大的字符集集合,不然可能会丢失数据。

原文链接:https://www.cnblogs.com/yanyanqaq/archive/2020/06/19/13164334.html

以上是 MySQL数据库字符集 的全部内容, 来源链接: utcz.com/z/517623.html

回到顶部