返回顶部
首页 > 资讯 > 数据库 >Mysql字符集设置乱码的原因有哪些
  • 756
分享到

Mysql字符集设置乱码的原因有哪些

2024-04-02 19:04:59 756人浏览 八月长安
摘要

这篇文章主要介绍了Mysql字符集设置乱码的原因有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。基本概念• 字符(Character)是

这篇文章主要介绍了Mysql字符集设置乱码的原因有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

基本概念

• 字符(Character)是指人类语言中最小的表义符号。例如’A'、’B'等;

• 给定一系列字符,对每个字符赋予一个数值,用数值来代表对应的字符,这一数值就是字符的编码(Encoding)。例如,我们给字符’A'赋予数值0,给字符’B'赋予数值1,则0就是字符’A'的编码;

[@more@]

• 给定一系列字符并赋予对应的编码后,所有这些字符和编码对组成的集合就是字符集(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。

常见问题解析

• 向默认字符集为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

– 插入时根据连接字符集设置,character_set_client、character_set_connection和character_set_results均为utf8;

– 插入数据将经过utf8=>utf8=>latin1的字符集转换,若原始数据中含有u0000~u00ff范围以外的Unicode字 符,会因为无法在latin1字符集中表示而被转换为“?”(0×3F)符号,以后查询时不管连接字符集设置如何都无法恢复其内容了。

检测字符集问题的一些手段

• SHOW CHARACTER SET;

• SHOW COLLATION;

• SHOW VARIABLES LIKE ‘character%’;

• SHOW VARIABLES LIKE ‘collation%’;

• SQL函数HEX、LENGTH、CHAR_LENGTH

• SQL函数CHARSET、COLLATION

使用MySQL字符集时的建议

• 建立数据库/表和进行数据库操作时尽量显式指出使用的字符集,而不是依赖于MySQL的默认设置,否则MySQL升级时可能带来很大困扰;

• 数据库和连接字符集都使用latin1时虽然大部分情况下都可以解决乱码问题,但缺点是无法以字符为单位来进行SQL操作,一般情况下将数据库和连接字符集都置为utf8是较好的选择;

• 使用mysql C api时,初始化数据库句柄后马上用mysql_options设定MYSQL_SET_CHARSET_NAME属性为utf8,这样就不用显式地用 SET NAMES语句指定连接字符集,且用mysql_ping重连断开的长连接时也会把连接字符集重置为utf8;

• 对于mysql PHP API,一般页面级的php程序总运行时间较短,在连接到数据库以后显式用SET NAMES语句设置一次连接字符集即可;但当使用长连接时,请注意保持连接通畅并在断开重连后用SET NAMES语句显式重置连接字符集。

其他注意事项

• my.cnf中的default_character_set设置只影响mysql命令连接服务器时的连接字符集,不会对使用libmysqlclient库的应用程序产生任何作用!

• 对字段进行的SQL函数操作通常都是以内部操作字符集进行的,不受连接字符集设置的影响。

• SQL语句中的裸字符串会受到连接字符集或introducer设置的影响,对于比较之类的操作可能产生完全不同的结果,需要小心!

感谢你能够认真阅读完这篇文章,希望小编分享的“Mysql字符集设置乱码的原因有哪些”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网数据库频道,更多相关知识等着你来学习!

您可能感兴趣的文档:

--结束END--

本文标题: Mysql字符集设置乱码的原因有哪些

本文链接: https://lsjlt.com/news/62428.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Mysql字符集设置乱码的原因有哪些
    这篇文章主要介绍了Mysql字符集设置乱码的原因有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。基本概念• 字符(Character)是...
    99+
    2024-04-02
  • mysql出现乱码的原因有哪些
    数据库字符集设置不正确:数据库字符集和连接字符集设置不一致会导致乱码。 数据库表字符集设置不正确:数据表字符集和字段字符集设...
    99+
    2024-04-09
    mysql
  • mysql字符转化出现乱码的原因
    这篇文章主要介绍“mysql字符转化出现乱码的原因”,在日常操作中,相信很多人在mysql字符转化出现乱码的原因问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”mysql字符转...
    99+
    2024-04-02
  • MySQL字符集有哪些
    MySQL字符集有哪些,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。 小谈MySQL字符集(转)...
    99+
    2024-04-02
  • php网页乱码的原因有哪些
    本篇内容主要讲解“php网页乱码的原因有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“php网页乱码的原因有哪些”吧!php网页乱码的原因:1、网页编码(charset)设置错误,导致浏览器...
    99+
    2023-06-25
  • sqlplus显示乱码的原因有哪些
    数据库字符集与客户端字符集不匹配:如果数据库使用的字符集与客户端工具使用的字符集不一致,会导致显示乱码。 数据库中存储的数据...
    99+
    2024-04-09
    sqlplus
  • 影响MySQL字符集选择的因素有哪些
    数据存储需求:根据具体数据类型和存储需求,选择适合的字符集,比如针对英文字符和数字较多的应用可选择较小的字符集,而对于需要支持多...
    99+
    2024-04-09
    mysql
  • MySQL字符集都有哪些
    今天就跟大家聊聊有关MySQL字符集都有哪些,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1. 字符集基础先了解下MySQL字符集都有哪些地方使用,...
    99+
    2024-04-02
  • 第09期:有关 MySQL 字符集的乱码问题
    相信大家通过前几篇文章,已经了解了 MySQL 字符集使用相关注意事项。那么数据乱码问题在这儿显得就非常简单了,或许说可能不会出现这样的问题。 数据之所以会乱码,在 MySQL 里无非有以下几类情况: 一、转码失败 在数据写入到表的过程中...
    99+
    2018-01-21
    第09期:有关 MySQL 字符集的乱码问题
  • mysql设置外键失效的原因有哪些
    MySQL设置外键失效的原因有以下几种:1. 数据类型不匹配:外键字段和参照字段的数据类型不一致,如外键字段是int类型,而参照字段...
    99+
    2023-10-12
    mysql
  • php出现gd2中文乱码的原因有哪些
    这篇文章主要介绍php出现gd2中文乱码的原因有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!php出现gd2中文乱码的原因:1、服务器的编码与gd2中的“imagettftext()”函数的默认编码不同,函数默...
    99+
    2023-06-14
  • php中传参数会乱码的原因有哪些
    这篇文章主要为大家展示了“php中传参数会乱码的原因有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“php中传参数会乱码的原因有哪些”这篇文章吧。php传参数会乱码是因为编码不一致,其解决办...
    99+
    2023-06-22
  • MySQL数据库字符集有哪些
    这期内容当中小编将会给大家带来有关MySQL数据库字符集有哪些,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。一、字符集、字符序的概念与联系在数据的存储上,MySQL提供了...
    99+
    2024-04-02
  • 设置mysql字符集的攻略
    下文主要给大家带来设置mysql字符集的攻略,希望这些内容能够带给大家实际用处,这也是我编辑设置mysql字符集的攻略这篇文章的主要目的。好了,废话不多说,大家直接看下文吧。配置文件路径: /full/pa...
    99+
    2024-04-02
  • MySQL字符集的设置方法
    这篇文章主要介绍了MySQL字符集的设置方法,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。一、内容概述在MySQL的使用过程中,了解字符集、字符...
    99+
    2024-04-02
  • HTML的字符集有哪些
    本文小编为大家详细介绍“HTML的字符集有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“HTML的字符集有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。HTML 字符集...
    99+
    2024-04-02
  • c语言输出中文乱码的原因有哪些
    在C语言中,输出中文乱码的原因可以有以下几个:1. 编码方式不匹配:C语言默认使用ASCII编码,而中文字符通常使用Unicode编...
    99+
    2023-08-31
    c语言
  • mysql乱码现象及对字符集的理解
    数据库版本是5.7.17 现象1 Navicat Premium导sqlserver数据到mysql时,发现一些表只导了表结构没有导入数据,一些表导入了部分数据,一些表数据全部导入成功 查找原因: 1....
    99+
    2024-04-02
  • mysql字符集校对规则有哪些
    这篇文章给大家介绍mysql字符集校对规则有哪些,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。目前mysql默认的校对规则除binary charset为binary外,都为ci,即大...
    99+
    2024-04-02
  • VBS中的字符集有哪些
    这篇文章主要讲解了“VBS中的字符集有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“VBS中的字符集有哪些”吧!代码字符代码字符代码字符代码字符0 32[空格]64@96`1...
    99+
    2023-06-08
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作