保存微信昵称到mysql,当存在特殊字符时,使用utf8编码会报Incorrect string value的错误,此时可以使用utf8mb4编码
使用步骤:
1.修改mysql配置文件my.cnf(linux)或者my.ini(windows)
[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'
2.重启mysql数据库
3.查看是否改变
#运行:
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 utf8mb4
character_set_filesystem binary
character_set_results utf8mb4
character_set_server utf8mb4
character_set_system utf8
collation_connection utf8mb4_unicode_ci
collation_database utf8mb4_unicode_ci
collation_server utf8mb4_unicode_ci
补充我遇到的问题:使用SQLyog时,发现编码没有改变,但使用mysql黑窗口运行时编码是改变了的,所以把SQLyog连接断开,重新连接就对了
4.修改数据库编码和表编码为utf8mb4
#更改数据库编码:
ALTER DATABASE dbname CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
#更改表编码:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
5.查看编码是否修改成功(这里使用sqlyog,一般客户端软件都可查看)
表的查看类似的
可能遇到的问题:插入mysql特殊字符时还是失败了,查看了一下数据库,表的编码都是utf8mb4但还是失败了,最后把数据表中的数据备份出来,删除表,重新创建表,再插入发现成功了
一定要把数据备份出来,不要直接删除表,否则数据就没了
drop table tablename;
CREATE TABLE IF NOT EXISTS tablename(
...
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;