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

相关文章

详解C++ 存储二进制数据容器的几种方法

《详解C++存储二进制数据容器的几种方法》本文主要介绍了详解C++存储二进制数据容器,包括std::vector、std::array、std::string、std::bitset和std::ve... 目录1.std::vector<uint8_t>(最常用)特点:适用场景:示例:2.std::arra

python3中正则表达式处理函数用法总结

《python3中正则表达式处理函数用法总结》Python中的正则表达式是一个强大的文本处理工具,用于匹配、查找、替换等操作,在Python中正则表达式的操作主要通过内置的re模块来实现,这篇文章主要... 目录前言re.match函数re.search方法re.match 与 re.search的区别检索

MySQL中存储过程(procedure)的使用及说明

《MySQL中存储过程(procedure)的使用及说明》存储过程是预先定义的SQL语句集合,可在数据库中重复调用,它们提供事务性、高效性和安全性,MySQL和Java中均可创建和调用存储过程,示例展... 目录概念示例1示例2总结概念存储过程:在数据库中预先定义好一组SQL语句,可以被程序反复调用。

MySQL存储过程实践(in、out、inout)

《MySQL存储过程实践(in、out、inout)》文章介绍了数据库中的存储过程,包括其定义、优缺点、性能调校与撰写,以及创建和调用方法,还详细说明了存储过程的参数类型,包括IN、OUT和INOUT... 目录简述存储过程存储过程的优缺点优点缺点存储过程的创建和调用mysql 存储过程中的关键语法案例存储

MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决

《MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决》MyBatis默认开启一级缓存,同一事务中循环调用查询方法时会重复使用缓存数据,导致获取的序列主键值均为1,... 目录问题原因解决办法如果是存储过程总结问题myBATis有如下代码获取序列作为主键IdMappe

k8s搭建nfs共享存储实践

《k8s搭建nfs共享存储实践》本文介绍NFS服务端搭建与客户端配置,涵盖安装工具、目录设置及服务启动,随后讲解K8S中NFS动态存储部署,包括创建命名空间、ServiceAccount、RBAC权限... 目录1. NFS搭建1.1 部署NFS服务端1.1.1 下载nfs-utils和rpcbind1.1

linux配置podman阿里云容器镜像加速器详解

《linux配置podman阿里云容器镜像加速器详解》本文指导如何配置Podman使用阿里云容器镜像加速器:登录阿里云获取专属加速地址,修改Podman配置文件并移除https://前缀,最后拉取镜像... 目录1.下载podman2.获取阿里云个人容器镜像加速器地址3.更改podman配置文件4.使用po

Redis高性能Key-Value存储与缓存利器常见解决方案

《Redis高性能Key-Value存储与缓存利器常见解决方案》Redis是高性能内存Key-Value存储系统,支持丰富数据类型与持久化方案(RDB/AOF),本文给大家介绍Redis高性能Key-... 目录Redis:高性能Key-Value存储与缓存利器什么是Redis?为什么选择Redis?Red

MyBatis-plus处理存储json数据过程

《MyBatis-plus处理存储json数据过程》文章介绍MyBatis-Plus3.4.21处理对象与集合的差异:对象可用内置Handler配合autoResultMap,集合需自定义处理器继承F... 目录1、如果是对象2、如果需要转换的是List集合总结对象和集合分两种情况处理,目前我用的MP的版本

使用SpringBoot+InfluxDB实现高效数据存储与查询

《使用SpringBoot+InfluxDB实现高效数据存储与查询》InfluxDB是一个开源的时间序列数据库,特别适合处理带有时间戳的监控数据、指标数据等,下面详细介绍如何在SpringBoot项目... 目录1、项目介绍2、 InfluxDB 介绍3、Spring Boot 配置 InfluxDB4、I