android emoji可以存入MYSQL,但是IOS EMOJI表情存入不成功,会报错,mysql已经支持utf8mb4

从 MySQL 5.5.3 开始,MySQL 支持一种 utf8mb4

字符集,这个字符集能够支持 4 字节的 UTF8 编码的字符。 utf8mb4 字符集能够完美地向下兼容 utf8

字符串。在数据存储方面,当一个普通中文字符存入数据库时仍然占用 3 个字节,在存入一个 Unified Emoji 表情的时候,它会自动占用 4

个字节。所以在输入输出时都不会存在乱码的问题了。由于 utf8mb4 是 utf8 的超集,从 utf8 升级到 utf8mb4

不会有任何问题,直接升级即可;如果从别的字符集如 gb2312 或者 gbk 转化而来,一定要先备份数据库。然后,修改 MySQL 的配置文件

/etc/my.cnf,修改连接默认字符集为 utf8mb4 ,然后在连接数据库以后首先执行一句 SQL: SET NAMES

utf8mb4。

1. 修改my.cnf 或 my.ini

[mysqld]

character-set-server=utf8mb4

[mysql]

default-character-set=utf8mb4

修改后重启Mysql

登陆MYSQL, show variables like 'character%'可以查看编码是否已经修改成功。

2、修改数据库和数据表为相应的 utf8mb4 格式。

alter table TABLE_NAME convert to character set utf8mb4 collate utf8mb4_bin

3、在代码中,连接数据库成功后,执行 "set names utf8mb4"

1、桌面上右击 计算机,选择“管理”, 选择“服务和应用程序”---“服务”, 在里面找到MySQL56的服务。

2、右击 MySQL服务,查看“属性”:往后拖一下,找到—default-file下图中画框部分,这里指明了MySQL启动的时候要加载的配置文件.

3、 找到该路径下的配置文件,进行修改。

4、 具体修改内容:

文字:

[client]

port=3306

default-character-set=utf8mb4

[mysql]

port=3306

default-character-set=utf8mb4

[mysqld]

port=3306

character-set-client-handshake= FALSE

character-set-server= utf8mb4

collation-server= utf8mb4_unicode_ci

init_connect='SET NAMES utf8mb4'

5、 然后重启MySQL56服务。

6、 在运行里面,找到并打开mysql command line,使用以下命令查看是否生效。

SHOWVARIABLES WHERE Variable_name LIKE 'character/_set/_%' OR Variable_name LIKE'collation%'

看到下面这个画面就说明生效了:

7、以为这样就完了吗?No,即使是这样我们无论是在mysql workbench还是通过python+mysqldb建立的utf8mb4数据库其实还是utf-8的,也正因如此,我们的emoj字符才一直不能插入到数据库中。

即使建立的数据库是utf8mb4的,我们看到这个数据库还是utf8的。

所以我们还需要继续实验,仔细看修改配置文件里面有一句:init_connect='SETNAMES utf8mb4',那我可以拿来用到数据库中。

果然,发现加上“SET NAMES utf8mb4”这句以后,数据库变成了utf8mb4.:

首先需要知道在UTF8编码方式有可能是2,3或4个字节。而Emoji表情的UTF8是4个字节,但是在mysql中设置utf8编码最多是3个字节,所以emoji的数据是无法存入。

解决方案就是:将Mysql的编码从utf8转换成utf8mb4,是数据库支持4个字节的utf8编码,有下边三种方法:

1. 修改my.cnf

[mysqld]

character-set-server=utf8mb4

[mysql]

default-character-set=utf8mb4

修改后重启Mysql

2. 以root身份登录Mysql,修改环境变量,将character_set_client,character_set_connection,character_set_database,character_set_results,character_set_server 都修改成utf8mb4

如果表已经存在,将已经建好的表也转换成utf8mb4

alter table tblName convert to character set utf8mb4 collate utf8mb4_bin


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/bake/11563541.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存