Date: 20100101
Auth:
Jin

参考http://blog.sina.com.cn/s/blog_9707fac301016wxm.html

一、字符集介绍

计算机只处理二进制代码

字符集是一套文字符号及其编码,比较规则的集合。

ascii 啊四克  第一个计算机字符集

unicode UTF8 UTF16

二、汉字及一些常见的字符集

GB2312

BGK :BGK在GB2312基础上进行扩充。

GB 18030

三、怎样选择合适的字符集

(1),满足应用支持语言的需求,如应用于不同的国家和地区,则选择unicod字符集。MYSQL来说,就是UTF-8

(2),如果应用中涉及已有数据的导入,要充分考虑数据库字符集对已有的数据的兼容性,已有数据是GBK,不能选择GB2312

(3),如果数据库只需要支持中文,数据量很大,性能要求也很高,那就应该选择双向字节长编号的中文字符集,比如GBK。

(4),如果数据库需要做大量的字符运算,如比较,排序,选择定长字符集可能更好,因为定长字符集的处理速度要比变长字符集处理速度快。

(5),如果所有客户端程序都支持相同的字符集,应该优先选择该字符集作为数据库字符集,这样可以避免字符集转换带来的性能开销和数据损失。

四、Mysql支持的字符集。

1)查看可用字符集

mysql> show charset ;

mysql> show character set;

mysql> show charset like 'utf%';

默认字符集为:latin1

2)显示所有的字符集和该字符集默认的校对规则

mysql> use mysql;

mysql> desc information_schema.character_sets;

MYSQL包括字符集(character)和校对规则(COLLATION)两个概念。字符集使用来定义MYSQL存储字符串的方式,校对规则是定义了比较字符串的方式。

字符集和校对规则是一对多的关系,

查看校对规则

mysql> show collation;

mysql> show collation like 'utf%';

mysql> show collation like 'gb%';

+-------------------+---------+----+---------+----------+---------+

| Collation        
| Charset | Id | Default | Compiled | Sortlen |

+-------------------+---------+----+---------+----------+---------+

| gb2312_chinese_ci | gb2312  | 24 | Yes    
| Yes      |       1 |

| gb2312_bin       
| gb2312  | 86 |         | Yes      |      
1 |

| gbk_chinese_ci   
| gbk     | 28 | Yes     | Yes     
|       1 |

| gbk_bin          
| gbk     | 87 |         | Yes      |  
    1 |

+-------------------+---------+----+---------+----------+---------+

_ci 大小写不敏感

—cs 大小写敏感

—bin 二元,比较基于字符编码的值与language无关

五、Mysql字符集的设置

Mysql字符集和校对规则有4个级别的默认设置、;服务器级,数据库级,表级和字段级。他们分别在不同的地方设置,作用也不相同

(1)服务器字符集和校对规则设置

服务器字符集和校对规则在Mysql启动时确定

a、myc.cnf中设置

[mysqld]

default-character-set=utf8

default-collation=utf8_general_ci

----

default-character-set=gbk

default-collation=gbk_chinese_ci

5.0 /5.1版本

5.5 版本为

character_set_server=utf8

b、启动选项中指定

mysqld --default-character-set=gbk

c、在编译时指定它

./configure --with-charset=gbk

也可以在这里设置mysql只支持的字符集

./configure --with-charset=utf8
--with-collation=utf8_bin
--with-extra-charsets=big5,ascii,gb2312,gbk,utf8,latin1

确认

mysql> show variables like
'character_set_server';

mysql> show variables like 'character%';

mysql> show variables like 'collation_server';

mysql> status

(2)数据库字符集和校对规则设置

可以在创建数据库时设置,也可以在数据库创建后alter database修改

注意:如果数据库里已存在数据,修改字符集不能修改已经存在数据的字符集。

设置数据库字符集的规则是:

如果设置了字符集和校对规则,在使用指定的字符集和校对规则.

如果设置了字符集但没有设置校对规则,在使用指定的字符集和默认校对规则.

如果没有设置字符集和校对规则,在使用服务器字符集和校对规则.

如果不想使用默认值,建议在创建数据库时指定字符集和默认校对规则.

a、查看服务器默认的数据库字符集和默认校对规则-全局

mysql> show variables like
'character_set_database';

mysql> show variables like 'collation_database';

b、查看某一个数据的字符集和校对规则-单个

mysql> show create database dbtest

c、创建数据库时设置字符集和校对规则

create database dbtest default character set
utf8 collate utf8_general_ci;

d、修改已经数据库的字符集和校对规则

注意:如果数据库里已存在数据,修改字符集不能修改已经数据的字符集,需要其他方式才能修改原数据的字符集规则

mysql> alter database dbtest default
character set gbk collate gbk_chinese_ci;

(3)表字符集和校对规则设置

可以在创建表时设置,也可以在表创建后alter table修改

注意:如果表里已存在数据,修改字符集不能修改已经存在数据的字符集,已经存在数据的字符集还是原来的字符集

设置表字符集的规则是:

如果设置了字符集和校对规则,在使用指定的字符集和校对规则.

