下载鸥 > 网站下载 > 开发教程 > Mysql数据库

怎样让Mysql支持emoji和符号表情?

791 2021-02-19 17:57:48

收藏

简述

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

emoji表情在当下已经十分流行,微信名中使用了emoji表情包的也大有人在。我们如果给网站开通微信登录,并保留微信名为用户名时就可能造成服务器出错。

就MySQL数据库而言,默认字符集是不支持emoji表情字符的。

找到问题的原因后,因为之前也没有遇到过这样的问题,也没思路,迅速百度大神找了一大堆资料来,原来仅只要将数据库及相关的表和表字段设置为utfmb84即支持emoji表情的。

问题的原因是数据库中使用的字符编码为UTF-8,这种编码有可能是两个、三个、四个字节。Emoji表情是4个字节,而mysql的utf8编码最多3个字节,所以数据插不进去,而utfmb64是支持四个字节的。所以解决方案就是:将mysql编码从utf8转换成utf8mb4。

现将解决的思路和步骤分享一下,为了改过之前写文章过于草率,尽量将所找的资料和我的实战经验写得完整一下以示尊重读者。

1,检测你的数据库版本,数据库版本需>=5.5.3版本.
如何察看mysql版本如下图,我安装的是mysql下的一个开源分支mariadb,版本10.0对应的是mysql版本5.6以上,所以是支持的。

2,如果你的mysql服务正在启动中,请右击我的电脑-管理-服务,关闭mysql server这个服务。

3,设置数据库默认支持字符集utf8mb4,

找到mysql安装目录下的my.cnf或者mysql.ini,修改my.cnf或mysql.ini

[client]
 default-character-set = utf8mb4

[mysql]

default-character-set = utf8mb4

[mysqld]
 character-set-client-handshake = FALSE
 character-set-server = utf8mb4
 collation-server = utf8mb4_unicode_ci
 init_connect='SET NAMES utf8mb4'

4,重启mysql server

检查字符集

mysq>SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';

 5,存在的数据库的字符集是utf8的,如果要支持utf8mb64则需要将已经存在的数据库、表、表字段类型修改成支持utf8mb64.

修改数据库字符集:

ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;

修改表的字符集:

ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

修改字段的字符集:

ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;


6,这步可有可无,前提是如果使用到 spring boot的连接池,请在spring boot 的配置文件application.properties设置连接使用utf8mb64

spring.mysql.datasource.init-sql=SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci


7,设置连接驱动的JDBC_URL

修改如jdbc:mysql://localhost:3306/db?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&autoReconnect=true
这里请注意如果数据库版本大于5.1.13驱动程序connector不能加characterEncoding=utf8,一定要去掉characterEncoding=utf8。


8,导出批量修改sql语句

$file = date ( "Y-m-d" ) . '.txt';
/**
 * 判断文件是否存在,不存在的时候进行创建;
 */
if (! file_exists ( $file )) {
    
    $fp = fopen ( "$file", "w+" ); // 打开文件指针,创建文件
}

/**
 * 判断文件是否存在,不存在的时候进行创建;
 */
$sql = "SELECT CONCAT(
        'ALTER TABLE ',TABLE_NAME,
        ' CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;'
        ) sql_str
        FROM information_schema.`TABLES`
        WHERE TABLE_SCHEMA = 'free_gift_test'";
$query = $db->query($sql, $free_gift_conn);
$list = $db->select_key_array_qb($query);
$str = '';
foreach ($list as $ele){
    $str .= $ele[sql_str].'
            ';
}

file_put_contents ( $file, $str, FILE_APPEND );
 

以上步骤测试过很多表的相关字段均都完美解决。

本文地址:https://xzo.com.cn/develop/mysql/628.html

有帮助,很赞!

信息来源:下载鸥
导出教程 下载word版教程
发表评论 共有条评论
关于Mysql数据库


