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. Laravel 项目登录报错:The MAC is invalid.

    在 Laravel 项目完成部署到服务器.数据库导入成功后 后台登录报错: 原因是 Laravel 的 APP_KEY 和 encrypt() 函数加密的问题.(encrypt() 是 Laravel ...

  2. [转载]关于python字典类型最疯狂的表达方式

    一个Python字典表达式谜题 让我们探究一下下面这个晦涩的python字典表达式,以找出在python解释器的中未知的内部到底发生了什么. # 一个python谜题:这是一个秘密 # 这个表达式计算 ...

  3. python的IDLE界面回退代码语句

    Alt+P回退到IDLE中之前输入的代码语句 Alt+N可以移至下一个代码语句

  4. SQL利用Case When Then多条件判断SQL 语句

    http://www.cnblogs.com/kevin2013/archive/2010/07/02/1769682.html SQL利用Case When Then多条件判断SQL ,用于sele ...

  5. Leetcode 之Length of Last Word(38)

    做法很巧妙.分成左右两个对应的部分,遇到左半部分则入栈,遇到右半部分则判断对应的左半部分是否在栈顶.注意最后要判断堆栈是否为空. bool isValid(const string& s) { ...

  6. linux命令(13):kill/killall命令

    停止指定的进程名:kill 进程ID号 把所有httpd进程杀掉:killall httpd 强制停止进程mysqld:killall -9 mysqld

  7. Django 如何实现文件下载

    1. 思路: 文件,让用户下载 - a标签+静态文件 - 设置响应头(django如何实现文件下载) 2. a标签实现 <a href="/static/xxx.xlsx"& ...

  8. PHP给图片加水印具体实现

    给图片加水印实现方法如下: class Mark { public function __construct() { } /** * 加水印 * @param file $srcImg 要加水印的图片 ...

  9. W3School WebService教程

    http://www.w3school.com.cn/webservices/index.asp

  10. logger日志的几个方法

    logger.debug.logger.info.logger.warn.logger.error.logger.fatal 的区别: 相同处:它们的作用都是把错误信息写到文本日志里 不同的是它们表示 ...