mysql 开发基础系列14 字符集
字符集是一套文字符号及其编码,比较规则的集合。第一个字符集是ascll(american standard code for information interchange)。
1. 选择合适的字符集
对于数据库来说,字符集很重要,因为数据库存储的数据大部分是各种文字,字符集对数据库的存储,处理性能,以及日后系统的移植,推广都有会影响
如何选择呢?
UTF-8: 如果应用要处理各种各样的文字,或将发布使用不同语言的国家或地区,就应该选择 Unicode字符集,对于mysql 目前就是UTF-8。如果主要处理英文字符,仅有少量汉字数据,那么选择utf-8更好。因为gbk,ucs-2,utf-16对西文字符编码都是2字节,会造成不必要的开销。
GBK: 如果数据库只需要支持一般中文,数据量很大,性能要求也很高,那应该选择双字节定长编码的中文字符集GBK。相对于uft-8而言,gbk比较“小”,每个汉字只占2个字节,而utf-8汉字编码需要3个字节,这样可以减少磁盘I/0, 数据库缓存,以及网络传输的时间。
如果数据库需要做大量的字符运算,如比较,排序等,选择定长的字符集可能更好,因为定长字符集比变长处理速度快。如gbk固定双字节,utf-32固定4字节。
客户端程序使用的字符集, 在数据库端应优先选择该字符集,避免因字符集转换带来性能开销和数据损失。
2. mysql 字符集
mysql 支持几十种字符集。 如下图所示:
SHOW CHARACTER SET;
3. mysql字符集的设置
有4个级别的默认设置:服务器级,数据库级,表级,字段级。
3.1 在服务器级,对my.cnf设置,在启动mysql服务
3.2 数据库级
如果数据库中已有记录,修改字符集对原有的记录并没有影响,只对新记录使用。
-- 查看当前数据库字符集
SHOW VARIABLES LIKE 'character%';
-- 修改数据库字符集
ALTER DATABASE 数据库名 CHARACTER SET utf8;
3.3 表级
可以通过alter table来修改,如果表中已有记录,修改字符集对原有的记录并没有影响,只对新记录使用。
-- 查看
SHOW CREATE TABLE t;
-- 修改表的字符集
ALTER TABLE 表名 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
3.4 列级
这种控制一般机率比较小,只是给我们提供了一个灵活设置的手段。
4 字符集修改
如果在应用开始阶段没有正确设置字符集,在运行一段时间后发现不能满足要求需要调整,这时不能通过alter database character set 或alter tablename character set
命令进行,因为这两个命令都不会更新已有记录的字符集,对于已有的记录的字符集调整,需要先将数据导出,经过适当的调整重新导入后才完成。
需要使用mysqldump工具来做导出导入,这里就不在演示只标记下:
以下是将iatin1字符集的数据库修改成GBK字符集的数据库过程
4.1 导出表结构:
mysqldump -uroot -p --default-character-set=gbk -d databasename> createtab.sql
4.2导出数据
mysqldump -uroot -p --quick --no-create-info --extended-insert
--default-character-set=latin1 databasename> data.sql
4.3 打开data.sql 将set names iatin1 修改成set names gbk
4.4 使用新的字符集创建新的数据库
create database databasename default charset gbk;
4.5创建表 ,执行createtab.sql
mysql -uroot -p databasename < createtab.sql
4.6导入数据,执行data.sql
mysql -uroot -p databasename < data.sql
mysql 开发基础系列14 字符集的更多相关文章
- mysql 开发基础系列12 选择合适的数据类型(上)
一. char 与varchar比较 在上图的最后一行的值只适用在"非严格模式",关于严格模式后面讲到.在“开发基础系列4“ 中讲到CHAR 列删除了尾部的空格.由于char是固定 ...
- mysql 开发基础系列1 表查询操作
在安装完数据库后,不管是windows 还是linux平台, mysql的sql命令都大同小异,相关命令都是相同的,每个命令结束后 都以 ; 结尾, 注意在windows平台中表名是不区分大小写 ...
- mysql 开发基础系列20 事务控制和锁定语句(上)
一.概述 在mysql 里不同存储引擎有不同的锁,默认情况下,表锁和行锁都是自动获得的,不需要额外的命令, 有的情况下,用户需要明确地进行锁表或者进行事务的控制,以便确保整个事务的完整性.这样就需要使 ...
- mysql 开发基础系列17 存储过程和函数(上)
一. 概述 存储过程和函数是事先经过编译并存储在数据库中的一段sql语句集合,可以简化应用开发人员的很多工作,减少数据在数据库与应用服务器之间的传输,提高数据处理效率是有好处的.存储过程和函数的区别在 ...
- mysql 开发基础系列15 索引的设计和使用
一.概述 所有mysql 列类型都可以被索引,是提高select查询性能的最佳方法. 根据存储引擎可以定义每个表的最大索引数和最大索引长度,每种引擎对每个表至少支持16个索引,总索引长度至少为256字 ...
- mysql 开发基础系列22 SQL Model
一.概述 与其它数据库不同,mysql 可以运行不同的sql model 下, sql model 定义了mysql应用支持的sql语法,数据校验等,这样更容易在不同的环境中使用mysql. sql ...
- mysql 开发基础系列18 存储过程和函数(下)
1. 光标的使用(游标) 在存储过程和函数中可以使用光标对结果集进行循环的处理,光标使用包括光标的声明,open ,fetch,close. 下面在存储过程中使用一个光标, 这个举例中光标里的逻辑不重 ...
- mysql 开发基础系列13 选择合适的数据类型(下)
一. BloB和Text 1. 合成索引 合成索引可以提高大文本字段BLOB和Text的查询性能, 合成索引是在表中增加一个字段存放散列值,这种技术只能用于精确匹配的查询,可以使用md5()或sha ...
- mysql 开发基础系列10 存储引擎 InnoDB 介绍
一. 概述: InnoDB存储引擎提供了具有提交,回滚,和崩溃恢复能力的事务安全,对比MYISAM 的存储引擎,InnoDB写的处理效率差一些并且会占用更多的磁盘空间以保留数据和索引.它的特点有如下: ...
随机推荐
- Atom使用
cmd-r 通过方法名查找 ctrl-option-g 跳转至光标所在方法或结构 安装 last-cursor-position 后 alt-- 返回至光标上一次所在位置
- Springboot & Mybatis 构建restful 服务二
Springboot & Mybatis 构建restful 服务二 1 前置条件 成功执行完Springboot & Mybatis 构建restful 服务一 2 restful ...
- shell知识
shell基本的语句 一:if语句 格式: if [ #条件的判断 ];then #执行的动作 fi 操作符 + 加 - 减 * 乘 / 除[取整数商] % 余[取余数] 数值的比较 参数 说明 ...
- 第二周工作总结——NWNU李泓毅
注:因作业未全部提交完毕,故评分细则和千帆图等评分事项推后 1.助教博客链接:https://www.cnblogs.com/lmcmha/ 2.本周点评作业: https://www.cnblogs ...
- Notes : <Hands-on ML with Sklearn & TF> Chapter 6
.caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { border: 1px so ...
- [swarthmore cs75] Compiler 6 – Garbage Snake
课程回顾 Swarthmore学院16年开的编译系统课,总共10次大作业.本随笔记录了相关的课堂笔记以及第9次大作业. 赋值的副作用:循环元组 下面的代码展示了Python3是如何处理循环列表(pri ...
- Linux目录/usr结构说明
在 linux 文件结构中,有一个很神奇的目录 -- /usr. 讨论中,大部分观点认为: usr 是 unix system resources 的缩写: usr 是 user 的缩写: usr 是 ...
- C++ 虚函数的两个例子
1. 第一个例子是朋友告诉我Qt中的某个实现 1 #include <iostream> 2 3 // Qt中的某个实现 4 class A{ 5 public: 6 A() = defa ...
- hive 使用反射函数
在hive中通过反射,调用java.net.URLDecoder,解码url 代码入下: select reflect('java.net.URLDecoder', 'decode',url, 'UT ...
- 【阿里聚安全·安全周刊】苹果证实 iOS 源代码泄露|英国黑客赢下官司
本周的七个关键词:iOS 源代码泄露 丨 阿里软件供应链安全大赛 丨 个人数据安全 丨 Android P 丨 黑客赢下官司 丨 备忘录泄露美国安全局机密 丨 机器学习系统 -1 ...