关于表情文字无法保存数据库
关于表情文字无法保存数据库 python+Django+MySQL
对于目前某些表情文字(🍀🙌👯😜)在数据库无法保存的问题
# model
class Product(models.Model):
remark = models.CharField(db_column="remark", max_length=1000)
# View
class test(APIView):
def post(self, request):
mod = Product.objects.filter(id=1).first()
remark = "🍀🙌👯😜"
mod.remark = remark
mod.save()
mod = Product.objects.filter(id=1).first()
return Response(mod.remark)
==>
# postman -> Response
"????????????????"
# MySQL
"????????????????"
原因在于MySQL的数据编码格式不支持这些表情文字
可以先将无法编码的表情文字转换成可被数据库存储的文字,在使用时再把文字反解成表情文字
这里使用base64作为中间编码
# model
class Product(models.Model):
remark = models.CharField(db_column="remark", max_length=1000)
# View
import base64, re
class test(APIView):
def post(self, request):
mod = Product.objects.filter(id=1).first()
remark = "🍀🙌👯😜"
# 加码成base64
remark = base64.b64encode(remark.encode())
mod.remark = remark
mod.save()
mod = Product.objects.filter(id=1).first()
# 取出字符串
# remark = remark[2:-1]
remark = re.findall("^b'(.*?)'$", mod.remark)[0]
remark = remark[0] if remark else ""
# 解码base64
remark = base64.b64decode(remark).decode("utf-8")
return Response(remark)
==>
# postman -> Response
"🍀🙌👯😜"
# MySQL
b'8J+NgPCfmYzwn5Gv8J+YnA=='