django.db.utils.operationalerror:\xF0\x9F\x9....报错解决办法

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 在将Hexo的.md文件迁移至Django博客时遇到 OperationalError: (1366, "Incorrect string value"),原因是.md文件包含MySQL不支持的4字节UTF8字符。解决方案:1) 将数据库和字段的字符集改为utf8mb4;2) 在Django的MySQL连接串中设置字符集为utf8mb4。问题解决后,顺利插入数据。更多详情见博客:[http://xiejava.ishareread.com/](http://xiejava.ishareread.com/)

一、问题现象

今天在迁移hexo的.md博客文件到django的博客程序的时候报错了,具体报错信息如下。

File "D:\project\pythonproject\work\ishareblog\venv\lib\site-packages\django\db\backends\mysql\base.py", line 75, in execute
    return self.cursor.execute(query, args)
  File "D:\project\pythonproject\work\ishareblog\venv\lib\site-packages\MySQLdb\cursors.py", line 206, in execute
    res = self._query(query)
  File "D:\project\pythonproject\work\ishareblog\venv\lib\site-packages\MySQLdb\cursors.py", line 319, in _query
    db.query(q)
  File "D:\project\pythonproject\work\ishareblog\venv\lib\site-packages\MySQLdb\connections.py", line 254, in query
    _mysql.connection.query(self, query)
django.db.utils.OperationalError: (1366, "Incorrect string value: '\\xF0\\x9F\\x98\\x82\\xE5\\x93...' for column 'content' at row 1")

报错现象

后来发现是因为.md文件中的内容含有mysql不能识别4个字节的utf8编码的字符,抛出了异常。类似于这种4个字节☺、��

报错原因

二、解决办法

1、修改mysql的数据库的字符集和的字符集

修改数据库的字符集为utf8mb4

在这里插入图片描述

修改字段的字符集为utf8mb4

在这里插入图片描述

2、在djanog的mysql连接串属性中加入字符集为utf8mb4的设置

在这里插入图片描述

修改完成后,插入正常。


博客地址:http://xiejava.ishareread.com/

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
6月前
|
Linux 数据库管理 Python
CentOS7编译安装Python3.10(含OpenSSL1.1.1安装),创建虚拟环境,运行Django项目(含sqlite版本报错)
CentOS7编译安装Python3.10(含OpenSSL1.1.1安装),创建虚拟环境,运行Django项目(含sqlite版本报错)
798 4
|
前端开发 关系型数据库 MySQL
Python Django开发 异常及解决办法(一)
该错误表明views.py中没有return一个返回值给前端。
Python Django开发 异常及解决办法(一)
|
3月前
|
Linux Python
解决django项目报错很离谱的报错之RuntimeError: populate() isn't reentrant
解决django项目报错很离谱的报错之RuntimeError: populate() isn't reentrant
|
3月前
|
关系型数据库 MySQL 数据库连接
9-13|django.db.utils.OperationalError: (2006, 'Server has gone away') 报错
9-13|django.db.utils.OperationalError: (2006, 'Server has gone away') 报错
|
7月前
|
Linux 网络安全 Python
解决方案:Centos7运行Django项目报错no module named _ssl
解决方案:Centos7运行Django项目报错no module named _ssl
173 0
|
关系型数据库 MySQL 网络安全
【Django】执行python manage.py makemigrations报错的解决方案
【Django】执行python manage.py makemigrations报错的解决方案
|
Linux Shell Swift
django(二)centos安装django3.2报错SQLite 3.8.3 or later is required (found 3.7.17)
我正在参加「掘金·启航计划」 Centos安装diango3.2框架请参照《django(一)ubuntu18.04安装框架》 在运行: 复制代码 python3 manage.py runserver 0.0.0.0:81 的时候报错: swift 复制代码 django.core.exceptions.ImproperlyConfigured: SQLite 3.8.3 or later is required (found 3.7.17). 报错的大体意思是:对sqlite最低版本的需求的3.8.3,但是现在只找到了3.7.17。
149 1
|
关系型数据库 MySQL 数据库
Django迁移数据库报错你遇到了吗?
最新版本创建应用后,迁移数据库报错怎么办?
|
NoSQL 关系型数据库 MySQL
[Python] Django 报错记录与解决
[Python] Django 报错记录与解决
|
关系型数据库 MySQL 数据库
django.db.utils.ProgrammingError: 1146 的解决办法
在models中设置完数据库相关的东西后执行命令 python manage.py makemigrations 此处无错误 再次执行 python manage.py migrate 发生报错 错误信息很长,仔细查找,发现错误根源 django.
8333 0