如果设置了字符集但没有设置校对规则,在使用指定的字符集和默认校对规则.

如果没有设置字符集和校对规则,在使用数据库的字符集和校对规则.

如果不想使用默认值,建议在创建数据库时指定字符集和默认校对规则.

a、查看单个表的的字符集和校对规则-单个,全局的就是这个表所在的数据库的字符集和校对规则

mysql> show create table user \G

b、在创建表时设定字符集和校对规则

mysql> create table tbl_userinfo (

id int(10) NOT NULL AUTO_INCREMENT,

username varchar(25),

dep char(15),

PRIMARY KEY(id)

)ENGINE=innodb default character set utf8 collate
utf8_bin;

索引可以 id int(10) NOT NULL AUTO_INCREMENT PRIMARY KEY

c、修改表的字符集和校对规则

mysql> alter table tbl_userinfo default
character set gbk collate gbk_chinese_ci;

(4)列字符集和校对规则设置

基本很少到

5、连接字符集和校对规则

客户端和服务器的交互操作,MYSQL提供了3个不同的参数,character_set_client,character_set_connection,character_set_results,

分别代表,客户端,连接,返回结果的字符集。

通常情况下这三个字符集是相同的,不会单独设置这三个参数,可以通过以下方法来设置:

1)使用命令来设置连接的字符集和校对规则。

mysql> set NAMES gbk;

这种方法需要每次连接数据库后都执行该命令

2)配置文件my.cnf设置

[client]

default-character-set=utf8

#default-character-set=gbk

3)字符串常量的字符集也是由character_set_connection参数来指定的。

六、字符集的修改步骤

应用于开始阶段没有正确设置字符集,在运行一段时间以后才发现存在不能满足要求需要调整,又不想丢弃这段时间的数据,那么久需要进行以下不走进行字符集修改

mysql> show create database zabbix;

mysql> show create table hosts\G

我们看到使用latin1字符集,我们目标

a,把服务器的默认字符集修改uft8 ,校对规则修改utf8_general_ci,设置字符集为utf8后默认校对规则就为utf8_general_ci

b、修改zabbix数据库,并且将原来的数据修改为utf8

1)、导出数据表结构,

#mysqldump -uroot -pdiege
--default-character-set=utf8 -d zabbix > create_zabbix_database.sql

--default-character-set=utf8 表示以什么字符集连接

-d 表示只导出表结构

2、手动修改create_zabbix_database.sql中定义的字符集为新的字符集

#vim create_zabbix_database.sql

:%s/latin1/utf8/g

3、确保记录不再更新,导出所有记录

#mysqldump -uroot -pdiege --lock-all-tables --quick
--no-create-info --extended-insert --default-character-set=latin1 zabbix >
zabbix_data.sql

--lock-all-tables 锁住所有的表

--quick  用于转储大的表。强制mysqldump从服务器一次一行地检索表中的行而不是检索所有行,并输出前将它缓存到内存中,。

--no-create-info 不写创建表结构的语句

--extended-insert 使用包括几个VALUES列表的多行INSERT语法,这样转储文件更小,重载文件时可以加速插入

--default-character-set=latin1  按原有字符集导出数据。

4、打开zabbix_data.sql将 SET NAMEs
latin1修改为SET NAMES utf8

数据里没有

5、删除原来的zabbix数据库

mysql> drop database zabbix;

6、关闭myslq服务

#/usr/local/etc/rc.d/mysql-server stop

7、修改配置文件/etc/my.cnf 设置默认字符集为utf8

#vim /etc/my.cnf

[client]

default-character-set=utf8

[mysqld]

default-character-set=utf8

default-collation=utf8_general_ci

8、启动myslq服务

#/usr/local/etc/rc.d/mysql-server start

无法启动报错 LOG

110910 21:23:21 
InnoDB: Waiting for the background threads to start

110910 21:23:22 InnoDB: 1.1.8 started; log sequence
number 107574105664

110910 21:23:22 [ERROR] /usr/local/libexec/mysqld:
unknown variable 'default-character-set=utf8'

default-character-set这个参数名在最新的MySQL5.5.8中似乎是无效的。

MYSQL 5.5修改了字符集设置参数

应该改成:

character_set_server=utf8

重新修改配置文件启动

character_set_server=utf8

collation_set_server=utf8_general_ci 这个也错误

9、连接mysql测试服务器默认字符集改动是否成功

mysql> 
show variables like 'character_set_server';

+----------------------+-------+

| Variable_name        | Value |

+----------------------+-------+

| character_set_server | utf8  |

+----------------------+-------+

1 row in set (0.00 sec)

mysql> show variables like 'collation_server';

+------------------+-----------------+

| Variable_name   
| Value           |

+------------------+-----------------+

| collation_server | utf8_general_ci |

+------------------+-----------------+

1 row in set (0.00 sec)

创建一个数据测试

mysql> create database tech;

Query OK, 1 row affected (0.00 sec)

mysql> show create database tech;

+----------+---------------------------------------------------------------+

| Database | Create Database                                               |

+----------+---------------------------------------------------------------+

