如何解决MySQL中输入中文报错的情况1366 (HY000): Incorrect string value

如何在MySQL中输入中文

经过我的不断摸索,在MySQL建表后,往表中的varchar(255)中输入中文时报错,大概是因为数据库的默认编码模式是latin1而不是utf8。所以其它博客就会叫你去修改my.ini配置文件里的信息,或者说在MySQL界面里设置,如下:

MySQL查询代码:

show variables like'%char%';

结果:

+--------------------------+-----------------------------------------------------------+
| Variable_name            | Value                                                     |
+--------------------------+-----------------------------------------------------------+
| character_set_client     | utf8                                                      |
| character_set_connection | utf8                                                      |
| character_set_database   | utf8                                                      |
| character_set_filesystem | binary                                                    |
| character_set_results    | utf8                                                      |
| character_set_server     | latin1                                                    |
| character_set_system     | utf8                                                      |
| character_sets_dir       | /usr/local/mysql-5.7.21-macos10.13-x86_64/share/charsets/ |
+--------------------------+-----------------------------------------------------------+

当你 其中的Latin改为utf8就可以了,可是我都试过他们的方法修改my.ini配置文件里的信息,或者说在MySQL界面里设置(可以去博客里搜索),但是我试了都没有效果。后来我就用例外一种方法来解决:在MySQL中修改数据库和表的编码形式。

1.在建数据库的时候修改默认编码模式为utf8:

create database abcd DEFAULT CHARACTER SET utf8;

创建好表后可以通过如下代码查看结果:

show create database databasename;
//databasename为你创建数据库的名字

创建数据库成功
然后就可以创建新表了,输入中文了,这个数据库中的所有表都可以输入中文哦

2.已经创建了的数据库和表

如果不想创建新的数据库,可以只修改表的属性

/ /查看表的列的属性
show full columns from tablename;

列的查询结果
修改:

alter table tablename change columnsname columnsnamee varchar(255) 
character set utf8 collate utf8_unicode_ci not null default ''; 

//tablename:表名,columnsname:列名(注意这里要输入两个列名,应该是旧列名和新列名,一般情况下不改变列名,就直接输入两个一样的列名就可以了;然后再输入上面的代码,查看修改后的属性,就可以了;但是要注意哦这只能修改一个表的编码形式,再在这个数据库中建一个新表,他还是latinl 的编码形式,还得修改哦;而且在修改的时候要保证表是一个空表哦,没有数据。

3.为什么latinl 不能输入中文?

在latin1中,每个字符只有一个字节长。在utf8中,一个字符可以由多个字节组成。因此,utf8具有比latin1更多的字符(并且它们具有的字符不一定由相同的字节/字节序列表示)。
但是我们的中文汉字是要2个字节还是3个字节哦,所有latin1就不能存储汉字啦。
皮一下!

猜你喜欢

转载自blog.csdn.net/qq_43298314/article/details/82930104