python用mysql建表的UTF8MB3、UTF8MB4警告

今天想練習下myslq的數據庫索引,看的教程是數據庫索引教程,結果在創建數據庫表的時候就遇到了一個警告。
這是我的python.py

# !/usr/bin/env python
# -*- coding: utf-8 -*-
"""
@Author: P♂boy
@License: (C) Copyright 2013-2017, Node Supply Chain Manager Corporation Limited.
@Contact: [email protected]
@Software: Pycharm
@File: Mysql.py
@Time: 2018/11/17 20:38
@Desc:MySql
"""

import pymysql

# 打開數據庫連接
db = pymysql.connect('localhost', 'root', '', 'Python')


cursor = db.cursor()

try:
    cursor.execute('DROP TABLE IF EXISTS award')
except:
    print('表award不存在!,直接創建')

else:
    print('原表已刪除!')
finally:
    pass


sql = '''CREATE TABLE award (
   id int(11) NOT NULL AUTO_INCREMENT COMMENT '用戶id',
   aty_id varchar(100) NOT NULL DEFAULT '' COMMENT '活動場景id',
   nickname varchar(12) NOT NULL DEFAULT '' COMMENT '用戶暱稱',
   is_awarded tinyint(1) NOT NULL DEFAULT 0 COMMENT '用戶是否領獎',
   award_time int(11) NOT NULL DEFAULT 0 COMMENT '領獎時間',
   account varchar(12) NOT NULL DEFAULT '' COMMENT '帳號',
   password char(32) NOT NULL DEFAULT '' COMMENT '密碼',
   message varchar(255) NOT NULL DEFAULT '' COMMENT '獲獎信息',
   created_time int(11) NOT NULL DEFAULT 0 COMMENT '創建時間',
   updated_time int(11) NOT NULL DEFAULT 0 COMMENT '更新時間',
   PRIMARY KEY (id)
 ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='獲獎信息表';'''


try:
    cursor.execute(sql)
    db.commit()
    print('事務已提交')
except:
    print('發生錯誤,數據回滾')
    db.rollback()

db.close()
print('數據庫已關閉')

很明顯是建一個很普通的award的表,但是遇到了下面的警告:
C:\Users\MECHREVO\AppData\Roaming\Python\Python36\site-packages\pymysql\cursors.py:170: Warning: (3719, “‘utf8’ is currently an alias for the character set UTF8MB3, which will be replaced by UTF8MB4 in a future release. Please consider using UTF8MB4 in order to be unambiguous.”)
result = self._query(query)
翻譯過來就是:
警告:(3719,“'utf8’目前是字符集UTF8MB3的別名,將被UTF8MB4取代在將來的版本中。請考慮使用UTF8MB4以便明確。“)
這是個警告,表是完全沒有問題地建成了:
在這裏插入圖片描述
雖然這是個警告,暫時可能並不會影響什麼,但是心裏看着就很不舒服,於是查了一下,找了一個還算靠譜的帖子:
https://stackoverflow.com/questions/50032196/django-mysql-utf8-is-currently-an-alias-for-the-character-set-utf8mb3-which-w?rq=1
其中第一個答案:UTF-8 是MySQL之外的世界爲任意數量的字節調用Unicode編碼。
utf8(沒有破折號)是CHARACTER SETMySQL中的一個。它(目前)限於3字節字符,因此不包括一些中文和表情符號字符。utf8mb4是CHARACTER SET在MySQL,處理4個字節的字符。儘管Unicode標準允許使用5字節字符,但在不久的將來不會有任何字符。不要考慮字符集utf16或utf32(UTF-16或UTF-32)。
https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-11.html
說utf8字符集當前是utf8mb3的別名,但此時將成爲utf8mb4的引用。爲避免模糊utf8的含義,請考慮明確指定utf8mb4用於字符集引用而不是utf8。由於您正在使用MySQL 8.0,它很好地處理了utf8mb3和utf8mb4之間的差異(版本5.5和5.6有一些討厭的不兼容性),我看到警告並不是什麼大問題。MySQL 8.0默認爲utf8mb4比5.7更新的排序規則。因此,最初在8.0中創建的數據庫應該比舊版本更好。我建議(對所有MySQL用戶)使用utf8mb4。在可預見的未來,這應該是“最好的”。
大概的意思就是我們現在使用的utf8其實是utf8mb3,但是此時成爲了utf8mb4的引用,需要我們明確指定utf8mb4用於字符集引用而不是utf8
那麼,如何指定呢?說實話我弄了挺長時間修改了加粗樣式**
在這裏插入圖片描述
如圖,已經是utf8mb4還是報警告,哎,希望有經驗的同志留下你寶貴的評論!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章