那么接下来我将为大家详细讲解“教你解决往MySQL数据库中存入汉字报错的方法”的完整攻略。
出现问题
在MySQL中,如果我们想要往表中插入含有汉字的数据,就会发现会提示错误Error:1366
:“Incorrect string value: '\xF0\x9F\x98\x82\xE5\xA5\xBD...'”,如下所示:
mysql> insert into `table`(`column`) values('?你好');
ERROR 1366 (HY000): Incorrect string value: '\xF0\x9F\x98\x82\xE5\xA5\xBD...' for column 'column' at row 1
这是因为MySQL默认使用的字符集是latin1
,所以在插入非latin1
字符集时就会出现这个问题。
解决方法
因此,我们需要进行以下操作:
步骤一:修改MySQL的配置文件
打开MySQL的配置文件my.cnf
,一般默认位置在/etc/mysql/my.cnf
,如果找不到,则在系统中搜索my.cnf
文件。
在my.cnf
文件中,找到[mysqld]
这个标题,添加以下设置:
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
这样就将MySQL的默认字符集更改为utf8mb4
了。
步骤二:重启MySQL服务
修改完成后,重启MySQL服务,使之生效。
# Ubuntu系统可以使用以下命令重启MySQL服务
sudo service mysql restart
# CentOS或RHEL系统可以使用以下命令重启MySQL服务
sudo systemctl restart mysqld
步骤三:修改表的字符集
如果已经有表了,需要将表的字符集也修改为utf8mb4
,可以使用以下命令进行修改:
alter table `table` convert to character set utf8mb4 collate utf8mb4_unicode_ci;
或者在创建表时,也可以指定表的字符集:
create table `table` (
`id` int unsigned not null auto_increment primary key,
`column` varchar(255) not null
) engine=InnoDB default charset=utf8mb4;
示例说明
下面我们来看两条示例说明。
示例一
我们插入含有汉字的数据,如下所示:
mysql> insert into `table`(`column`) values('你好,MySQL!");
Query OK, 1 row affected (0.02 sec)
可以看到已经成功插入含有汉字的数据了。
示例二
如果我们使用utf8
字符集,插入含有emoj表情的数据,会发现仍然会出现报错。
mysql> create table `emoji`(`id` int unsigned not null auto_increment primary key, `column` varchar(255) not null) engine=InnoDB default charset=utf8;
Query OK, 0 rows affected (0.10 sec)
mysql> insert into `emoji`(`column`) values('?MySQL!');
ERROR 1366 (HY000): Incorrect string value: '\xF0\x9F\x98\x82MyS...' for column 'column' at row 1
而如果我们将字符集改为utf8mb4
,再插入同样的数据,就会发现插入成功了。
mysql> create table `emoji`(`id` int unsigned not null auto_increment primary key, `column` varchar(255) not null) engine=InnoDB default charset=utf8mb4;
Query OK, 0 rows affected (0.10 sec)
mysql> insert into `emoji`(`column`) values('?MySQL!');
Query OK, 1 row affected (0.02 sec)
总结
通过以上的解决方法,我们就可以往MySQL数据库中存入含有汉字、emoj表情等特殊字符的数据了。这个问题其实是因为选择的字符编码问题导致,在MySQL中使用utf8mb4
字符编码就可以很好地解决这个问题。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:教你解决往mysql数据库中存入汉字报错的方法 - Python技术站