MySql设置支持表情符号

数据库建立已经有一段时间了,但是需要支持表情符号,一开始设置的数据库字符集是utf8,排序规则是utf8-general-ci,那么现在就需要修改一下,查了网上的很多资料,字符集改为utf8mb4,排序规则是utf8mb4-general-ci呢,还是utf8mb4-unicode-ci呢?

utf8mb4-unicode-ci的排序规则相对严谨,在各种语言下的排序规则一致,当然也损耗一定的性能。utf8mb4-general-ci则相对宽松一些,没有那么严谨的排序规则,在语言不一样的情况下,会有些差异,具体需要哪种,根据业务需求吧。

每种编码都有一种特殊的含义,utf8mb4是mysql5.5.3及以上版本才支持的字符集,mb4是most bytes 4,使用4个字节来表示完整的utf8,不支持表情符号及一些不常用的汉字。看来只能修改字符集格式了,这里采用在my.ini配置文件中修改。

首先,在my.ini文件中修改了以下配置,然后重启,使配置生效;
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
其次,修改过重启后,可以通过这两句,来查看编码状态;
#查看mysql 字符集设置情况
show variables like '%char%';           
#查看字符集和校对规则
SHOW VARIABLES WHERE Variable_name LIKE 'character_set_%' OR Variable_name LIKE 'collation%'; 
结果1

结果2

对截图中mysql的系统变量做下说明:
character_set_server 默认内部操作字符集
character_set_client 客户端来源使用的字符集
character_set_connection 连接层字符集
character_set_result 查询结果字符集
character_set_database 当前选中的数据库字符集
character_set_system 系统元数据字符集

在查询结果中可以看到mysql 数据库系统中客户端、数据库连接、数据库、文件系统、查询结果、服务器、系统的字符集设置;

如果是修改的数据库,那么对原来的表不起作用,还需要对每个支持表情的表进行单独设置,新建的表就不需要了;
#修改库的字符集,只对将要建立的表起作用
alter database database_name character set xxx; 
#修改表的默认字符集:
ALTER TABLE table_name DEFAULT CHARACTER SET utf8mb4;
#修改表的默认字符集和所有列的字符集:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

#修改表字段的默认字符集(这个一直没有执行成功过,莫非写错了?):
ALTER TABLE table_name CHANGE field field field_type CHARACTER SET character_name [other_attribute]
#换种写法
alter table table_name modify col_name varchar(col_length) character set xxx; 

可是不知道为什么,在程序里还是有报错,报utf8mb4_general_ci的错误,难道和collation_connection有关系吗,现在只有这一项是utf8mb4_general_ci了,要不要在mysqld下加上这一句:

init_connect='SET collation_connection = utf8_unicode_ci'

犹豫中,又执行set names utf8mb4; 执行过这一句之后,程序居然好了,没有报错了,看来还是命令没有执行到位。

set names utf8mb4; 
#执行一句set names utf8mb4;相当于执行了,下面的三句;
set character_set_client = utf8mb4
set character_set_connection = utf8mb4
set character_set_results = utf8mb4 
最后找一个设置过字符集的表,往字段里输入\xF0\x9F\x8C\x9D,如果能保存成功,则说明设置成功了。
字符集在变量中的转换有个转换过程:
1. MySQL Server收到请求时将请求数据从character_set_client转换为character_set_connection;
2. 进行内部操作前将请求数据从character_set_connection转换为内部操作字符集;
3. 将操作结果从内部操作字符集转换为character_set_results;

修改字符集,有两种方式,一种是更改配置文件my.ini,修改过后重启;还有一种是在命令行mysql下修改。

如果已经建立好了数据库,再去修改字符集,那么对于已经建好的表不一定起作用,需要对每个表设置一下字符集,很多文章说相关字段也需要设置一下字符集,自己设置的时候只修改了表,没有刻意的去设置相关的字段,也是可以存入表情的,不知是不是和数据库的版本有关系。

当然,最好是在建库的时候,就设置好字符集。

参考资料:


https://blog.csdn.net/yzh_1346983557/article/details/89643071

https://www.cnblogs.com/amyzhu/p/9595665.html

参考文档

https://yq.aliyun.com/articles/283374
https://blog.csdn.net/yzh_1346983557/article/details/89643071
https://www.cnblogs.com/amyzhu/p/9595665.html

你可能感兴趣的:(MySql设置支持表情符号)