MySQL字符集编码相关

Posted `三一三`

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL字符集编码相关相关的知识,希望对你有一定的参考价值。

Windows 10家庭中文版,mysql  5.7.20,2018-05-07

 

Part.1 查找数据库的字符集编码

查看MySQL字符集编码:status命令

使用命令行登录MySQL服务器,然后输入status命令,可以查看到服务器的字符集编码及其它信息。

从下图可以看到,我的服务器(Server characterset)、数据库(Db characterset)的字符集编码是latin1。

 

上图找到了四个字符集编码,它们各自代表什么意思呢?

-Server characterset

数据库服务器的默认字符集编码,在后续创建数据库时,若无指定字符集编码,则新建的数据库默认使用此字符集编码。

-Db characterset

当前没有选择数据库(use database_name)时,显示新建数据库的默认字符集编码,同Server character;若已选择数

据库,则显示数据库的真实字符集编码。下图显示了一个字符集编码为utf8的数据库的status信息。

-Client characterset、Conn. characterset

客户端本身的字符集编码 和 客户端和服务器此时建立连接所使用的字符集编码。

 

还可以使用show variables命令查看更多字符集编码信息:show variables like \'char%\'

 

show variables还可以查看更多的数据库的信息,可以使用help show variables命令查看它的具体用法

 

说明,show variables命令可以显示数据库的所有系统变量——全部 或者 根据需要查找,里面的有些变量可以放到数据库的启动

配置文件my.ini中,从而修改数据库的配置信息。更多资料和权威信息,请参考官网链接Server System Variables

 

Part.2 修改数据库默认字符集编码

两个问题:

为什么要修改默认字符集编码?

默认的是latin1,不支持中文,而我要存储的数据包括中文,因此,要更改。

当然,不更改也可以,这样的话,每次创建新的数据库时就需要指定字符集编码,如下:

create database if not exists test2 default charset utf8 collate utf8_general_ci;

 

将默认字符集编码修改为什么?

utf8(是utf8,不是utf-8,没有短横线)!

 

两种方式:

1.在命令行客户端修改

set character_set_server=utf8;

警告,这种方式在命令行客户端重启后无效。

试验:修改后创建数据库,检查新建数据库的字符集编码,预期是utf8。

 

2.在数据库服务器配置文件my.ini中修改

在my.ini文件中添加下面两行中任意一行即可默认字符集编码设置为utf8(存在于[mysqld]下面):

character_set_server = utf8
character-set-server = utf8

两行有什么区别吗?第一行用下划线连接,第二行用短横线连接,但是,都有效。

再次强调,是utf8,不是utf-8(短横线)。

这种方式就没有第一种的问题了,但是呢,配置后需要重启数据库服务器才会生效

 

Part.3 附录

1.show variables、show status(显示数据库服务器状态)显示的内容太多——一屏显示不完,怎么办呢?

输出到文件中!

方法如下:

mysql -uroot -p -e "show variables" > d:\\mysql.txt

回车,输入root账号密码,再回车即可将结果保存到d盘的mysql.txt文件中(保存到csv文件中或许更好?)。

注意,show variables命令用双引号括起来,单引号不行

2.可以使用show character set;查看MySQL数据库服务器支持的字符集

3.服务器、数据库、表的字符集编码关系

若在创建数据库时没有指定,则其字符集编码 同 服务器;

若在数据库中创建表时没有指定,则其字符集编码 同 所在数据库。

不过,服务器、数据库、表的编码都可以通过命令行进行修改(各个字段的字符集编码也可以单独指定)。

4.查看表Table的编码

使用show create table...命令,如下图所示。

5.遗留问题

my.ini配置文件中的[mysqld]、[client]、[mysql]分别意味着什么?

 

参考链接:

https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html

https://dev.mysql.com/doc/refman/8.0/en/charset-configuration.html

https://blog.csdn.net/hwhua1986/article/details/53431852

https://blog.csdn.net/enlyhua/article/details/79638776

https://www.cnblogs.com/jiangxiaobo/p/6110647.html

https://zhidao.baidu.com/question/539586616.html

https://www.2cto.com/database/201112/114418.html

https://www.cnblogs.com/candle806/archive/2013/01/14/2859721.html

 

以上是关于MySQL字符集编码相关的主要内容,如果未能解决你的问题,请参考以下文章

MySQL字符编码问题,Incorrect string value

如何对mysql中的字符进行编码转换

linux怎么设置mysql 的编码格式

MySQL字符编码设置方法

更改数据库字符集编码引起的问题

mysql 更改数据库字符编码的方法