在插入或修改数据的时候,报字符集的错误,中文的无法进行插入修改。比如:
update users set user_name='关羽' where user_id=2;
报错信息:
ERROR 1366 (HY000): Incorrect string value: '/xB9/xD8/xD3/xF0' for column 'user_name' at row 1
向表中插入中文字符时,出现错误。
1,查看字符集
1,查看MYSQL数据库服务器和数据库字符集
方法一:查看字符集
show variables like '%character%';
方法二:查看校对集字符
show variables like 'collation%';
MySQL 中每个字符集都会对应多个校对规则,是一对多的关系。比如utf8对应的collation有utf8_general_ci,utf8_bin,utf8_unicode_ci等。而且每个character set会有个默认的collation与之对应,在创建数据库或者创建表时如果只指定character set,不指定collation,就会使用character set默认的collation。collation的命名是以对应的character set为开头,比如collation为utf8_general_ci,就知道这个collation对应的字符集是utf8。
-- 查看校对规则有哪些
SHOW COLLATION;
2,查看MYSQL所支持的字符集
sql语句:
show charset;
3,查看库的字符集
语法:
SHOW CREATE DATABASE database_name;
例如:
SHOW CREATE DATABASE test;
查看当前数据库的字符集:
SELECT @@character_set_database;
4,查看表的字符集
语法:
show table status from 库名 like 表名;
例如:
SHOW TABLE STATUS FROM test LIKE 'worker%';
5,查看表中所有列的字符集
语法:
show full columns from 表名;
例如:
SHOW FULL COLUMNS FROM worker;
Collation字段对应字符集
2,设置字符集
设置字符集一般有两种方法,一种是在创建表的时候设置字符集,另一种是表建成之后修改字符集。也还可以指定字段的字符集。
1,创建时指定字符集
1,创建库的时候指定字符集:
语法:
create database 库名 default character set=字符集;
例如:
create database test1 default character set=utf8;
2,创建表的时候指定字符集:
语法:
create table 表名(属性)default character set = 字符集;
例如:
CREATE TABLE `worker2` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(30) DEFAULT NULL,
PRIMARY KEY (`id`)
) DEFAULT CHARSET=utf8;
3,字段指定字符集
语法:
create table 表名 (字段名 数据类型 character set 字符集名);
例如:
CREATE TABLE `worker3` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(30) DEFAULT NULL,
`gender` CHAR(1) CHARACTER SET gbk,
PRIMARY KEY (`id`)
) DEFAULT CHARSET=utf8;
再查看字段的字符集:
SHOW FULL COLUMNS FROM worker3;
gender字符集是gbk的
2,修改字符集
1,修改全局字符集
/*字符集设置*/
/*建立连接使用的编码*/
set character_set_connection=utf8;
/*数据库的编码*/
set character_set_database=utf8;
/*结果集的编码*/
set character_set_results=utf8;
/*数据库服务器的编码*/
set character_set_server=utf8;
/*修改全局字符集*/
set character_set_system=utf8;
/*校对集字符设置*/
/*连接使用的编码*/
set collation_connection=utf8;
/*数据库的编码*/
set collation_database=utf8;
/*数据库服务器的编码*/
set collation_server=utf8;
2,修改库的字符集
语法:
alter database 库名 default character set 字符集;
例如
alter database test default character set utf8;
查看数据库当前的字符集编码
show create database test;
3,修改表的字符集
语法:
alter table 表名 convert to character set 字符集;
例如:
alter table worker3 convert to character set utf8;
再查看worker3字段的字符集
SHOW FULL COLUMNS FROM worker3;
可以看到gender字段的字符集改为utf8了。
4,修改字段的字符集
语法:
alter table 表名 modify 字段名 字段属性 character set 字符集;
例如:
alter table worker3 modify gender char(1) character set gbk;
再查看worker3字段的字符集
SHOW FULL COLUMNS FROM worker3;
可以看到gender字段的字符集改为gbk了。
3,总结:
平时设置字符集感觉很少,默认都是系统设置的校对集字符。更多是出现报错了,插入中文字符的数据失败了,才会去查看表字段的字符集,再查看表格的字符集,最后查数据库的字符集,一级一级往上定位。