• (3.16)mysql基础深入——mysql字符集


    (3.16)mysql基础深入——mysql字符集

    关键字:mysql字符集,mysql编码

    目录

    1、概念

    2、常用的字符编码

    3、查看mysql字符集

    【3.1】查看服务器支持的字符集

    【3.2】查看字符集的校对规则/排序规则

    【3.3】查看当前数据库的字符集

    【3.4】查看数据库的校对规则/排序规则

     4、mysql字符集设置

    【4.1】设置服务器级别字符集

      【4.1.1】编译时设置  【4.1.2】my.cnf配置文件设置  【4.1.3】环境变量设置  【4.1.4】连接级别设置

    【4.2】设置数据库级别字符集

      【4.2.1】创建数据库时设置字符集

    【4.3】设置表级别/列级别字符集设置、排序规则(校对规则)设置

      【4.3.1】设置表级别字符集 

      【4.3.2】设置列级别字符集

      【4.3.3】设置表级别排序规则(校对规则)

      【4.3.4】设置列级别排序规则(校对规则)

    5、mysql字符集的修改

      【5.1】服务器级别字符集修改  

      【5.2】数据库级别字符集修改

      【5.3】表级别

      【5.4】列级别

      【5.5】连接级别

    6、mysql字符集使用注意事项

      大改小正常,小改大不建议

    1、概念:

      字符集:是一套字符与字符编码的集合,用于显示一些抽象的符号

      校验规则:字符集的排序规则

    2、常用的字符编码

      ASCII:美国信息交换码  gb2312:不到8K字符集,中文字符集,包含ASCII

      GBK:微软研究出来的在gb2312  latin1:拉丁文

      UniCode:万国码,所有国家的所有字符代码都包含

      UTF8是unicode万国码/统一码的优化实现

      UTF8mb4是UTF8的更高级版本,修复了UFT8对一些诸如表情等字符集不支持等问题。

      UTF8mb4是UTF8的超集

    注意:

      gbk :1个字符占用2个字节  UTF8:一个字符占3个字节  UTF8mb4:一个字符占用4个字节

    3、查看mysql字符集

    【3.1】查看服务器支持的字符集

      show character set;

      select * from information_schema.character_sets;

      select * from information_schema.collations; 

    【3.2】查看字符集的校对规则/排序规则

      show collation;

      show collation like '%utf8%'

    【3.3】查看当前数据库的字符集

      show variables like 'character%'; 

       

     character_set_client      :客户端
     character_set_connection     :客户端与服务器连接的字符集
     character_set_database     :默认数据库的字符集
     character_set_filesystem    :在操作系统上,文件名转化为这个字符集
     character_set_results       :返回给客户端的结果集 
     character_set_server       :数据库服务的字符集
     character_set_system      :系统的字符集
     character_sets_dir        :数据库字符集目录

    【3.4】查看数据库的校对规则/排序规则

      show variables like 'collation%';

         

      

      ci:不区分大小写的排序规则

      cs:区分大小写的排序方式

      bin:二进制的排序方式

     4、mysql字符集设置

    【4.1】设置服务器级别字符集

    【4.1.1】编译时设置  【4.1.2】my.cnf配置文件设置  【4.1.3】环境变量设置  【4.1.4】连接级别设置

    【4.1.1】编译时设置  

      cmake:

        --default_charset=utf8 --default_collation=utf8_general_ci -dwith_extra_charsets=all

    【4.1.2】配置文件my.cnf指定  

     

    [mysqld]
    
    character_set_server=utf8
    -- skip-character-set-client-handshake=1 客户端按照服务器端字符集
    #即客户端忽略本身字符集,而使用服务器端字符集,1为生效,0为不生效
    
    #否则需要在客户端指定
    [client]
    default-character-set=utf8

      

    【4.1.3】环境变量配置

        vim ~/.bash_profile

        输入:export LANG=en_US.UTF8

          

        then  

        source ~/bash_profile

          

        其他任意窗口,直接到linux界面,source一下该文件即可。

    【4.1.4】连接级别设置

    #查看
    show variables like 'character%';

    #启动时指定 mysqld
    --character-set-server=utf8 & #客户端连接时指定 mysql -uroot -p --character-set-server=utf8 #临时指定 set character_set_client   = utf8 set character_set_connection = utf8   set character_set_database   = utf8   set character_set_results   = utf8 set character_set_server    = utf8

    #统一设置
    set names utf8;
    #相当于
    set character_set_client   = utf8
    set character_set_connection = utf8
    set character_set_results   = utf8
     

     

    【4.2】设置数据库级别字符集

    【4.2.1】创建数据库时设置字符集

    -- 查看
    show create database test;

    -- 查看排序规则
    show variables like 'collation%';

    -- 建库时设置字符集,建库时设置排序规则
    create
    database test charset=utf8 collate utf8_general_ci;
    -- 子句: charset
    =utf8;  
    default charset=utf8;
    charset utf8;
    default charset utf8;
    char set=utf8;
    default char set utf8;
    default char set utf9;
    character set=utf8;
    default character set=utf8;
    character set utf8;
    default character set utf8;

    【4.3】设置表级别/列级别字符集设置、排序规则(校对规则)设置

    【4.3.1】设置表级别字符集

      

    -- 查看
    show create table test101;
    
    -- 建表时使用 create table test101( n1 int, n2 int ) engine=innodb default charset=utf8;

    【4.3.2】设置列级别字符集

    -- 查看
    show create table test102;
    
    -- 建表时使用
    create table test102(
     n1 varchar(10) char set utf8,
     n2 varchar(10) charset utf8
    ) engine=innodb ;

    【4.3.3】设置表级别排序规则(校对规则)

    -- 查看
    select * from information_schema.columns where table_name = 'test102';
    
    -- 建表时设定表级排序规则
    create table test102(
     n1 varchar(10) char set utf8,
     n2 varchar(10) charset utf8
    ) engine=innodb default charset utf8 collate utf8_general_ci;

    【4.3.4】设置列级别排序规则(校对规则)

    -- 查看
    select * from information_schema.columns where table_name = 'test102';
    
    -- 建表时设定表级排序规则
    create table test102(
     n1 varchar(10) char set utf8 collate utf8_general_ci,
     n2 varchar(10) charset utf8 collate utf8_general_ci
    ) engine=innodb ;

    5、mysql字符集的修改

    【5.1】服务器级别字符集修改  
    【5.2】数据库级别字符集修改
    【5.3】表级别
    【5.4】列级别
    【5.5】连接级别
     
     
     
    5.1】服务器级别字符集修改
    
      -- 注意:生产环境不要随便改,会出问题。下面只针对新库或没有数据的库;
    5.1.1】临时更改:set global character_set_server=utf8;
    
    【5.1.2】永久修改:修改my.cnf
    
      [mysqld]
    
      character_set_server=urtf
    
    
    【5.2】数据库级别字符集修改
    
    【5.2.1】临时更改:set global character_set_server=utf8;
    
    【5.2.2】永久修改:alter database test character set utf8 collate utf8_general_ci;
    
    【5.3】表级别
    
    alter table test default charset utf8;
    
    【5.4】列级别
    
    alter table test.n1 change dname dname varchar(15) character set utf8 collate utf8_general_ci;
    
    【5.5】连接级别
    
    【5.5.1】临时修改:set names utf8;
    
    【5.5.2】永久修改:
    
    [client]
    
    default-character-set=utf8

    6、mysql字符集使用注意事项

    修改建议:

      大字符集-》改小字符集 ,正常

      小字符集-》改大字符集,故障

    比如,你好   在gbk里面,1个汉字=2个字符,这里只需要varchar(4)即可

    但是 在utf8里面,1个汉字=2个字符,这里需要varchar(6)

    所以,gbk->utf8 会因为字段空间不够而导致截断。反之则没关系

    如何解决小字符集转大字符集?

    比如gbk 该字段有2个汉字 "你好",字段类型为varchar(4)

    如果要转成UTF8,把字段改成varchar(6)即可

  • 相关阅读:
    MySQL约束笔记
    MySQL 存储过程入门
    数据库范式
    Hibernate 懒加载 错误----no session
    复选框 checkbox 选中事件
    Hibernate 三种状态变化 与 sql 语句的关系
    Spring 4 + Hibernate 4 下 getCurrentSession()的使用情况
    35个java代码性能优化总结
    为什么 Java中1000==1000为false而100==100为true?AND "2+2=5"?
    MyBatis对象关联关系----多对多的保存与查询
  • 原文地址:https://www.cnblogs.com/gered/p/10645739.html
Copyright © 2020-2023  润新知