查看相关字符集的命令
查看数据库支持的所有字符集(两种命令一样):
show character set;
show char set;
查看字符集对应的COLLATE
show collation;
查看系统字符集设置,包括所有的字符集设置:
show variables like '%char%';
mysql> show variables like '%char%';
+--------------------------+---------------------------------------------------------+
| Variable_name | Value |
+--------------------------+---------------------------------------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | C:\Program Files\MySQL\MySQL Server 5.7\share\charsets\ |
+--------------------------+---------------------------------------------------------+
8 rows in set, 1 warning (0.01 sec)
其中的含义如下:
client:为客户端使用的字符集
connection:为连接数据库的字符集设置类型,如果成行没有指明连接数据库使用的字
符集类型则按照服务器端默认的字符集设置。
database: 为数据库服务器中表和字段默认使用的字符集设定,
如果表和字段没有设定字符集,默认使用此字符集。
results: 为数据库给客户端返回时使用的字符集设定,如果没有指明,使用服务器默认的字符集。
server:为服务器安装时指定的默认字符集设定。 创建数据库时的默认字符集
system:为数据库系统使用的字符集设定
character_set_connection、character_set_client、
character_set_results
三个字符集什么时候用到。从实际上可以看到,当客户端连接服务器的时候,
它会将自己想要的字符集名称发给mysql服务器,然后服务器就会使用这个字符集去设置
character_set_connection、character_set_client、
character_set_results这三个值。
查看表中的字段设置的字符集:
show full columns from t_class;
查看表设置的字符集
show create table t_class\G;
查看数据库设置的字符集
show create database cms;
创建时指定字符集
服务器级:
在安装MySQL时可以设置服务器的默认编码格式,也可对my.ini做修改,
修改[mysqld]里面的character_set_server=utf8,
则可设置character_set_server的值。
数据库级:
CREATE DATABASE db_name DEFAULT CHARACTER SET utf8;
如果不指定默认的字符集,则系统会根据character_set_server的值进行设置
表级:
CREATE TABLE db_name.tb_name (id VARCHAR(20) NOT NULL,name VARCHAR(20) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
如果不指定默认的字符集,则系统会根据database的值进行设置
列级:
CREATE TABLE db_name.tb_name ( id varchar(20) NOT NULL, name varchar(20) CHARACTER SET utf8 );
如果不指定默认的字符集,则系统会根据database的值进行设置
修改字符集命令
修改character_set_connection、character_set_client、
character_set_results三值:
语法:SET NAMES 'charset_name' [COLLATE 'collation_name']
set names utf8等同于下面三个:
SET character_set_client = utf8;
SET character_set_results = utf8;
SET character_set_connection = utf8;
修改数据库字符集
alter database 数据库名 character set utf8;
修改表的字符集
ALTER TABLE 表名 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE 表名 DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;
修改列的字符集
ALTER TABLE t1 CHANGE name name VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE t1 CHANGE name name VARCHAR(100) CHARACTER SET gbk COLLATE gbk_chinese_ci;
设置 my.ini中的字符集
[mysqld]
character-set-server = utf8
这个参数 控制character-set-server和character_set_database的值
控制数据库,表,字段默认的字符集
set names utf8
控制当前session的character_set_connection、character_set_client、
character_set_results的字符集
控制客户端查看数据库时的乱码问题