MySQL中utf8utf8mb4的区别

  • utf8mb4是MySQL在5.3.3后增加的编码,其中mb4的意思是: most byte 4,专门兼容四字节的Unicode

  • 原来的MySQL支持的utf8编码最大字符长度为3字节,若遇到4字节的宽字符就会插入异常

    3字节的utf8最大能编码的Unicode字符为Oxffff,即Unicode中基本多文种平面(BMP),即任何不在基本多文种平面的Unicode字符都无法使用MySQL的utf8字符集进行存储,包括Emoji表情和很多不常用的汉字

  • 当使用utf8字符集时,需要保留长度就是utf8最长字符乘以字符串长度,例CHAR(100),MySQL会保留300字节长度

  • utf8升级utf8mb4步骤

    • 首先将数据库默认字符集有utf8改为utf8mb4,对应的表默认字符集也要改为utf8mb4,已经存储的字段默认字符集也要进行相应调整;

      1
      2
      3
      4
      5
      6
      -- 修改数据库
      ALTER DATABASE db_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
      -- 修改表
      ALTER TABLE table_name CONVERT TO CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
      -- 修改字段
      ALTER TABLE table_name CHANGE column_name column_name VARCHAR(100) CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
    • 修改MySQL配置文件

      1
      2
      3
      4
      5
      default-character = uft8mb4
      character-set-client-handshake = FALSE
      character-set-server = utfmb4
      collation-server = utfmb4_unicode_ci
      init_connect = 'SET NAMES utf8mb4'