您的位置:首页 > 数据库 > MySQL

Mysql学习笔记四,字符集

2015-11-24 19:58 405 查看

字符集概述

字符集: 一套文字符号及编码、比较规则的集合。

ASCII: 最早的标准字符集, 包含英文字母、阿拉伯数字、标点符号和33个控制字符。定长,一个字符7位编码。

Unicode: 为了统一各种语言,基本能包括所有已知再用的字符。 一个字符4个字节编码。UTF-8/UTF-16 定义了这个4个字节的编码在计算机中如何表示(如部分ASCII可以单字节表示, 等等)

UTF-8: 非定长,1-4字节编码。互联网上广泛支持的Unicode编码方式。

汉字及常见字符集

GB2312-80: 1980年发布, 定长,双字节编码, 收录了 6763 个常用汉字和 682个非汉字图形符号。

GBK: 完全兼容GB2312, 定长,双字节编码,收录了20902+增补的52个汉字。

GB18030: 扩展了GBK,非定长,相同部分双字节编码,其他四字节编码,收录27,484CJK汉字。

Mysql上如何选择字符集

如需支持多国语言,选择UTF-8。

如果只支持中文,且中文很多, 又要求性能高, 可以选择GBK。因为GBK对中文是双字节编码,UTF-8是三字节编码。但是如果大部分都是英文,选择UTF-8优于GBK, 英文在UTF-8中是单字节编码,在GBK中是双字节编码。

定长相较于非定长,在做字符运算(比较、排序)时效率更高。

Mysql 可以针对底层的对象如一个表的某一个字段来指定它的字符集。

每个字符集都有多个校对规则。校对规则决定了字符串比较方式。以gbk为例:

*_ci: 大小写不敏感,*_cs: 大小写敏感,*_bin: 基于字符编码比较。

show character set; --查看MySql支持的字符集
show collation like 'gbk%'; --查看gbk的校对规则


设置Mysql的字符集

四个级别:服务器级、数据库级、表级、字段级

- 服务器字符集和校对规则

1 my.cnf中设置

[mysqld]

default-character-set=gbk

2 启动选项时指定:

mysqld –default-character-set=gbk

3 编译时指定:

./configure –with-character=gbk

指定字符集的时候,可以同时指定对应的校对规则(如果你使用该字符集非默认的校对

规则)

如果没有指定字符集,那么会默认使用latin1。

show variables like 'character%';--查看默认字符集
show variables like 'collation%';--查看默认校对规则


数据库级字符集和校对规则

1 创建数据库的时候指定。

2 可以通过alter database 来修改,修改不会对已有数据产生影响。

表级字符集和校对规则

1 创建表的时候指定。

2 可以通过alter table来修改,修改不会对已有数据产生影响。

show create table t1;--查看t1的默认字符集和校对规则


列级字符集和校对规则

1 创建表的时候指定。

2 可以通过alter table来修改,修改不会对已有数据产生影响。

3 如果不指定,默认使用表的定义。

连接字符集和校对规则

客户端和服务器的交互操作,MylSQL 提供了 3 个不同的参数:character_set_client、

character_set_connection 和 character_set_results, 分别代表客户端、 连接和返回

结果的字符集, 可以使用

set names utf8; --本次连接使用的字符集, 同时指定上述三个参数。


还可以指定字符串常量字符集:

select _gbk '测试';--字符串常量指定字符集


字符集修改步奏

希望修改字符集,但又担心已有数据修改不了,可以按照下面步奏:

(1)导出表结构:
mysqldump -uroot -p --default-character-set=gbk -d databasename>

createtab.sql
其中–default-character-set=gbk 表示设置以什么字符集连接, -d 表示只导出表

结构,不导出数据。

(2)手工修改 createtab.sql 中表结构定义中的字符集为新的字符集。

(3)确保记录不再更新,导出所有记录。
mysqldump -uroot -p --quick

--no-create-info --extended-insert --default-character-set=latin1

databasename> data.sql


–quick:该选项用于转储大的表。它强制 mysqldump 从服务器一次一行地检索表中

的行而不是检索所有行,并在输出前将它缓存到内存中。

–extended-insert:使用包括几个 VALUES 列表的多行 INSERT 语法。这样使转储文

件更小,重载文件时可以加速插入。

-no-create-info:不写重新创建每个转储表的 CREATE TABLE 语句。

–default-character-set=latin1: 按照原有的字符集导出所有数据, 这样导出的文件

中,所有中文都是可见的,不会保存成乱码。

(4)打开 data.sql,将 SET NAMES latin1 修改成 SET NAMES gbk。

(5)使用新的字符集创建新的数据库。

create database databasename default charset gbk;

(6)创建表,执行 createtab.sql。

mysql -uroot -p databasename < createtab.sql

(7)导入数据,执行 data.sql。

mysql -uroot -p databasename < data.sql

* 目标字符集最好是源字符集的超集。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: