关于表情文字无法保存数据库

关于表情文字无法保存数据库 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=='
posted @ 2022-07-26 15:27  最冷不过冬夜  阅读(77)  评论(0编辑  收藏  举报