阿里云rds+django存储emoji utf8mb4(python2和python3)

2024-05-07 06:18

本文主要是介绍阿里云rds+django存储emoji utf8mb4(python2和python3),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

python2和python3情况不同,以下分别叙述。在第一章中的所有设置,第二章节不用执行

一、基础环境为python2,mysql5.6, django1.XX

1.mysql客户端,找到/etc/mysql路径下的my.cnf文件

[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
init_connect='SET NAMES utf8mb4'

保存, service mysql restart ,检查字符集

mysql> SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';

2.设置rds参数 在控制台  参数配置 中修改 character_set_server 参数为 utf8mb4。提交会自动重启(rds不会停止工作)

3.改库表编码:

ALTER DATABASE test_data_name CHARACTER SET=utf8mb4 COLLATE=utf8mb4_general_ci;

ALTER TABLE  test_table CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

4.django配置settings, DATABASES  default添加  OPTIONS': {'charset':'utf8mb4'},  

如果报错,是因为python-mysqldb包版本低于1.2.5,如实apt方式安装需要先删除:apt-get remove --purge python-mysqldb

再安装:pip install mysql-python

二、基础环境为python3,mysql8, django3.XX

1.首先不需要指定所有表为utf8mb4编码,只需要将所需表改变字符集即可,如存储微信昵称的表

ALTER TABLE  appuser CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

2.当这个model的__str__函数返回结果中包含存储存储emoji表情的字段时,会无法提交表单,例如

class AppUser:nickname = ...def __str__(self):return self.nickname #此字段含有emoji表情

admin后台会无法创建此AppUser的数据,原因在于django_admin_log为utf8编码,会报错

"Incorrect string value: '\\xF0\\x9F\\x98\\x8A' for column 'object_repr' at row 1"

此时只需要将将django_admin_log编码改为utf8mb4即可

ALTER TABLE  django_admin_log CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

3.使到RDS实例的会话连接为utf8mb4编码

django配置settings, DATABASES  default添加  OPTIONS': {'charset':'utf8mb4'},  

4.如果在获取数据时使用的requests包,务必将返回结果以utf8mb4为编码。

def method_get_api(url, query_string={}, json_loads=True):response = requests.get(url, query_string)response.encoding = 'utf8mb4' #解析emoji表情,必须加此行,否则存入数据库的数据不正确if json_loads:return json.loads(response.text)else:return response.text

 

这篇关于阿里云rds+django存储emoji utf8mb4(python2和python3)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/966551

相关文章

MySQL存储过程之循环遍历查询的结果集详解

《MySQL存储过程之循环遍历查询的结果集详解》:本文主要介绍MySQL存储过程之循环遍历查询的结果集,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言1. 表结构2. 存储过程3. 关于存储过程的SQL补充总结前言近来碰到这样一个问题:在生产上导入的数据发现

基于Python+PyQt5打造一个跨平台Emoji表情管理神器

《基于Python+PyQt5打造一个跨平台Emoji表情管理神器》在当今数字化社交时代,Emoji已成为全球通用的视觉语言,本文主要为大家详细介绍了如何使用Python和PyQt5开发一个功能全面的... 目录概述功能特性1. 全量Emoji集合2. 智能搜索系统3. 高效交互设计4. 现代化UI展示效果

MySQL 存储引擎 MyISAM详解(最新推荐)

《MySQL存储引擎MyISAM详解(最新推荐)》使用MyISAM存储引擎的表占用空间很小,但是由于使用表级锁定,所以限制了读/写操作的性能,通常用于中小型的Web应用和数据仓库配置中的只读或主要... 目录mysql 5.5 之前默认的存储引擎️‍一、MyISAM 存储引擎的特性️‍二、MyISAM 的主

Linux lvm实例之如何创建一个专用于MySQL数据存储的LVM卷组

《Linuxlvm实例之如何创建一个专用于MySQL数据存储的LVM卷组》:本文主要介绍使用Linux创建一个专用于MySQL数据存储的LVM卷组的实例,具有很好的参考价值,希望对大家有所帮助,... 目录在Centos 7上创建卷China编程组并配置mysql数据目录1. 检查现有磁盘2. 创建物理卷3. 创

python3 pip终端出现错误解决的方法详解

《python3pip终端出现错误解决的方法详解》这篇文章主要为大家详细介绍了python3pip如果在终端出现错误该如何解决,文中的示例方法讲解详细,感兴趣的小伙伴可以跟随小编一起了解一下... 目录前言一、查看是否已安装pip二、查看是否添加至环境变量1.查看环境变量是http://www.cppcns

使用Python实现调用API获取图片存储到本地的方法

《使用Python实现调用API获取图片存储到本地的方法》开发一个自动化工具,用于从JSON数据源中提取图像ID,通过调用指定API获取未经压缩的原始图像文件,并确保下载结果与Postman等工具直接... 目录使用python实现调用API获取图片存储到本地1、项目概述2、核心功能3、环境准备4、代码实现

SpringBoot项目中Redis存储Session对象序列化处理

《SpringBoot项目中Redis存储Session对象序列化处理》在SpringBoot项目中使用Redis存储Session时,对象的序列化和反序列化是关键步骤,下面我们就来讲讲如何在Spri... 目录一、为什么需要序列化处理二、Spring Boot 集成 Redis 存储 Session2.1

基于MongoDB实现文件的分布式存储

《基于MongoDB实现文件的分布式存储》分布式文件存储的方案有很多,今天分享一个基于mongodb数据库来实现文件的存储,mongodb支持分布式部署,以此来实现文件的分布式存储,需要的朋友可以参考... 目录一、引言二、GridFS 原理剖析三、Spring Boot 集成 GridFS3.1 添加依赖

对Django中时区的解读

《对Django中时区的解读》:本文主要介绍对Django中时区的解读方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录背景前端数据库中存储接口返回AI的解释问题:这样设置的作用答案获取当前时间(自动带时区)转换为北京时间显示总结背景设置时区为北京时间 TIM

java变量内存中存储的使用方式

《java变量内存中存储的使用方式》:本文主要介绍java变量内存中存储的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍2、变量的定义3、 变量的类型4、 变量的作用域5、 内存中的存储方式总结1、介绍在 Java 中,变量是用于存储程序中数据