目录
一、简介
二、案例
三、解决方式
一、简介
很多情况下我们创建一张表忘记设置默认的字符编码,MySQL会为其设置默认的编码格式,这会导致在插入数据的数据字符集不匹配出现异常。
二、案例
案例:创建一张user表,不指定表和字段的编码格式
create table user ( id int(10) primary key auto_increment comment '主键', name varchar(20) unique not null comment '姓名', age tinyint unsigned comment '年龄', status char(1) default '1' comment '状态', gender char(1) comment '性别' ) comment '用户表';
此时往表中插入一条数据
INSERT INTO user (name, age, status, gender) VALUES ('李子捌', 18, '1', '男');
出现了如下异常信息
[2022-02-28 11:21:42] [HY000][1366] Incorrect string value: 'xE6x9Dx8ExE5xADx90...' for column 'name' at row 1 [2022-02-28 11:21:42] [HY000][1366] Incorrect string value: 'xE7x94xB7' for column 'gender' at row 1
这种情况就是字符编码格式不匹配问题,这应该如何解决呢?当然是修改字符编码方式。
三、解决方式
首先可以先查看数据库、表和字段的字符集,然后在修改不匹配的字符集即可
A. 查看数据库的字符集方式
-- database_name 为数据库名称 SHOW CREATE DATAbase database_name;
B. 查看表的字符集方式
-- table_name为表的名称 SHOW CREATE TABLE table_name;
C. 查看字段的字符集方式
-- column_name为字段名称 SHOW FULL COLUMNS FROM column_name;
修改数据库、表和字段的字符集方式如下
A. 修改数据库的字符集方式
-- database_name 为数据库名称 -- utf8为目标字符编码 ALTER DATABSE database_name DEFAULT CHARACTER SET utf8;
B. 修改表的字符集方式
-- table_name为表的名称 -- utf8为目标字符编码 ALTER TABLE table_name DEFAULT CHARACTER SET utf8;
C. 修改字段的字符集方式
-- table_name为表的名称 -- column_name为字段名称 -- varchar(20)为字段的类型 -- utf8为目标字符集 ALTER TABLE table_name CHANGE column_name column_name VARCHAr(20) CHARACTER SET utf8;
D. 同时修改表和表中所有字符类型的字段字符集方式
-- 例子:alter table user2 convert to character set utf8 collate utf8_general_ci; ALTER TABLE tbl_name CONVERT TO CHARACTER SET character_name [COLLATE ...]