MySQL是一款安全、跨平台、高效的,并与 PHP、Java 等主流编程语言紧密结合的数据库系统。该数据库系统是由瑞典的 MySQL AB 公司开发、发布并支持,由 MySQL 的初始开发人员 David Axmark 和 Michael Monty Widenius 于 1995 年建立的。

推荐Mysql数据库开发教程
什么是SQL注入?如何防注入?
什么是SQL注入?如何防注入?

简言之,SQL是一种结构化查询语言,使我们有能力访问和操作数据库。一些黑客便...

9 492
执行delete命令批量删除了10万条数据,数据库空间为什么没变?
执行delete命令批量删除了10万条数据,数据库空间为什么没变?

今天有客户联系鸥哥,说使用mysql的delete命令删除了10万条数据,但主机还是显...

11 918
怎样让Mysql支持emoji和符号表情?
怎样让Mysql支持emoji和符号表情?

emoji表情在当下已经十分流行,微信名中使用了emoji表情包的也大有人在。我们...

16 790
怎样用phpMyAdmin批量导入Excel内容到MySQL数据库?
怎样用phpMyAdmin批量导入Excel内容到MySQL数据库?

近期,有客户需要将excel数据导入到MySQL数据库,这是一个比较常用的功能,操作起...

12 629
MySQL索引介绍
MySQL索引介绍

MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检...

29 642
MySQL怎样通过身份证号码计算用户年龄?
MySQL怎样通过身份证号码计算用户年龄?

实名制站点往往需要用到身份证号码,有了身份证号码就需要获取用户年纪或做展...

1 567
MySQL数据库误删除了要怎么恢复?
MySQL数据库误删除了要怎么恢复?

MySQL误删除这种事出现的概率不高,但如果哪天误删除了,总不能真的跑路吧?那么,M...

0 444
textarea带换行存入mysql数据库的方案(php/js)
textarea带换行存入mysql数据库的方案(php/js)

textarea输入框如果带有换行符,在存入数据库时需要将换行符\n转换为<br>,在...

0 519
推荐插件
帝国cms百度、必应bing、神马推送增强收录三合一插件
帝国cms百度、必应bing、神马推送增强收录三合一插件

因客户需要一键推送到多平台,下载鸥开发了这款一键推送至百度、必应、神马插...

0 159
帝国cms多栏目多数据表自动审核推送插件
帝国cms多栏目多数据表自动审核推送插件

本插件基于帝国cms帝国cms每日自动审核插件,在自动审核指定条数信息的基础上...

0 891
帝国cms自动给正文关键词添加tag内链
帝国cms自动给正文关键词添加tag内链

帝国cms有自带的给关键词添加内链功能,但需要手动添加关键词,容易出现疏漏和...

0 811
帝国CMS内网用户静态站点文章访客统计插件
帝国CMS内网用户静态站点文章访客统计插件

本插件适用于内网用户,可查看单篇文章访问者ip地址。如果添加访问者ip组,可查...

0 537
帝国cms网站会员登录与退出历史记录日志插件
帝国cms网站会员登录与退出历史记录日志插件

帝国cms默认只有上次登录时间与ip,没有一个记录清单,所以今天,我们分享这个帝...

0 357
帝国cms自动生成文章新闻目录插件下载
帝国cms自动生成文章新闻目录插件下载

用户体验是我们的需求,百度蜘蛛的认可更是我们的需求。毕竟,没有收录排名,何来...

0 1123
帝国cms联想词搜索高级搜索插件下载
帝国cms联想词搜索高级搜索插件下载

帝国CMS自带的搜索功能虽然强大,但也有很强的局限性 -- 必须关键词完全匹配...

0 736
帝国cms百度AI图像清晰度增强api接口对接插件
帝国cms百度AI图像清晰度增强api接口对接插件

通过本插件,可以实现帝国cms网站对接百度云api实现图像清晰度增强的功能。经...

0 498
客服QQ:341553759
扫码咨询 常见问题 >
官方交流群:90432500
点击加入