博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mysql数据库如何支持emoji表情
阅读量:2391 次
发布时间:2019-05-10

本文共 2641 字,大约阅读时间需要 8 分钟。

在一些场景中,比如微信的头像,用户的昵称,订单评价,留言等等,都可能会用到表情,支持表情存储在当今的系统设计中成了一个最基础的功能点。mysql数据库的默认字符集utf8,只能存储3个字节的数据。标准的emoji表情是4个字节。

如果你的数据库不支持表情,那么在插入数据库时会报错:

[HY000][1366] Incorrect string value: '\xF0\x9F\x91\x8D\xF0\x9F...' for column 'comment' at row 1

解决方式:

  • 更换字符集utf8–>utf8mb4 mb4的意思是most bytes 4,专门为兼容四个字节的。utf8mb4是向下兼容utf8的,所以即便修改了字段的字符集也不会影响线上数据。
  • 修改my.conf 这种方式需要重启数据库

环境:基于mysql5.6,Mysql 版本的限制,Mysql 5.5.3之前的版本,支持的utf8为3字节的,Mysql 5.5.3之后的版本支持utf8mb4

方案1

步骤:

修改表字段编码和字符集

ALTER table table_name  modify  file_name  varchar(100) character set utf8mb4 collate utf8mb4_unicode_ci

修改表的编码格式

ALTER table table_name convert to character set utf8mb4 collate utf8mb4_bin;

修改数据库的编码

mysql> set names utf8mb4;Query OK, 0 rows affected (0.00 sec)

修改后可看到字符集设置

mysql> SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';+--------------------------+--------------------+| Variable_name            | Value              |+--------------------------+--------------------+| character_set_client     | utf8mb4            || character_set_connection | utf8mb4            || character_set_database   | latin1             || character_set_filesystem | binary             || character_set_results    | utf8mb4            || character_set_server     | utf8mb4            || character_set_system     | utf8               || collation_connection     | utf8mb4_general_ci || collation_database       | latin1_swedish_ci  || collation_server         | utf8mb4_general_ci |+--------------------------+--------------------+10 rows in set (0.00 sec)

不需要重启数据库

方案2

修改my.conf文件,打开配置文件,在响应的节点追加以下内容:

[client]default-character-set = utf8mb4[mysql]default-character-set = utf8mb4[mysqld]character-set-client-handshake = FALSEcharacter-set-server = utf8mb4collation-server = utf8mb4_unicode_ciinit_connect='SET NAMES utf8mb4'

如果是docker创建的容器怎么办呢?答案也是一样的,需要进入docker容器里面(如何进入,请查看)修改my.conf,不过在修改之前需要先安装vim,因为docker默认是没有安装vim的,安装命令:

apt-get install vim

有时候会提示

root@50100b26ab35:/# apt-get install vimReading package lists... DoneBuilding dependency treeReading state information... DoneE: Unable to locate package vim

这时候需要更新资源目录,命令是:

apt-get update

这个命令的作用是:同步 /etc/apt/sources.list 和 /etc/apt/sources.list.d 中列出的源的索引,这样才能获取到最新的软件包。

docker 中的mysql启动脚本一般在/etc/init.d/mysql

修改完之后重启数据库就Ok了。

方案3

如果采用docker的方式创建数据,那么可以在创建容器的时候指定初始化编码。

version: '2'services:    mysql:        image: mysql:5.7.16        ports:        - ${
DB_PORT}:3306 environment: - TZ=Asia/Shanghai command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci volumes: - ./mysql_data:/var/lib/mysql restart: unless-stopped

参考

转载地址:http://thqab.baihongyu.com/

你可能感兴趣的文章
使用MFC开始openGL编程
查看>>
关于Gbuffer中的normal存储
查看>>
近距离观察Tone mapping.
查看>>
Physically based shading
查看>>
Color correction
查看>>
Temporal AA
查看>>
miniz compared to other real-time and high-ratio compressors
查看>>
Random number for GPU
查看>>
SSR
查看>>
引擎核心架构
查看>>
[转]关于现代CPU,程序员应当更新的知识
查看>>
游戏设计架构的一种方法
查看>>
FMOD音频引擎简单使用
查看>>
通过一个例子学习Kubernetes里的PersistentVolumeClaim的用法
查看>>
容器,Docker, Kubernetes和Kyma,以及Kyma对SAP的意义
查看>>
推荐一个yaml文件转json文件的在线工具
查看>>
如何查找Authorization object在哪些ABAP代码里使用到
查看>>
使用SAP C4C rule editor动态控制UI上某个按钮是否显示
查看>>
ABAP正则表达式 vs SPLIT INTO
查看>>
使用JDBC操作SAP云平台上的HANA数据库
查看>>