Golang 如何使用 gorm 存取带有 emoji 表情的数据

Golang 如何使用 gorm 存取带有 emoji 表情的数据

  • 结论:在 mysql 中尽量使用 utf8mb4,不要使用 utf8。
  • db报错信息:`Error 1366 (HY000): Incorrect string value: '\\xE6\\x8C\\xA5\\xE7\\xAC\\xA6...'`
  • 根本原因:emoji 4个字节,mysql 的 utf8 3个字节,mysql 的 utf8mb4 4个字节
  • 解决方案:
    • 1. 【前置条件】修改数据库的字符集配置,然后重启数据库:确保存储emoji的字段类型为 `utf8mb4`
    • 2. 修改 gorm 的数据库连接串配置,改为 `charset=utf8mb4`,然后重启项目
  • 其他补充

结论:在 mysql 中尽量使用 utf8mb4,不要使用 utf8。

db报错信息:Error 1366 (HY000): Incorrect string value: '\\xE6\\x8C\\xA5\\xE7\\xAC\\xA6...'

根本原因:emoji 4个字节,mysql 的 utf8 3个字节,mysql 的 utf8mb4 4个字节

emoji 表情是4个字节,而 mysql 的 utf8 编码最多3个字节,所以数据插不进去。
而 mysql 的 utfmb4 是支持4个字节的,所以将 mysql 编码从 utf8 转换成 utf8mb4 就能解决。

解决方案:

1. 【前置条件】修改数据库的字符集配置,然后重启数据库:确保存储emoji的字段类型为 utf8mb4

根据实际需要选择运行下面的sql语句:

# 修改数据库字符集:
ALTER DATABASE db_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci;# 修改表的字符集:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;# 修改字段的字符集:
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;#查看表字段的字符集
show full columns from table_name;

2. 修改 gorm 的数据库连接串配置,改为 charset=utf8mb4,然后重启项目

比如:
user:password@tcp(host)/dbname?charset=utf8&parseTime=True&loc=Local
修改为 charset=utf8mb4 后:
user:password@tcp(host)/dbname?charset=utf8mb4&parseTime=True&loc=Local

其他补充

  1. MySQL 5.7 及之前版本默认的字符集是 latin1,MySQL 8.0 版本默认的字符集是 utf8mb4 。
  2. 不过使用 latin1 容易导致乱码,所以还是 utf8 和 utf8mb4 用途最广泛。
  3. mysql 的 utf8 其实是 utf8mb3 的别名,只使用 1~3 个字节表示字符。
  4. mysql 的 utf8mb4 使用 1~4 个字节表示字符,能够存储更多的 emoji 表情及任何新增的 Unicode 字符。utf8mb4 兼容 utf8 ,且比 utf8 能表示更多的字符,是 utf8 字符集的超集。
  5. 所以现在一些新的业务建议将数据库的字符集设置为 utf8mb4 ,特别是有表情存储需求时。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/16059.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MybatisPlus分页查询

