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

  • 相关阅读:
    NET 事件与委托
    NET高级 REF OUT
    缓冲池
    NET高级 EQUAL相等
    装箱拆箱
    CTS、CLS、CLR
    结构体及引用类型
    NET高级-深拷贝浅拷贝
    密闭类 静态 类及扩展方法
    NET高级-索引器
  • 原文地址:https://www.cnblogs.com/luo630/p/9003941.html
Copyright © 2011-2022 走看看