python用mysql建表的UTF8MB3、UTF8MB4警告

14 篇文章 0 订阅
9 篇文章 0 订阅

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值