MySql(20)------mysql字符集的设置

原创 2016年08月30日 09:46:30

 一 MySql字符集概要

MySql服务器支持多种支付集,灵活性很强。

查看MySql可用字符集命令show character set:

MySql字符集包括字符集(CHARACTER)和校对规则(COLLATION)两个概念。

字符集用来定义MySql存储字符串的方式,校对规则用来定义比较字符串的方式。

字符集和校对规则是一对多的关系,支持30多种字符集和70多种校对规则。

每个字符集至少对应一种校对规则。用show collation like '******'命令或者系统表information_schema.COLLATIONS

来查看相关字符集的校对规则。

eg:

mysql 5.7的utf8有很多校对规则,全部截图太长,

校对规则命名规则:

以相关字符集开始,通常包括一个语言名,以_ci(大小写不敏感), _cs(大小写敏感) 或_bin(二元,比较基于字符编码值与语言无关)结束。

比如,utf8_general_ci字符串比较对大小写不敏感,而utf8_bin对字符串大小写比较敏感。

如果,使用utf8字符集,utf8-general_ci校对规则,‘A’与'a'比较时认为是一样的,而 如果使用utf8_bin则认为是不一样的。

二 MySql字符集设置

MySql字符集和校对规则有4个级别的默认设置,分别为:

服务器级,数据库级,表级,字段级。

2.1 服务器级别

服务器级别字符集可以在启动时指定

第一种方式,在配置文件中指定,windows在my.ini中,linux在my.cnf中,一般文件是这样的,可以根据自己的情况,找到数据库配置修改。

[mysqld]
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8

第二种方式,在启动项中指定
mysqld --character-set-server=utf8

第三种方式,编译时指定
shell> cmake . -DDEFAULT_CHARSET=utf8

通过上面这种方式,我们只是指定了mysql服务字符集,对应的校对规则用的是指定字符集默认的校对规则,如果需要

修改校对规则,需要在指定字符集后进行校对规则修改。

我们可以通过show variables like 'character_set_server'查看当前数据库服务的字符集,

通过show variables like 'collation_server'查看数据库服务字符集对应的校对规则。

eg:


2.2 数据库级别

数据库字符集和校对规则可以在创建数据库时指定,也可以在创建完数据库之后进行修改。

如果数据库中已经存放数据,修改数据库字符集并不能修改旧数据,只针对新数据存放有效。

对旧数据需要单独对数据进行修改。

数据库字符集和校对规则修改原则:

(1)如果修改了字符集和校对规则,则使用指定的字符集和校对规则。

(2)如果修改了字符集,没有修改校对规则,则使用指定的字符集和字符集对应的默认校对规则。

(3)如果修改了校对规则,没有修改字符集,则使用校对规则对应的字符集和指定的校对规则。

(4)如果字符集和校对规则都没有指定,则使用数据库服务对应的字符集和校对规则。

我们可以使用show variables like 'character_set_database'查看字符集,

使用show variables like 'collation_database'查看校对规则,

通过alter database修改,

如alter database database_name character set gbk修改字符集,

alter database database_name collate gbk_bin修改校对规则,

alter database table_name character set gbk collate gbk_bin一起修改。

eg:


2.3 表级别

与数据库级别修改规则类似,通过通过alter table修改。

alter table table_name character set gbk修改字符集,

alter table table_name collate gbk_bin修改校对规则,

alter table table_name character set gbk collate gbk_bin一起修改。

表级别字符集和校对规则修改原则:

(1)如果修改了字符集和校对规则,则使用指定的字符集和校对规则。

(2)如果修改了字符集,没有修改校对规则,则使用指定的字符集和字符集对应的默认校对规则。

(3)如果修改了校对规则,没有修改字符集,则使用校对规则对应的字符集和指定的校对规则。

(4)如果字符集和校对规则都没有指定,则使用数据库级别对应的字符集和校对规则。

一般建议在创建表时指定字符集和校对规则,避免受默认值影响。

通过show create table table_name \G 命令查看,但是如果使用的是默认的,是看不到校对规则的,

为了能看到效果,不使用默认:

eg:

表结构中最后可以看到校对规则COLLATE=utf8-bin;

2.4 列级别

如果使用创建时没有指定列级别,默认使用表级别的字符集和校对规则。很少使用。

三 连接字符集和校对规则

在实际使用中,除了4中设置外,还分为客户端和服务器端字符集和校对规则设置。

客户端和服务器端设置有3个参数:character_set_client,character_ser_connection,character_set_results,

这3个分别代表客户端,连接和返回结果字符集。一般情况下,这3个字符集是一样的,才能保证数据能够

进行正确的读写,特别是中文,不同的字符集写入,而不同的字符集是不能正确读出的,常见的就是乱码问题。

我们可以通过命令设置3个参数字符集一致。

SET NAMES ***;

使用这种方式设置3个参数字符集,需要每次应用数据库时都执行,比如,每次执行脚本时,在脚本第一行都加上set names ***;

eg:

SET NAMES utf8;

永久的办法是修改mysql配置文件,配置客户端字符,

[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
重启mysql服务,立刻生效,不用每次更新脚本都带上set names **;有粗心同事忘了,更新的是一堆乱码,神也看不懂。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

linux 下 的php网页文件输出乱码?

linux 下 的php网页文件输出乱码?

【Developer Log】部署安全:隐藏Apache的版本信息

在Apache - PHP的部署中,Apache响应消息header中的Server带有Apache的版本信息,如下: 这在生产环境中是有潜在危险的,可以被扫描出所使用的版本,如果这个版本具有已知的...

【2014/10/20】mysql 字符集 表

整理: 一:停止和开启mysql服务 net start mysql; net stop mysql;  二:配置文件是my.ini 数据库存储引擎 innoDB MyISAm M...
  • si_sky
  • si_sky
  • 2014年10月20日 17:44
  • 290

查看和设置MySQL数据库字符集.pdf

  • 2012年09月18日 20:54
  • 113KB
  • 下载

mysql字符集设置

  • 2010年03月18日 14:33
  • 4KB
  • 下载

Linux下 C语言 Mysql操作和字符集设置

一、C语言 Mysql操作 首先安转libmysql库。 # sudo apt-get install libmysql++-dev 把MySQL的库拷贝到公共库中。 # sudo cp -ri ...

设置mysql字符集

  • 2012年12月19日 15:32
  • 2KB
  • 下载

Mysql字符集设置方法分享

使用的mysql数据库中,插入数据出现乱码,这里记录下遇到错误产生的深层次原因和解决办法。 基本概念 • 字符(Character)是指人类语言中最小的表义符号。例如’A'、’B'等; • 给定...

mysql字符集查询与设置方法

说到底mysql 乱码的根源是的 mysql 字符集设置不当的问题。 有关查看 mysql 字符集的命令。 包括查看 mysql 数据库服务器字符集、查看 mysql 数据库字符集,以及数...

mysql字符集设置

最近一直在弄一个有关mysql proxy的项目,中间涉及到对sql语句的解析。之前对mysql了解的并不是太多,随着项目的推进,不得不补补了。今天突然看到mysql的charset设置,自己很多地方...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MySql(20)------mysql字符集的设置
举报原因:
原因补充:

(最多只允许输入30个字)