[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)
相關文章
相關標籤/搜索