天天看点

mysql 5.7 emoji_解决mysql 5.7保存emoji 失败问题

1 将Mysql的编码从utf8转换成utf8mb4。

2 my.cnf 文件添加

[mysqld]character-set-server = utf8mb4collation-server = utf8mb4_unicode_ci

init_connect='SET NAMES utf8mb4'

特别注意 :如果collation-server = utf8mb4_unicode_ci保存不了设置为collation-server = utf8mb4_general_ci

3修改需要添加库 表 字段的字符集

修改数据库字符集:

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;

如果只是某个字段需要 只需要修改那个字段的字符集就可以了

4 如果修改以上都不行请查询sql

mysql> show variables like '%sql_mode%';

+---------------+--------------------------------------------+

| Variable_name | Value                                      |

+---------------+--------------------------------------------+

| sql_mode      | STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION |

+---------------+--------------------------------------------+

1 row in set (0.00 sec)

如果是以上结果恭喜你是存储不了的

去设置这个sql_mod 模式(注意这里修改看之后要退出控制台要不然还是看不到效果的,而

且这个配置写my.cnf 重启服务器是不生效的,如果要问为什么请去mysql顾问群)

mysql> set global sql_mode = 'NO_ENGINE_SUBSTITUTION';

mysql> show variables like '%sql_mode%';

+---------------+------------------------+

| Variable_name | Value                  |

+---------------+------------------------+

| sql_mode      | NO_ENGINE_SUBSTITUTION |

+---------------+------------------------+

1 row in set (0.00 sec)

补充:

更改数据库的编码为utf8mb4:

1. MySQL的版本

utf8mb4的最低mysql版本支持版本为5.5.3+,若不是,请升级到较新版本。

2. MySQL驱动

5.1.34可用,最低不能低于5.1.13

3.修改MySQL配置文件

修改mysql配置文件my.cnf(windows为my.ini) my.cnf一般在etc/mysql/my.cnf位置。找到后请在以下三部分里添加如下内容: [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. 重启数据库,检查变量

SHOW VARIABLES WHERE Variable_name LIKE 'character_set_%' OR Variable_name LIKE 'collation%';Variable_nameValuecharacter_set_clientutf8mb4

character_set_connectionutf8mb4

character_set_databaseutf8mb4

character_set_filesystembinary

character_set_resultsutf8mb4

character_set_serverutf8mb4

character_set_systemutf8

collation_connectionutf8mb4_unicode_ci

collation_databaseutf8mb4_unicode_ci

collation_serverutf8mb4_unicode_ci

collation_connection 、collation_database 、collation_server是什么没关系。

但必须保证系统变量描述character_set_client(客户端来源数据使用的字符集)

character_set_connection(连接层字符集)

character_set_database(当前选中数据库的默认字符集)

character_set_results(查询结果字符集)

character_set_server(默认的内部操作字符集)

这几个变量必须是utf8mb4。

5. 数据库连接的配置

数据库连接参数中: characterEncoding=utf8会被自动识别为utf8mb4,也可以不加这个参数,会自动检测。 而autoReconnect=true是必须加上的。

6. 将数据库和已经建好的表也转换成utf8mb4

更改数据库编码:ALTER DATABASE caitu99 CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

更改表编码:ALTER TABLE TABLE_NAME CONVERT TO CHARACTER SET utf8mb4 COLLATEutf8mb4_general_ci; 如有必要,还可以更改列的编码

7、在第3步设置character_set_database,character_set_server不成功的可以试下直接在mysql.exe下

set @@character_set_server='utf8mb4';

set @@character_set_database='utf8mb4';

这下数据库就可以存下emoji表情的编码了。