分页查询controller写法 public PageResult findByList(RequestBody UserDTO userDTO) {// 分页IPage<User> page new Page(UserDTO.getPageNumber(), UserDTO.getPageSize());// 条件构造器QueryWrapper queryWrapper new QueryWrapper();queryWrapper.eq("user…

【深度学习】第1章

概论: 机器学习是对研究问题进行模型假设,利用计算机从训练数据中学习得到模型参数,并最终对数据进行预测和分析,其基础主要是归纳和统计。 深度学习是一种实现机器学习的技术,是机器学习重要的分支。其源于人工神经网络的研究。深度学习的模型结构是一种含多隐层的神经…

Springboot应用的配置管理

Spring Boot应用的配置管理 在本文中&#xff0c;我们将深入探讨Spring Boot的配置文件&#xff08;application.properties/yaml&#xff09;&#xff0c;以及如何在不同环境中管理配置和使用Spring Config Server。此外&#xff0c;我们还将分享一些高级配置技巧&#xff0c…

Spring Cloud Alibaba 架构-Sentinel整合nacos和gateway

官网地址 sentinel官网: https://github.com/alibaba/Sentinel/wiki/%E4%B8%BB%E9%A1%B5 sentinel 下载地址: https://github.com/alibaba/Sentinel/releases nacos官网: https://nacos.io/zh-cn/docs/deployment.html nacos下载地址: https://github.com/alibaba/nacos/releas…

Shopee单个商品详情采集

Shopee商品详情页数据采集实战 作为东南亚地区最大的电商平台之一,Shopee拥有超过3亿活跃用户。对于跨境电商企业、市场分析师等角色而言,从Shopee获取商品数据是非常有价值的。本文将介绍如何使用Python程序采集Shopee单个商品详情页数据。 1. 确定采集目标和技术方案 确定…

路由传参和获取参数的三种方式

路由传参和获取参数在前端开发中是一个常见的需求&#xff0c;特别是在使用如 Vue.js、React 等前端框架时。下面&#xff0c;我将以 Vue.js 为例&#xff0c;介绍三种常见的路由传参和获取参数的方式&#xff1a; 1. 使用 params 传参 传参&#xff1a; 在路由配置中&#…

SQL Server 2022 STRING_SPLIT表值函数特性增强

SQL Server 2022 STRING_SPLIT表值函数特性增强 1、本文内容 List item语法参数返回类型注解 适用于&#xff1a;SQL Server 2016 (13.x) 及更高版本Azure SQL 数据库Azure SQL 托管实例Azure Synapse AnalyticsMicrosoft Fabric 中的 SQL 分析终结点Microsoft Fabric 中的仓…

golang内置包strings和bytes中的Map函数的理解和使用示例

在go的标志内置包strings和bytes中都有一个函数Map, 这个函数的作用是&#xff1a; 将输入字符串/字节切片中的每个字符使用函数处理后映射后返回一份字符串/字节切片的副本&#xff0c;如果函数中的某个字符返回负数则删除对应的字符。 作用很简单&#xff0c;当时对于新手来…

Qt_tftp(未总结)

记录一下tftp传输,日后总结 #ifndef CLIENTWORK_H #define CLIENTWORK_H#include <QObject> #include <QThread>#include <QHostAddress>

关于C的\r回车在不同平台的问题

首先我们需要搞明白\r和\n是两回事 \r是回车&#xff0c;前者使光标到行首&#xff0c;&#xff08;carriage return&#xff09; \n是换行&#xff0c;后者使光标下移一格&#xff0c;&#xff08;line feed&#xff09; Linux平台下 #include <stdio.h> int main()…

Unidac连接Excel文件

终于找到一个连接字符串&#xff0c;记录一下 UniConnection1.ConnectString : Format(Provider NameODBC;Server"DRIVERMicrosoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb); DBQ%s", [FileName]); UniConnection1.connected:true; UniConnection1.gettable…

神经网络不确定性综述(Part I)——A survey of uncertainty in deep neural networks

相关链接&#xff1a; 神经网络不确定性综述(Part I)——A survey of uncertainty in deep neural networks-CSDN博客 神经网络不确定性综述(Part II)——Uncertainty estimation_Single deterministic methods-CSDN博客 神经网络不确定性综述(Part III)——Uncertainty est…

Python实现xml解析并输出到Excel上

1.编写xml文件 2.使用Python的ElementTree模块来解析XML import xml.etree.ElementTree as ET from openpyxl import Workbook # 解析XML函数 def parse_xml(xml_file):tree ET.parse(xml_file)root tree.getroot() --打开根节点data []for user in root.findall(Users/Us…

1.手动LogisticRegression模型的训练和预测

通过这个示例&#xff0c;可以了解逻辑回归模型的基本原理和训练过程&#xff0c;同时可以通过修改和优化代码来进一步探索机器学习模型的训练和调优方法。 过程: 生成了一个模拟的二分类数据集&#xff1a;通过随机生成包含两个特征的数据data_x&#xff0c;并基于一定规则生…

秋招突击——算法打卡——5/25、5/26——寻找两个正序数组的中位数

题目描述 自我尝试 首先&#xff0c;就是两个有序的数组进行遍历&#xff0c;遍历到一半即可。然后求出均值&#xff0c;下述是我的代码。但这明显是有问题的&#xff0c;具体错误的代码如下。计算复杂度太高了&#xff0c;O&#xff08;n&#xff09;&#xff0c;所以会超时&…

数据结构--《二叉树》

二叉树 1、什么是二叉树 二叉树(Binar Tree)是n(n>0)个结点的优先集合&#xff0c;该集合或者为空集(称为空二叉树)&#xff0c;或者由一个根结点和两颗互不相交的、分别称为根结点的左子树和右子树的二叉树构成。 这里给张图&#xff0c;能更直观的感受二叉树&#xff1…

GDPU JavaWeb mvc模式

搭建一个mvc框架的小实例。 简易计算器 有一个名为inputNumber.jsp的页面提供一个表单&#xff0c;用户可以通过表单输入两个数和运算符号提交给Servlet控制器&#xff1b;由名为ComputerBean.java生成的JavaBean负责存储运算数、运算符号和运算结果&#xff0c;由名为handleCo…

C#中获取FTP服务器文件

1、从ftp下载pdf的方法 public static void DownloadPdfFileFromFtp(string ftpUrl,string user,string password string localPath) { // 创建FtpWebRequest对象 FtpWebRequest request (FtpWebRequest)WebRequest.Create(ftpUrl); request.Method WebRequestMethods.Ftp…

简单好用的文本识别方法--付费的好用,免费的更有性价比-记笔记

文章目录 先说付费的进入真题&#xff0c;免费的来喏&#xff01;PixPin微信 先说付费的 直达网址!!! 进入真题&#xff0c;免费的来喏&#xff01; PixPin 商店里就有 使用示例&#xff1a; 可以看到&#xff1a;贴在桌面上的图片可以复制图片中的文字&#xff0c;真的很…

深入了解ASPICE标准:提升汽车软件开发与质量管理的利器

随着汽车行业的快速发展和技术创新&#xff0c;汽车软件的开发和质量管理的重视程度不断提升。ASPICE&#xff08;Automotive Software Process Improvement and Capability Determination&#xff09;标准作为一种专门针对汽车软件开发过程的改进和能力评定的框架&#xff0c;…