[MySQL]支持 emoji(字符集问题)

问题的根源

主要问题就是在字符集,通常解决这种问题都是靠试验。我实验了一通,得出的结论和你们分享一下(若有错误,还望指正):python

  1. 数据库的字符集
  2. 数据库链接的字符集

配置方法

  1. 设置数据库的字符集为utf8mb4:建立数据库时(注意:是数据库),指定字符集(charset)和对比算法(collate)CREATE DATABASE mydatabase CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;,后面再说 collate干吗的。mysql

  2. 设置数据库链接的字符集为utf8mb4:在创建 mysql 数据库链接时,指定字符集(charset),下面用 pyton 的 pymsql 链接数据库姿式举例:算法

    import pymysql
    
    params = {
            'host': '127.0.0.1',
            'port': 3306,
            'db': 'xueweihan',
            'user': 'root',
            'password': '',
            'charset': 'utf8mb4'} # set charset
    
    connection = pymysql.connect(**params)

不一样字符集,对比方式(collate)也不同,因此须要指定对比的规则,utf8mb4_unicode_ci就是utf8mb4字符集对应的对比规则。比方说字符集为utf8mb4数据库,执行 sql 语句: select * from boy where name='xueweihan',就须要用指定的collate规则,来过滤数据库中的纪录。sql

使用姿式

建立数据库:
CREATE DATABASE mydatabase CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;数据库

链接数据库:code

import pymysql

params = {
        'host': '127.0.0.1',
        'port': 3306,
        'db': 'xueweihan',
        'user': 'root',
        'password': '',
        'charset': 'utf8mb4'} # set charset

connection = pymysql.connect(**params)
相关文章
相关标签/搜索