解决MySQL5.7的表无法插入中文的问题
环境及MySQL版本说明
MySQL版本使用的是5.7,MySQL的环境是pull了一个docker镜像run起来的。
问题描述
在创建好的数据库中新建一张表emp2:
然后试图往这张表中的title字段写入中文数据时发生了错误!
具体的SQL语句如下:
insert into emp2(num, title, url) values(1715046,'身高1米八','https://xxx.mp4');
报错信息如下:
1366 - Incorrect string value: '\xE8\xBA\xAB\xE9\xAB\x98...' for column 'title' at row 1, Time: 0.001000s
很显然,title字段写入了一个 Incorrect格式的数据!
浅谈一下终端的保护措施
如果读者把上面的SQL语句复制到终端去执行的话,终端会显示成这样:
也就是说,终端会将非法的字符自动过滤掉,只留下“合法”的字符“1”——读者可以试试,如果将title字段插入的字符串都写成中文的话,将命令粘贴到终端后title最终会插入一个空字符串!
表级别的修改
查看一下这张表的 full columns:
可以看到,varchar类型的title与url的collation属性为latin~
按照下面的方式修改一下:
然后再执行下面带中文的语句就没问题了:
insert into emp2(num, title, url) values(1715046,'身高1米八','https://xxx.mp4');
数据库级别的修改
上面的方案只是修改了表的属性,试想一下如果我们在这个数据库中创建多张表,每张表都要改一下有些麻烦。
从网上查一下修改配置文件的方案即可。