| tech     |
CREATE DATABASE `tech` /*!40100 DEFAULT CHARACTER SET utf8 */ |

+----------+---------------------------------------------------------------+

1 row in set (0.00 sec)

10、创建zabbix 数据库

mysql> create database zabbix default character
set utf8;

11、导入数据结构

#mysql -uroot -pdiege zabbix <
create_zabbix_database.sql

验证

mysql> show create table users \G

12、导入数据

mysql> use zabbix

mysql> source
/data/backup/db/20110910/zabbix_data.sql

13、开启zabbix测试

MYSQL复习笔记6-字符集的更多相关文章

  1. MYSQL复习笔记2-自带工具介绍

    Date: 20140102Auth: Jin 一.mysql 命令行客户端1)base-h host-P port--socket=path,-S path用于连接的套接字文件替换使用IP PORT ...

  2. MYSQL复习笔记9-存储过程

    date: 20140208auth: Jin参考引用:http://blog.sina.com.cn/s/blog_52d20fbf0100ofd5.html mysql存储过程详解一.基本介绍1. ...

  3. MYSQL复习笔记4-基本SQL语句

    Date: 20140115Auth: Jin参考:http://dev.mysql.com/doc/refman/5.1/zh/sql-syntax.html#select一:数据库操作1:显示数据 ...

  4. MYSQL复习笔记1-物理文件和系统架构

    date:20140101auth:Jin 一.物理组成(一) 日志文件参考:http://dev.mysql.com/doc/refman/5.1/en/server-logs.html1.错误日志 ...

  5. MYSQL复习笔记13-触发器trigger

    Date: 20140305Auth: Jin 一.概念1.基本概念触发器是一个被指定关联到一个表的数据对象,触发器是不需要调用的,当对一个表的特别事件出现时,它就被激活.触发器的代码也是由SQL语句 ...

  6. MYSQL复习笔记12-视图

    Date: 20140223Auth: Jin参考:http://blog.sina.com.cn/s/blog_436732df0100e768.html 一.介绍1.概念视图是从一个或几个基本表( ...

  7. MYSQL复习笔记10-连接

    Date: 20140219Auth: Jin 一.介绍连接是二元运算,可以对两个表或多个表进行查询.T-SQL中分两大类,一是符合SQL标准的连接谓词表示形式,二是T-SQL扩展的使用关键字JOIN ...

  8. MYSQL复习笔记8-数据完整性

    Date: 20140207Auth: Jin 一.数据完整性的分类数据完整性是指数据库中数据在逻辑上的一致性和准确性.包括三种1.实体完整性又称行的完成性,要求表中有一个主键,其值不能为空且唯一地标 ...

  9. MYSQL复习笔记7-索引

    Date: 20140207Auth: Jin 索引是根据表中一列或若干列按照一定顺序建立的列值与记录行之间的对应关系表. 索引的主要作用 快速存取数据 保证数据记录的唯一性 实现表与表之间的参照完整 ...

随机推荐

  1. 448D - Codeforces

    D. Multiplication Table time limit per test 1 second memory limit per test 256 megabytes Bizon the C ...

  2. linux系统下git使用

    转载:http://www.cnblogs.com/bear2flymoon/p/4335364.html?ADUIN=563508762&ADSESSION=1430887070&A ...

  3. Linux内核通知链分析【转】

    转自:http://www.cnblogs.com/jason-lu/articles/2807758.html Linux内核通知链分析 1. 引言 Linux是单内核架构(monolithic k ...

  4. perl 函数参数传递与返回值(一)

    perl 函数参数传递与返回值(一) http://www.cnblogs.com/tobecrazy/archive/2013/06/11/3131887.html

  5. python设计模式之单例模式(一)

    单例设计模式的概念: 单例设计模式即确保类有且只有一个特定类型的对象,并提供全局访问点.一般我们操作数据库的时候为了避免统一资源产生互相冲突,创建单例模式可以维护数据的唯一性. 单例模式的特性: 确保 ...

  6. 【ZJOI2016】大森林

    这题理论上可以用ETT,但是用LCT建虚点可以解决这个问题. 对于最晚的操作1建立一个虚点,然后把操作0挂上去. #include<bits/stdc++.h> ; using names ...

  7. JavaScript中数组对象详解

    Array对象即数组对象用于在单个变量中存储多个值,JS的数组是弱类型的,所以允许数组中含有不同类型的元素,数组元素甚至可以是对象或者其他数组. 创建数组的语法 1.Array构造器 1.var li ...

  8. HDU-5384

    Danganronpa Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Tot ...

  9. 关于云平台中OFFICE预览与视频预览的解决办法

    最近,随着firefox x64的升级,出现flash插件完全被禁止的现象,html5替换是大势所趋,原来我们在云平台中有多处使用flash的地方,比如OFFICE预览,视频播放,游戏等,现对于OFF ...

  10. WordPress函数query_posts用法汇总

    最近经常有网友跟我咨询WordPress函数query_posts的相关用法,说起来query_posts实在是太强大,参数无数,用法更是无数,如果让我说它的用法,我根本没法一一说清楚.开始之前,你可 ...