让mysql支持emoji表情编码存储骚气操作

 酷酷的超  mySQL  2020-04-26  122  发表评论

uft8和utf8mb4区别

  • utf8 别名utf8mb3,每个字符最多使用三个字节,仅包含BMP字符

  • utf8mb4,每个字符最多使用四个字节,不仅包含BMP字符,还支持补充字符


emoji表情存储支持

  • 存储emoji表情需要四个字节,因此只能只能使用utf8mb4编码存储

  • mysql5.5.3才开始支持utf8mb4,所以此版本之前均不支持emoji表情存储


mysql设置utf8mb4编码

  • 修改数据库编码
     ALTER DATABASE database_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(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  • 修改mysql配置文件

    linux:my.cnf,windows:my.ini

     [client]
     default-character-set = utf8mb4
     
     [mysql]
     default-character-set = utf8mb4
     
     [mysqld]
     character-set-client-handshake = FALSE
     character-set-server = utf8mb4
     collation-server = utf8mb4_unicode_ci
     init_connect='SET  NAMES utf8mb4'
  • 重启mysql
     #shell脚本,mysql5.5.7脚本是/etc/init.d/mysql,有没有觉得这就是神奇的bug,特么觉得没有review就上release了:
     /etc/init.d/mysqld restart
     
     #service,原理还是调用shell脚本/etc/init.d/mysqld:
     service mysqld restart
     
     #systemctl,linux 2.6.39内核以上版本升级的更强大的管理体系,兼容取代service:
     systemctl start mysqld.service
     
     #windows,net没有restart骚气的操作,只能乖乖熄火启动,不能漂移怎么能忍受,自行上bat(battle):
     net stop mysql
     net start mysql
     
     #lnmp便捷骚操作,原理万变不离其宗,依然是优雅的套壳:
     lnmp mysql restart
  • 修改代码中连接myql的编码方式

    以 Yii2 框架数据库配置为例

     'db' => [
         'class' => 'yii\db\Connection',
         'dsn' => env('DB_DSN'),
         'username' => env('DB_USERNAME'),
         'password' => env('DB_PASSWORD'),
         'charset' => 'utf8mb4',//emoji支持编码,同样可以env,举个栗子
         'tablePrefix' => env('DB_TABLE_PREFIX'),
         'enableSchemaCache' => YII_ENV_PROD,
     ],


由markdown编辑器 typora 发送

所有评论
加载评论 ...
发表评论