Mysql字符集设置.docxVIP

  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字符集设置最近,在项目组使用的mysql数据库中,插入数据出现乱码,关于这个问题做了下总结,我们从最基本的地方说起,到错误产生的深层次原因和解决办法。基本概念? 字符(Character)是指人类语言中最小的表义符号。例如’A、’B等;? 给定一系列字符,对每个字符赋予一个数值,用数值来代表对应的字符,这一数值就是字符的编码(Encoding)。例如,我们给字符’A赋予数值0,给字符’B赋予数值1,则0就是字符’A的编码;? 给定一系列字符并赋予对应的编码后,所有这些字符和编码对组成的集合就是字符集(Character Set)。例如,给定字符列表为{’A,’B}时,{’A=0, ‘B’=1}就是一个字符集;? 字符序(Collation)是指在同一字符集内字符之间的比较规则;? 确定字符序后,才能在一个字符集上定义什么是等价的字符,以及字符之间的大小关系;? 每个字符序唯一对应一种字符集,但一个字符集可以对应多种字符序,其中有一个是默认字符序(Default Collation);? MySQL中的字符序名称遵从命名惯例:以字符序对应的字符集名称开头;以_ci(表示大小写不敏感)、_cs(表示大小写敏感)或_bin(表示按编码值比较)结尾。例如:在字符序“utf8_general_ci”下,字符“a”和“A”是等价的;MySQL字符集设置? 系统变量:– character_set_server:默认的内部操作字符集– character_set_client:客户端来源数据使用的字符集– character_set_connection:连接层字符集– character_set_results:查询结果字符集– character_set_database:当前选中数据库的默认字符集– character_set_system:系统元数据(字段名等)字符集– 还有以collation_开头的同上面对应的变量,用来描述字符序。? 用introducer指定文本字符串的字符集:– 格式为:[_charset] ’string’ [COLLATE collation]– 例如: SELECT _latin1 ’string’; SELECT _utf8 ‘你好’ COLLATE utf8_general_ci;– 由introducer修饰的文本字符串在请求过程中不经过多余的转码,直接转换为内部字符集处理。MySQL中的字符集转换过程1. MySQL Server收到请求时将请求数据从character_set_client转换为character_set_connection;2. 进行内部操作前将请求数据从character_set_connection转换为内部操作字符集,其确定方法如下: - 使用每个数据字段的CHARACTER SET设定值; - 若上述值不存在,则使用对应数据表的DEFAULT CHARACTER SET设定值(MySQL扩展,非SQL标准); - 若上述值不存在,则使用对应数据库的DEFAULT CHARACTER SET设定值; - 若上述值不存在,则使用character_set_server设定值。3. 将操作结果从内部操作字符集转换为character_set_results。??我们现在回过头来分析下我们产生的乱码问题: a 我们的字段没有设置字符集,因此使用表的数据集 b 我们的表没有指定字符集,默认使用数据库存的字符集 c 我们的数据库在创建的时候没有指定字符集,因此使用character_set_server设定值 d 我们没有特意去修改character_set_server的指定字符集,因此使用mysql默认 e mysql默认的字符集是latin1,因此,我们使用了latin1字符集,而我们character_set_connection的字符集是UTF-8,插入中文乱码也再所难免了。常见问题解析? FAQ-1 向默认字符集为utf8的数据表插入utf8编码的数据前没有设置连接字符集,查询时设置连接字符集为utf8 – 插入时根据MySQL服务器的默认设置,character_set_client、character_set_connection和character_set_results均为latin1; – 插入操作的数据将经过latin1=latin1=utf8的字符集转换过程,这一过程中每个插入的汉字都会从原始的3个字节变成6个字节保存; – 查询时的结果将经过utf8=utf8的字符集转换过程,将保存的6个字节原封不动返回,产生乱码。参考下图:?? 向默认字符集为latin1的数据表插入utf8编码的数据前设置了连接字符集为utf8(我们遇到的错误就是属于

文档评论(0)

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

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

1亿VIP精品文档

相关文档