Python3 使用 pymysql 连接 MySQL 建表时出现 Warning3719 UTF8 警告


在学习 Python3 爬虫关系型数据库储存时,利用 pymysql 连接 MySQL 建表,测试用的代码如下,第一句 SQL 用于获取当前 MySQL 的版本信息,第二句 SQL 执行创建 spiders 数据库的操作,如果程序代码正确,将会输出 MySQL 的版本信息,并且能查询到 spiders 数据库的存在

import pymysql

db = pymysql.connect(host='localhost', user='root', password='000000', port=3306)
cursor = db.cursor()
cursor.execute('SELECT VERSION()')
data = cursor.fetchone()
print('Database version:', data)
cursor.execute("CREATE DATABASE spiders DEFAULT CHARACTER SET utf8")
db.close()

运行程序,确实输出了 MySQL 的版本信息:Database version: ('8.0.17',),但同时还出现了以下警告:

Warning: (3719, "'utf8' is currently an alias for the character set UTF8MB3, but will be an alias for UTF8MB4 in a future release. Please consider using UTF8MB4 in order to be unambiguous.")
  result = self._query(query)

先查询一下 spiders 数据库是否已经创建成功,使用 mysql -u root -p 命令登录 MySQL,使用 show databases 命令可以查看到 spiders 数据库已经存在,说明创建成功
01
然而程序员是讲究严谨的,即便是已经实现了数据库的创建,但警告信息同样也不能放过,Warning: (3719, "'utf8' is currently an alias for the character set UTF8MB3, but will be an alias for UTF8MB4 in a future release. Please consider using UTF8MB4 in order to be unambiguous.") 大致看一下应该是编码上的问题,百度翻译一下该警告信息:警告:(3719,“utf8”当前是字符集utf8mb3的别名,但在将来的版本中将是utf8mb4的别名。请考虑使用utf8mb4,以便不含糊。”)

解决办法:将代码中的 utf8 改为 utf8mb4 后再次运行就没有警告了!

原理分析:百度了一下,MySQL 中的 utf8 就是 utf8mb3,最大兼容三字节的 unicode 字符,MySQL 在 5.5.3 版本之后增加了 utf8mb4 的编码,mb4 就是 most bytes 4 的意思,专门用来兼容四字节的 unicode 字符,utf8mb4 是 utf8mb3 的超集,utf8mb3 和 utf8mb4 表示的范围如下表:

说明 mysql utf8 / utf8mb3 mysql utf8mb4
max bit 3 4
范围 基本多文种平面 + US-ASCII 辅助平面(Supplementary) + 基本多文种平面 + US-ASCII
unicode范围 U+0000 - U+FFFF U+0000 - U+10FFFFF
常见字符 英文字母,CJK大部分常用字等 CJK非常用字,数学符号,emoji表情等
posted @ 2019-09-02 20:16  TRHX  阅读(500)  评论(0编辑  收藏  举报