数据库
首页 > 数据库> > mysql 解决生僻字,特殊字符插入失败

mysql 解决生僻字,特殊字符插入失败

作者:互联网

MySQL 的 utf8 实际上不是真正的 UTF-8。utf8 只支持每个字符最多三个字节,而真正的 UTF-8 是每个字符最多四个字节。MySQL 一直没有修复这个 bug,他们在 2010 年发布了一个叫作 utf8mb4 的字符集,绕过了这个问题。当然,他们并没有对新的字符集广而告之(可能是因为这个 bug 让他们觉得很尴尬),以致于现在网络上仍然在建议开发者使用 utf8,但这些建议都是错误的。

简单概括如下:

查询系统字符编码变量 (最好不要使用连接工具 navica 等,查出来的不准,使用终端,cmd 等)

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

修改设置

ALTER DATABASE db_name(你的数据库) CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci;
alter table table_name(你的表名) default character set utf8mb4 collate=utf8mb4_general_ci;
SELECT 
CONCAT("ALTER TABLE `", TABLE_NAME,"` default character set utf8mb4 collate=utf8mb4_general_ci;") 
AS target_tables
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = "db_name" (这里是数据库名)
AND TABLE_TYPE="BASE TABLE"
ALTER TABLE temp convert to CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
SELECT 
CONCAT("ALTER TABLE `", TABLE_NAME,"` convert to CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;") 
AS target_tables
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = "db_name" (这里是数据库名)
AND TABLE_TYPE="BASE TABLE"
[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

[mysqld]
# 设置表字段排序规则
init_connect='SET collation_connection = utf8mb4_unicode_ci'
# set names utf8 是用于设置编码,可以再在建数据库的时候设置,也可以在创建表的时候设置,或只是对部分字段进行设置
init_connect='SET NAMES utf8mb4'
# 设置数据库编码
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
# 此处是忽略客户端的字符集,使用服务器的设置
skip-character-set-client-handshake

重新启动

修改之后

   



作者:吉他手_c156
链接:https://www.jianshu.com/p/b821f69e189a
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

标签:编码,ci,生僻字,utf8mb4,utf8,字符,mysql,TABLE,特殊字符
来源: https://www.cnblogs.com/Neil223/p/15346052.html