mysql字符集总结

Author Avatar
呃哦 7月 13, 2017
  • 查看数据库支持的字符集:
    SHOW CHARACTER SET;
  • 查看数据库当前使用的字符集:
    SHOW VARIABLES LIKE '%char%';

    各字段含义

    注:Linux下默认字符集是latin1,不支持中文。

  • 修改数据库字符集:
    alter database database_name character set xxx;

  • 修改表字符集:
    alter table table_name character set xxx;
  • 修改表字符集的同时转换已有列字符集:
    alter table table_name convert to character set xxx;
  • 修改列字符集

     ALTER TABLE table_name MODIFY
      column_name {CHAR | VARCHAR | TEXT} (column_length)
      [CHARACTER SET charset_name]
      [COLLATE collation_name]
    
  • 字符集校对规则(COLLATION)

    在字符集内部进行字符比较的规则,如大小写敏感等

  • 字符集校对规则特征:

    1. 两个不同的字符集不能有相同的校对规则
    2. 每个字符集有一个默认校对规则
    3. 存在校对规则命名约定:以其相关的字符集名开始,中间包括一个语言名,并且以_ci(大小写不敏感)、_cs(大小写敏感)或_bin(二元)结束。
  • 修改数据库默认字符集方法:

    • set variable_name=character_set
      eg: set character_set_database=utf8mb4

      这种方法设置的字符集仅在此次连接,回话有效,重启后恢复默认

    • 在my.cnf配置文件设置字符集默认参数
      [client]
      # 设置客户端字符集
      default-character-set = utf8mb4
      [mysqld]
      # 设置服务端默认字符集
      character-set-server = utf8mb4
      # 设置服务端字符集默认校对规则
      collation-server = utf8mb4_unicode_ci
      # 设置拒绝客户端发送的字符集设置信息,即以服务端设置的字符集为准,可以防止客户端误操作
      character-set-client-handshake = FALSE
      
      注:在MySQL5.5.3之前,字符集在my.cnf中的配置为:

      [mysqd]
      default-character-set=utf8mb4
      但是在5.5.3中弃用了这个属性,详见文档

  • 注:emoji表情为四个字节,而utf8是三个字节的,因此用utf8存储emoji表情会报错 Incorrect string value: '\xF0\x9F\x98\x84\xF0\x9F,必须用utf8mb4,utf8mb4是用四个字节存储