继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

mysql 开发基础系列14 字符集

慕斯王
关注TA
已关注
手记 210
粉丝 110
获赞 512

字符集是一套文字符号及其编码,比较规则的集合。第一个字符集是ascll(american standard code for information interchange)。

https://img2.mukewang.com/5b3f3d1d0001a34e09890451.jpg

 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;

  https://img4.mukewang.com/5b3f3d290001d89e05620433.jpg

3. mysql字符集的设置

  有4个级别的默认设置:服务器级,数据库级,表级,字段级。

   3.1 在服务器级,对my.cnf设置,在启动mysql服务

  https://img4.mukewang.com/5b3f3d330001950f03990251.jpg

  3.2 数据库级

   如果数据库中已有记录,修改字符集对原有的记录并没有影响,只对新记录使用。

 -- 查看当前数据库字符集SHOW VARIABLES LIKE 'character%';

https://img.mukewang.com/5b3f3d3c0001ec4405890195.jpg

-- 修改数据库字符集 ALTER DATABASE 数据库名 CHARACTER SET utf8;

  3.3 表级

   可以通过alter table来修改,如果表中已有记录,修改字符集对原有的记录并没有影响,只对新记录使用。

--  查看SHOW CREATE TABLE t;

https://img3.mukewang.com/5b3f3d460001542707060067.jpg

--  修改表的字符集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.sql4.2导出数据
    mysqldump -uroot -p --quick --no-create-info --extended-insert
    --default-character-set=latin1 databasename> data.sql4.3  打开data.sql 将set names iatin1 修改成set names gbk4.4 使用新的字符集创建新的数据库        create database databasename default charset gbk;4.5创建表 ,执行createtab.sql
      mysql  -uroot  -p databasename < createtab.sql4.6导入数据,执行data.sql
      mysql  -uroot  -p databasename < data.sql

复制代码原文出处


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP