今天想练习下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还是报警告,哎,希望有经验的同志留下你宝贵的评论!