• [转]Mysql字符集和字符序及修改方法


    原文地址:RDS MySQL字符集相关说明 (aliyun.com)

    总结:有表情或者特殊字符,字符集使用utf8mb4;需要区分大小写,字符序使用_bin等,_ci不区分大小写

    概述

    本文主要介绍RDS MySQL字符集的相关信息。

    详细信息

    阿里云提醒您:

    • 如果您对实例或数据有修改、变更等风险操作,务必注意实例的容灾、容错能力,确保数据安全。
    • 如果您对实例(包括但不限于ECS、RDS)等进行配置与数据修改,建议提前创建快照或开启RDS日志备份等功能。
    • 如果您在阿里云平台授权或者提交过登录账号、密码等安全信息,建议您及时修改。

    本文主要从以下几个方面介绍字符集:

    字符序命名规则

    字符序是以对应的字符集名称开头、以_ci(不区分大小写)、_cs(区分大小写)、_bin(按编码值比较,区分大小写)等结尾。字符序的作用就是每种不同的字符集在比较时采用的不同的方法,例如:当会话的collation_connction设置为utf8_general_ci字符序时,字符a和字符A是等价的,而当其设置为utf8_bin时,字符a和字符A是不等价的。具体信息请参见下图示例。

    字符编码相关参数

    查看相应数据库的字符集,具体操作如下:

    1. 登录RDS实例,请参见连接MySQL实例
    2. 在目标库中执行以下SQL语句,查看相应数据库的字符集。
       
      show variables like '%character%';
      系统显示类似如下。

      说明:
      • 以上参数必须保证除了character_set_filesystem以外的值相同,才不会出现乱码的情况。
      • character_set_client、character_set_connection以及character_set_results是客户端的设置。
      • character_set_system、character_set_server以及character_set_database是服务器端的设置。
      • 服务器端的参数优先级是character_set_database > character_set_server > character_set_system。
      • character_set_system参数在控制台上暂时不提供更改,但是由于其优先级最低,因此影响不大。修改了客户端字符集、character_set_database、character_set_server之后基本上可以保证不会出现乱码,在代码中设置客户端字符编码时建议通过set names [$Character_Set]来修改客户端的设置。[$Character_Set]为需要设置的字符集。

    字符集相关SQL语句

     
    show global variables like '%char%';                                  #查看RDS实例字符集相关参数设置
    show global variables like 'coll%'; #查看当前会话字符序相关参数设置
    show character set; #查看实例支持的字符集
    show collation; #查看实例支持的字符序
    show create table [$Table_Name]; #查看表字符集设置
    show create database [$Database_Name]; #查看数据库字符集设置
    show procedure status; #显示数据库中所有存储过程的基本信息
    show create procedure [$Procedure_Name]; #显示某一个存储过程的详细信息
    alter database db_name default charset utf8; #修改数据库的字符集
    create database db_name character set utf8; #创建数据库时指定字符集
    alter table tab_name default charset utf8 collate utf8_general_ci; #修改表字符集和字符序

    说明:

    • [$Table_Name]为需要表名。
    • [$Database_Name]为库名。
    • [$Procedure_Name]为存储过程的名称,一般会配合show procedure status;使用。

    示例如下图所示。

    修改字符集

    说明:由utf8修改为utf8mb4字符集不会影响之后的数据质量,且已经存在的数据也不受影响,但是数据存储空间会有所增加。

    控制台上修改字符集参数

    如何修改character_set_server参数,请参见设置实例参数

    使用SQL语句修改数据库字符集

    修改列时,当前列中的所有行都会立即转化为新的字符集。alter table会对表加元数据锁(metadata lock), 详情请参见RDS MySQL表上Metadata lock的产生和处理

    • 修改库:ALTER DATABASE [$Database] CHARACTER SET [$Character_Set] COLLATE [$Collation_Name];
      说明:
      • [$Database]为数据库的库名。
      • [$Character_Set]为字符集名称。
      • [$Collation_Name]为排序规则名称,即字符序。
    • 修改表:ALTER TABLE [$Table] CONVERT TO CHARACTER SET [$Character_Set] COLLATE [$Collation_Name];
      说明:[$Table]为表名。
    • 修改列:ALTER TABLE [$Table] MODIFY [$Column_Name] [$Field_Type] CHARACTER SET [$Character_Set] COLLATE [$Collation_Name];
      说明:
      • [$Column_Name]为字段名。
      • [$Field_Type]为字段类型。

    如下SQL语句所示,分别将dbsdq库、tt2表、tt2表中的c2列修改为utf8mb4字符集。

     
    alter database dbsdq character set utf8mb4 collate utf8mb4_unicode_ci;
    use dbsdq;
    alter table tt2 convert to character set utf8mb4 collate utf8mb4_unicode_ci;
    alter table tt2 modify c2  varchar(10) character set utf8mb4 collate utf8mb4_unicode_ci;

    使用Navicat修改数据库字符集

    • 修改库:
      使用Navicat连接数据库,选择连接的名称,右键单击库的名称,单击编辑数据库,在字符集右侧选择需要的字符集,单击确认即可。
    • 修改表:
      右键单击对应的表,单击设计表,然后单击选项,在字符集右侧选择需要的字符集,单击保存即可。
    • 修改字段:
      单击字段,选择对应的字段,选择需要的字符集,单击保存即可。

    相关文档

  • 相关阅读:
    JQuery2
    Java基础复习4
    HTML基础复习4
    Java基础复习3
    HTML基础复习3
    HTML基础复习2
    HTML基础复习1
    shiro权限管理(认证和授权)
    权限管理(认证和授权)
    关于mybatis动态sql的if标签的一个问题
  • 原文地址:https://www.cnblogs.com/dirgo/p/16812750.html
Copyright © 2020-2023  润新知