文章目录
参考资料:
MySQL 5.1参考手册,第10.3章节 - 确定默认字符集合校对(建议直接看官方手册,介绍的非常清晰)
MySQL字符集 GBK、GB2312、UTF8区别 解决MYSQL中文乱码问题
UTF-8和GBK编码之间的区别(页面编码、数据库编码区别)以及在实际项目中的应用
字符集级别
字符集和校对规则有4个级别的默认设置:服务器级、数据库级、表级和连接级。以下描述可能显得复杂,但是在实际应用中可以发现使用多种级别会使结果自然而明显。
服务器字符集和校对
数据库字符集和校对
表字符集和校对
列字符集和校对
连接字符集和校对
MySQL5.1提供了以下几个系统变量来设置字符集:
- character_set_server 服务器字符集
- character_set_database 默认数据库的字符集
- character-set-table:数据库表字符集。
- 优先级依次增加。所以一般情况下只需要设置character-set-server,而在创建数据库和表时不特别指定字符集,这样统一采用character-set-server字符集。
- character_set_client 客户端字符集,当客户端向服务器发送请求时,请求以该字符集进行编码。
- character_set_results 变量指示服务器返回查询结果到客户端使用的字符集。包括结果数据,例如列值和结果元数据(如列名)。结果字符集。服务器向客户端返回结果或者信息时,结果以该字符集进行编码。
- character_set_connection 它将客户端发送的查询从character_set_client系统变量转换到character_set_connection
原文如下:
一些字符集和校对规则系统变量与客户端和服务器的交互有关。
· 服务器字符集和校对规则可以用作character_set_server和collation_server变量的值。
· 默认数据库的字符集和校对规则可以用作character_set_database和collation_database变量的值。
在客户端和服务器的连接处理中也涉及了字符集和校对规则变量。每一个客户端有一个连接相关的字符集和校对规则变量。
考虑什么是一个“连接”:它是连接服务器时所作的事情。客户端发送SQL语句,例如查询,通过连接发送到服务器。服务器通过连接发送响应给客户端,例如结果集。对于客户端连接,这样会导致一些关于连接的字符集和 校对规则的问题,这些问题均能够通过系统变量来解决:
· 当查询离开客户端后,在查询中使用哪种字符集?
服务器使用character_set_client变量作为客户端发送的查询中使用的字符集。
· 服务器接收到查询后应该转换为哪种字符集?
转换时,服务器使用character_set_connection和collation_connection系统变量。它将客户端发送的查询从character_set_client系统变量转换到character_set_connection(除非字符串文字具有象_latin1或_utf8的引介词)。collation_connection对比较文字字符串是重要的。对于列值的字符串比较,它不重要,因为列具有更高的 校对规则优先级。
· 服务器发送结果集或返回错误信息到客户端之前应该转换为哪种字符集?
character_set_results变量指示服务器返回查询结果到客户端使用的字符集。包括结果数据,例如列值和结果元数据(如列名)。
你能够调整这些变量的设置,或可以依赖默认值(这样,你可以跳过本章)。
字符串文字字符集和校对
查看字符集设置
使用GUI工具
- 可以使用图形界面GUI工具,如SQLyog查看数据库、表、表的内容的字符编码
使用命令行
- 数据库的字符集设置 ,show create database 数据库的名字
- 数据库表中字段的字符集设置 ,show create table TableName 或 show full columns from tableName
- 当前联接系统参数 ,show variables like ‘char%’
设置默认字符集
配置文件
MySql的配置文件Windows下一般在系统目录下或者在MySql的安装目录下名字叫my.ini,可以搜索,Linux下一般是/etc/my.cnf
命令行
set character_set_client = utf8;
set character_set_server = utf8;
set character_set_connection = utf8;
set character_set_database = utf8;
set character_set_results = utf8;
set collation_connection = utf8_general_ci;
set collation_database = utf8_general_ci;
set collation_server = utf8_general_ci;
重启MySQL服务
Windows可在服务管理器中操作,
在安装mysql时系统会添加服务,可以通过管理工具里面的 <服务> 一项来停止和启动mysql。这样修改的my.ini就会生效了。
也可使用命令行:
net stop mysql 回车
net start mysql 回车
如果你没安装系统服务,也可在命令行模式定位到mysql下的bin目录里,输入:
(关闭)mysqladmin shutdown
(启动)mysqladmin start
Linux下面可是用 service mysql restart
修改数据库、表字符集
-
创建库时指定字符集
create database 数据库的名字 character set 字符集; create database day06_1 character set utf8;
-
修改库的字符集
-- 修改数据的字符集 alter database 数据库的名字 character set 字符集; alter database day06_1 character set gbk;
-
创建表时指定字符集
CREATE TABLE mytable( id varchar(40) NOT NULL default '', userId varchar(40) NOT NULL default '' ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
修改表的字符集
-- 修改表的字符集,一般不要改动 alter table 原表名 character set 字符集; alter table heima character set gbk;