9.1 第九章 字符集

9.1 -9.3 字符集概述

这里着重介绍utf-8和gbk:

  1. utf-8:

UTF-8按一定规则将一个ISO-10646或Unicode字元码转换成1至4个字节的编码,

  • 其中将ASCII码(0~0x7F)转换成单字节编码,也就是严格兼容ASCII字符集;
  • UTF-8的2字节编码,用以转换ISO-10646标准0x0080~0x07FF的UCS-4原始码;
  • UTF-8的3字节编码,用以转换ISO-10646标准 0x0800~0xFFFF的UCS-4原始码;
  • UTF-8的4字节编码,用以转换ISO-10646标准0x00010000~0001FFFF的UCS-4原始码。
  1. gbk:

GBK:全称《汉字内码扩展规范》1.0 版,发布于1995 年。GBK 在GB2312 内码系统的基础上进行了扩充,收录了GB13000.1-1993 的全部20902 个CJK 统一汉字,包括GB2312 的全部6763 个汉字。此外,它增补编码了52 个汉字,13 个汉字结构符(在ISO/IEC 10646.1: 2000中称为表意文字描述符)和一些常用部首与汉字部件。在GBK 的内码系统中,GB2312 汉字所在码位保持不便,这样,保证了GBK 对GB2312 的完全兼容。同时,GBK 内码与GB13000.1代码一一对应,为GBK 向GB13000.1 的转换提供了解决办法。有意思的是GBK 并不是一个强制性的国家标准,只是一个行业指导规范,并没有强制力,但由于得到了MicrosoftWindows 95 的支持而大为流行。

3.各字符集比较

9.4 怎样选择合适的字符集

数据库来说,字符集更加重要,因为数据库存储的数据大部分都是各种文字,字符集对数据库的存储、处理性能,以及日后系统的移植、推广都会有影响。

MySQL 5.0 目前支持几十种字符集,UTF-8 是MySQL 5.0 支持的唯一Unicode 字符集,但 
版本是3.0,不支持4 字节的扩展部分。面对众多的字符集,我们该如何选择呢?

虽然没有一定之规,但在选择数据库字符集时,可以根据应用的需求,结合上面介绍的 
一些字符集的特点来权衡,主要考虑因素包括:

(1)满足应用支持语言的需求,如果应用要处理各种各样的文字,或者将发布到使用 不同语言的国家或地区,就应该选择Unicode 字符集。对MySQL 来说,目前就是UTF-8。

(2)如果应用中涉及已有数据的导入,就要充分考虑数据库字符集对已有数据的兼容 
性。假如已有数据是GBK 文字,如果选择GB2312-80 为数据库字符集,就很可能出现某些 文字无法正确导入的问题。

(3)如果数据库只需要支持一般中文,数据量很大,性能要求也很高,那就应该选择 双字节定长编码的中文字符集,比如GBK。因为,相对于UTF-8 而言,GBK 比较“小”,每 个汉字只占2 个字节,而UTF-8 汉字编码需要3 个字节,这样可以减少磁盘I/O、数据库cache,以及网络传输的时间,从而提高性能。相反,如果应用主要处理英文字符,仅有少量汉字数 据,那么选择UTF-8更好,因为GBK、UCS-2、UTF-16 的西文字符编码都是2 个字节,会造成 很大不必要的开销。

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

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

时间: 2024-10-20 21:10:22

9.1 第九章 字符集的相关文章

9.2 第九章 字符集

9.6 MySQL 字符集的设置 MySQL 的字符集和校对规则有4 个级别的默认设置:服务器级.数据库级.表级和字段级.它们分别在不同的地方设置,作用也不相同. 说明:什么是校对规则? 例如:GBK 的校对规则,其中gbk_chinese_ci 是默认的校对规则,大小写不敏感的,gbk_bin 按照编码的值进行比较,是大小写敏感的. 如何查看字符集和校对规则 服务器级:[查看字符集]show variables like 'character_set_server';    [查看校对规则]s

《深入浅出Mysql》——第九章 字符集 + 第十章 索引的设计和使用 + 第十一章 视图

MyISAM 和 InnoDB 存储引擎的表默认创建的都是 BTREE 索引.默认情况下,MEMORY 存储引擎使用 HASH 索引,但也支持 BTREE 索引. 原文地址:https://www.cnblogs.com/JasonPeng1/p/12234413.html

第九章: 输入与输出

@font-face{ font-family:"Times New Roman"; } @font-face{ font-family:"宋体"; } @font-face{ font-family:"Arial"; } @font-face{ font-family:"黑体"; } @font-face{ font-family:"微软雅黑"; } p.MsoNormal{ mso-style-name

javascript高级程序设计 第九章-- 客户端检测

javascript高级程序设计 第九章-- 客户端检测 客户端检测是javascript开发中最具争议的一个话题,由于浏览器间存在差别,通常需要根据不同浏览器的能力分别编写不同的代码.有下列常使用的客户端检测方法:能力检测:在编写代码之前先检测特定浏览器的能力.例如,脚本在调用某个函数之前,可能要先检测该函数是否存在.这种检测方法将开发人员从考虑具体的浏览器类型和版本中解放出来,让他们把注意力集中到相应的能力是否存在上.能力检测无法精确地检测特定的浏览器和版本.怪癖检测:怪癖实际上是浏览器中存

zabbix专题:第九章 自定义key(案例:监控内存,监控nginx状态)

第九章 自定义key 对Linux有兴趣的朋友加入QQ群:476794643 在线交流 本文防盗链:http://zhang789.blog.51cto.com 为什么要自定义KEY 有时候我们想让被监控端执行一个zabbix没有预定义的检测,zabbix的用户自定义参数功能提供了这个方法.我们可以在客户端配置文件zabbix_angentd.conf里面配置UserParameter. 语法如下: UserParameter=key,command 用户自定义参数包含一个key和一个命令,ke

读书笔记第九章

第九章HAL是建立在linux驱动之上的一套程序库.这套程序库并不属于linux内核,而是属于linux内核层之上的应用层.可以用来保护不想公开源代码的作者.HAL架构比较简单,其基本原理就是在安卓系统中使用程序库调用位于内核空间的linux驱动,然后安卓应用程序可以通过NDK程序访问HAL中的程序库,或直接在安卓应用程序中访问HAL中的程序库.编写一款支持HAL的linux驱动程序的步骤:1.编写linux驱动,linux驱动的代码要尽量简介,尽可能将业务逻辑放到HAL library中.2.

第九章 两种模式的比较

#include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <assert.h> #include <stdio.h> #include <unistd.h> #include <errno.h> #include <string.h> #include

第九章 用多线程来读取epoll模型下的客户端数据

#include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <assert.h> #include <stdio.h> #include <unistd.h> #include <errno.h> #include <string.h> #include

第九章 TCP和UDP同时用复用一个端口实现一个回射服务器

#include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <assert.h> #include <stdio.h> #include <unistd.h> #include <errno.h> #include <string.h> #include