zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    ASP.NET MVC案例——————拦截器
    Windows Azure Virtual Network (10) 使用Azure Access Control List(ACL)设置客户端访问权限
    Windows Azure Storage (20) 使用Azure File实现共享文件夹
    Windows Azure HandBook (5) Azure混合云解决方案
    Windows Azure Service Bus (6) 中继(Relay On) 使用VS2013开发Service Bus Relay On
    Azure PowerShell (9) 使用PowerShell导出订阅下所有的Azure VM的Public IP和Private IP
    Windows Azure Service Bus (5) 主题(Topic) 使用VS2013开发Service Bus Topic
    Azure China (9) 在Azure China配置CDN服务
    Windows Azure Storage (19) 再谈Azure Block Blob和Page Blob
    Windows Azure HandBook (4) 分析Windows Azure如何处理Session
  • 原文地址:https://www.cnblogs.com/luo630/p/9003941.html
Copyright © 2011-2022 走看看