阿里云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

相关文章

SpringBoot3.X 整合 MinIO 存储原生方案

《SpringBoot3.X整合MinIO存储原生方案》本文详细介绍了SpringBoot3.X整合MinIO的原生方案,从环境搭建到核心功能实现,涵盖了文件上传、下载、删除等常用操作,并补充了... 目录SpringBoot3.X整合MinIO存储原生方案:从环境搭建到实战开发一、前言:为什么选择MinI

Python实现对阿里云OSS对象存储的操作详解

《Python实现对阿里云OSS对象存储的操作详解》这篇文章主要为大家详细介绍了Python实现对阿里云OSS对象存储的操作相关知识,包括连接,上传,下载,列举等功能,感兴趣的小伙伴可以了解下... 目录一、直接使用代码二、详细使用1. 环境准备2. 初始化配置3. bucket配置创建4. 文件上传到os

Java中调用数据库存储过程的示例代码

《Java中调用数据库存储过程的示例代码》本文介绍Java通过JDBC调用数据库存储过程的方法,涵盖参数类型、执行步骤及数据库差异,需注意异常处理与资源管理,以优化性能并实现复杂业务逻辑,感兴趣的朋友... 目录一、存储过程概述二、Java调用存储过程的基本javascript步骤三、Java调用存储过程示

MySQL之InnoDB存储引擎中的索引用法及说明

《MySQL之InnoDB存储引擎中的索引用法及说明》:本文主要介绍MySQL之InnoDB存储引擎中的索引用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录1、背景2、准备3、正篇【1】存储用户记录的数据页【2】存储目录项记录的数据页【3】聚簇索引【4】二

MySQL之InnoDB存储页的独立表空间解读

《MySQL之InnoDB存储页的独立表空间解读》:本文主要介绍MySQL之InnoDB存储页的独立表空间,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、独立表空间【1】表空间大小【2】区【3】组【4】段【5】区的类型【6】XDES Entry区结构【

SQLite3 在嵌入式C环境中存储音频/视频文件的最优方案

《SQLite3在嵌入式C环境中存储音频/视频文件的最优方案》本文探讨了SQLite3在嵌入式C环境中存储音视频文件的优化方案,推荐采用文件路径存储结合元数据管理,兼顾效率与资源限制,小文件可使用B... 目录SQLite3 在嵌入式C环境中存储音频/视频文件的专业方案一、存储策略选择1. 直接存储 vs

python3如何找到字典的下标index、获取list中指定元素的位置索引

《python3如何找到字典的下标index、获取list中指定元素的位置索引》:本文主要介绍python3如何找到字典的下标index、获取list中指定元素的位置索引问题,具有很好的参考价值,... 目录enumerate()找到字典的下标 index获取list中指定元素的位置索引总结enumerat

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 的主