一:语法
{} create_specification:[DEFAULT] CHARACTER SET [=] charset_name #指定字符集| [DEFAULT] COLLATE [=] collation_name #specifies the default database collation (排序规则)例如:创建数据库并指定字符集 create database db2 default character set=utf8
备注:数据库的字符集存储在数据库目录下的db.opt文件中,我们可通过 find / -name db.opt 查找并用less 查看相关db.opt文件如下
二:关于 CHARACTER SET 和 COLLATE
三:查看相关字符集
3.1 :查看MYSQL数据库服务器和数据库字符集
方法一:show variables ;
3.2 :查看表的字符集(show table status from 库名 like 表名)
show status test3 ;
3.4 :查看表中所有列的字符集(show full columns from 表名;)
show full columns from test3.students;
注意:数值型的列没有 collation特性
四:修改相关的字符集
4.1.创建时指定字符集
db2 test1(id (),name ()) ;
4.2修改相关字符集
character_set_connectioncharacter_set_databasecharacter_set_resultscharacter_set_serverset character_set_system=utf8;set collation_connection=utf8;set collation_database=utf8;set collation_server=utf8;
4.3 修改库的字符集(alter database 库名 default character set 字符集;)
mysql show . row : `shiyan` row (mysql> alter database shiyan default character set gbk;
Query OK,1 row affected (0.00 sec)
4.4修改表字符集(alter table 表名 convert to character set 字符集;)
show create table test1\G
*************************** 1. row ***************************
Table: test1
Create Table: CREATE TABLE `test1` (
`id` int(6) DEFAULT NULL,`name` char(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=gbk #原字符集
1 row in set (0.00 sec)
mysql> alter table test1 convert to character set utf8;
Query OK,0 rows affected (0.58 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> show create table test1\G
1. row
Table: test1
Create Table: CREATE TABLE test1 (
id int(6) DEFAULT NULL,name char(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 #修改后的字符集
1 row in set (0.00 sec)
4.5修改字段的字符集(alter table 表名 modify 字段名 字段属性 character set gbk;)
test1 modify name () gbk;
五:案例分析
当我们不知道因和原因创建的一个表(teacher),当我们向表中插入数据是发生乱码如下
sql : INSERT INTO teacher(tid,class_id,NAME)VALUE(312,2,'小明');