王公仆mysql字符集与乱码初探.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
王公仆mysql字符集与乱码初探

字符集编码与MySQL 乱码初探 王公仆@网易杭研院 提纲 字符集背景知识 字符集与字符集编码的概念 中文/拉丁文字符集标准进化史 软件开发中的字符集 操作系统(Wins/Linux/….) 编程语言(C/C++/JAVA/….) 数据库(Oracle/MySQL/…..) WIN/UNIX文本文件/网页文件 MySQL中的字符集 需要指定字符集的数据类型 字符集参数配置与命令 字符集BUG分析与解决 字符集背景知识 信息技术就是将模拟信号采集编码转成数字信号通过光缆在互联网上传输 思想?语言(3k~5k)?文字(汉字10w) 纸张?bit(晶体二极管高低电位) 信息要交流就需要处理各类字符集,也需要定义相关映射规则与比较规则等 字符与数值映射关系即字符集,用字节序列存储字符集规则即为字符集编码 世界是平的---软件都有本土化和国际化内在要求,统一字符集是趋势 常见字符集逻辑关系 除此外典型字符集还有:日本:JIS X6228;韩国KS X1004; ISO/IEC_2022:使用7位或8位编码表示各种语言文字的通用技术规范。特别以东亚中日韩越语言:汉语文字、日语文字或朝鲜文字的编码方法著称,。 常见字符集说明 ASCII 最基本且使用最广泛的7bits字符编码,更早还有BCD/EBCDIC码等骨灰级编码 只包含普通基本字符:常见英文字母,数字,下划线等 字符串函数多是针对ASCII字符的处理函数 中文字符 简体中文发展路径(GB2312-GBK-GB18030) 相应的字符数也越来越多(GB18030GBKGB2312) 相对比较常用的是GBK,老的网页也有GB2312 繁体中文最常见的是BIG5 西欧字符 最常用的是ISO8895-1(latin1),使用在HTML上的字符集,ISO8859-1定义了SQL文本使用Latin-1字符集,含拉丁字母中191字符,四大洲最常用,东亚作拼音; ISO定义了一系列编码标准,从1到15,适应西欧不同国家或民族的语言文字 UNICODE 大一统字符集 为了统一全世界各国语言文字和专业领域符号例如数学符号、乐谱符号的编码,ISO制定了ISO10646标准 另一个由厂商联合组织UNICODE是工业界事实的统一字符集标准UNICODE 1991年开始UNICODE协会,ISO, IEC一起工作联手制定统一的编码,以便兼容UNICODE和ISO/IEC-10646标准,即UCS(通用字符集)有100w个码点 有了字符集,另一个问题就是这些数值在计算机的字节序中怎么表示? 编码 4字节定长编码UCS-4或UTF-32,缺点很明显浪费空间 2字节定长编码UCS-2/UTF-16,也称UNICODE字符集 (65536个字符显然不够用) 1~4字节表示一个字符的UTF-8,且只有UTF-8字节序列是固定的,其他编码格式的字节序依赖平台相关的字节序,向上兼容ASCII,但对部分拉丁字符重新定义8位码 UTF-7(技术上归为UTF-7.5),对UTF-8做少许改动以维持ANSI字符编码 UTF-8 UNIX之父Ken Thompson提出的UTF-8编码特点 支持最长31bits的字符编码,UCS定义的所有231个字符都表示 编码为U+0000~U+007F的字符只占一个字节,就是0x00~0x7F,和ASCII码兼容 编码大于U+007F的字符用2~6个字节(后来约束不超过4字节)表示,每个字节的最高位都是1,而ASCII码的最高位都是0,因此非ASCII码字符的表示中不会出现ASCII码字节 自同步,不出5个字节就能重新建立同步,第一个字节的第一个高位1后的1个数是属于当前字符的后续字节数 UTF-8编码最长6个字节(后约束最长4字节),BMP字符UTF-8编码最长3字节 0xFE和0xFF这两个字节在UTF-8编码中不会出现(区分文本文件编码格式的flag) 尽管还需要专门的字符串函数,但现有的许多ASCII字符串函数对UTF8字符串也能正确操作,从而减少要重写的函数数量 变长多字节编码,字节数不等于字符数 UTF-8 第一个字节要么最高位是0(ASCII字节),要么最高两位都是1,最高位之后1的个数决定后面有多少个字节也属于当前字符 例如111110xx,最高位之后还有四个1,表示后面四个字节也属于当前字符的编码 后面每个字节的最高两位都是10,可以和第一个字节区分开这有利于误码同步 UTF-8规定承载的UCS编码以大端表示,也就是说第一个字节中的x是UCS编码的高位,后面字节中的x是UCS编码的低位,UTF-8规定每个字符只能用尽可能少的字节来编码 Unicode符号范围(十六进制) UTF-8编码方式(二进制) 0000 0000-0000 007F 0xxx

文档评论(0)

wannian118 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档