mysql数据库乱码原因linux_乱码产生原因 - MySQL乱码问题深层分析_数据库技术_Linux公社-Linux系统门户网站...

news/2024/5/17 0:43:11/文章来源:https://blog.csdn.net/weixin_31623343/article/details/113456290

二、乱码产生原因

MySQL 字符编码是版本4.1引入的,支持多国语言,而且一些特性已经超过了其它大多数数据库管理系统。正因为这一特性才导致 MySQL 的乱码问题。

字符集是一套符号和编码。校对规则是在字符集内用于比较字符的一套规则。让我们使用一个假想字符集的例子来区别清楚。

假设我们有一个字母表使用了四个字母:‘A’、‘B’、‘a’、‘b’。我们为每个字母赋予一个数值:‘A’=0,‘B’= 1,‘a’= 2,‘b’= 3。字母‘A’是一个符号,数字0是‘A’的编码,这四个字母和它们的编码组合在一起是一个字符集。

假设我们希望比较两个字符串的值(在if……else语句中我们经常做值的比较):‘A’和‘B’。比较的最简单的方法是查找编码:‘A’为0,‘B’为1。因为0 小于1,我们可以说‘A’小于‘B’。我们做的仅仅是在我们的字符集上应用了一个校对规则。校对规则是一套规则(在这种情况下仅仅是一套规则):“对编码进行比较。”我们称这种全部可能的规则中的最简单的校对规则为一个binary(二元)校对规则。

但是,如果我们希望小写字母和大写字母是等价的,应该怎样?那么,我们将至少有两个规则:(1)把小写字母‘a’和‘b’视为与‘A’和‘B’等价;(2)然后比较编码。我们称这是一个大小写不敏感的校对规则。比二元校对规则复杂一些。

在实际生活中,大多数字符集有许多字符:不仅仅是‘A’和‘B’,而是整个字母表,有时候有许多种字母表,或者一个东方的(比如中文、日文、韩文、藏文、泰文等等)使用上千个字符的书写系统,还有许多特殊符号和标点符号。并且在实际生活中,大多数校对规则有许多个规则:不仅仅是大小写不敏感,还包括重音符不敏感(“重音符” 是附属于一个字母的符号,象德语的‘?’符号)和多字节映射(例如,作为规则‘?’=‘OE’就是两个德语校对规则的一种)。

(以上摘自MySQL 5.1 手册。更多内容可参见:http://dev.mysql.com/doc/refman/5.1/zh/charset.html)

MySQL 4.1.x开始支持以下这些事情

l 使用多种字符集(Character Set)来存储字符

l 使用多种校对规则(Collation)来比较字符串

l 在同一台服务器、同一个数据库或甚至在同一个表中使用不同字符集或校对规则来混合字符串

l 允许定义任何级别的字符集和校对规则

MySQL 4.1及以上版本的字符集支持(Character Set Support)有两个方面:字符集(Character Set)和校对规则(Collation)。 字符集和校对规则有4个级别的默认设置:服务器(server),数据库(database),数据表(table)和连接(connection)。

MySQL 中是根据下面几个变量确定服务器端和客户端用的什么字符集:

character_set_client     客户端字符集

character_set_connection   客户端与服务器端连接采用的字符集

character_set_results     SELECT查询返回数据的字符集

character_set_database    数据库采用的字符集

MySQL的字符集处理是这样的:

1、发送请求。

1)客户端发送请求到服务器端。

2)服务器端会把请求的数据从客户端字符集(character_set_client)转成服务器连接字符集(character_set_connection)。

3)然後服务器会检测存储区域(table,column)的字符集,然后把数据从连接字符集(character_set_connection)转为存储区域(table,column)的字符集,然後再存储或者查询。

2、返回请求。

1)服务器将存储区域(table,column)的字符集转换成服务器连接字符集(character_set_connection)。

2)将服务器连接字符集(character_set_connection)转换成结果字符集(character_set_results),再发送到客户端。

例如,我建立一个字符集为 gbk 的数据库(服务器端)。(MySQL 4.1 开始,在建立数据库时要指定它的字符集和校对规则,不指定就用默认的字符集和校对规则。)

连接数据库的程序(客户端)使用 gb2312 字符集(如 windows 命令行下使用 MySQL ,或者 PHP 连接MySQL ),那么在执行 insert 命令时,insert 的字符串将做一个 gb2312 到 gbk 的转换。而 select 时,数据库中保存的数据会先经过 gbk 到 gb2312 的转换之后再给你(结果集)。

好,那么为什么升级3.23(或4.0)到4.1时会乱码?举个例子说明。

例如3.23的数据库中保存的是gbk编码的数据。升级之前我将这些数据导出保存到文件里,这个文件的编码当然也是gbk的(因为3.23不支持多语言,不会对数据进行转换,也就是前面说的“原封不动地保存,原封不动地读出”)。

然后我在4.1中建立一个数据库,字符集为A;客户端字符集为B。将刚才的gbk数据导入。

1)A=gbk,B=gbk

导入数据时数据不会被转换;读出时需要set names gbk(set name命令下面将讲解)。

2)A=latin1,B=gbk

导入数据会进行gbk->latin1的转换,可能会丢失数据,产生乱码。

3)A=gbk,B=latin1

导入数据会进行latin1->gbk转换,可能会产生乱码。

4)A=latin1,B=latin1

导入数据时不会进行转换;读出时不需要set names gbk 。

大家可以看到,上面1)、4)才是正确的做法,即让A和B使用同样的字符集才不会乱码。0b1331709591d260c1c78e86d0c51c18.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_770244.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

让网站添加人性化的声音提示

有时候&#xff0c;网页和客户是互动的&#xff0c;需要某些声音来提示客户&#xff0c;在这里贴段代码&#xff1a;客户端声音提示function notifyClientForMessage(){ var s "<object classid\"clsid:22D6F312-B0F6-11D0-94AB-0080C74C7E95\" id\"…

如何用 Flexbox 构建一个新闻网站布局

本文讲的是如何用 Flexbox 构建一个新闻网站布局&#xff0c;你将要创建的东西 在你刚接触 Flexbox 的时候没有必要理解关于 Flexbox 的 所有 方面。在这篇教程中&#xff0c;我们将介绍 Flexbox 的一些新特性。同时设计一种新的、像 The Guardian 一样的布局方式。 我们使用 F…

浏览器字体大小设置_外贸建站的 常用CSS设置

今天我们来说说外贸建站的 常用CSS设置 。CSS设置这方面的内容比较侧重于代码技术类&#xff0c;有些同学会觉得去研究这方面的东西太费事费力&#xff0c;投入产出比不高。事实上&#xff0c;当你掌握了这方面的相关技术&#xff0c;你对网站的前端构建会有全新的认识。一般情…

VS2019 配色_设计师必看|这10个网站可以帮你更快做好配色

本文共1189字&#xff0c;阅读大约3分钟对于一个设计师来说&#xff0c;颜色太重要了&#xff0c;但是配色是比较难的一门学问&#xff0c;不是说看几篇文章就能学会的。对于大多数人来说&#xff0c;使用网上的工具进行配色是最简单高效的方式&#xff0c;这篇文章就来介绍10个…

html网站开发与php网站开发_网站开发的三个时代:网页制作、前端开发、后端开发...

网站开发共经历了三个时代分别是“网页制作”、“前端开发”、“后端开发”。下边谈一谈这三个时代分别是怎样的&#xff0c;和千锋广州小编一起来看看吧。网页制作网页制作是Web 1.0时代的产物&#xff0c;产生在2005年左右。那个时候的网页主要是静态页面。静态页面就是能使用…

asp还有人用吗_使用Asp.net Core3amp;Blazor 的全栈式网站开发体验

编者注&#xff1a;这是一篇写于2019年8月份的文章&#xff0c;文中有些内容需要根据最新状态进行调整。以下是重要步骤截图配注解&#xff1a;一、全栈的解决方案架构.Net Core3的全栈解决方案示意图。此图的第一部分Client 是可以灵活替换的&#xff0c;哪怕它是Vue,Angular …

网站访问量怎么刷_怎样提高网站的访问量?

如今互联网发达的时代&#xff0c;建立一个网站并不难&#xff0c;难的是怎么能够让网站提现价值&#xff0c;带来更加多用户和效益的转化&#xff0c;但是网站建设完成之后开始运行&#xff0c;却发现网站访问量非常少&#xff0c;那么如何提高网站访问量呢&#xff1f;一、明…

各大网站网页代码_无需任何软件,轻松下载网页上的视频

大家好&#xff0c;我是专注营销策划和PPT技巧的JS策划人&#xff5e;我们通常会碰到这样一个难题&#xff1a;需要下载网页上的视频的时候&#xff0c;不知道怎么下载&#xff0c;去各大视频网站上搜索&#xff0c;发现都先要安装客户端&#xff0c;并且下载下来的视频文件要么…

白山搜索引擎优化收费_SEO和SEM有什么区别?做网站优化如何选择?哪个更重要?...

首先&#xff0c;要说一下,SEM和SEO两者是包含关系&#xff0c;而不是付费广告和自然排名的的并列关系。很多人搞不清两者的概念&#xff0c;就会出现SEM就是付费广告&#xff0c;SEO是自然排名的不正确理解&#xff0c;并且这种说话还被越传越广。其实两者很容易区分,举个小例…

一个万能的工具包下载网站

https://pypi.python.org/simple/ http://www.lfd.uci.edu/~gohlke/pythonlibs/

基于androidx的快速开发框架_关于 TuziCMS是基于ThinkPHP框架开发的企业网站内容管理系统...

#关于 TuziCMS(兔子cms)是基于ThinkPHP框架开发的企业网站内容管理系统&#xff0c;国内PHPMYSQL 开源建站程序&#xff0c;它具有操作简单、功能强大、稳定性好、扩展性强&#xff0c;二次开发及后期维护方便&#xff0c;可以帮您快速构建起一个强大专业的企业网站。TC 软件具…

phpstudy快速搭建网站_「网站」快速搭建服务器环境及网站

网站域名与云服务器 - 网易云课堂​study.163.com在文章开头我想说明的是&#xff0c;此文章中所使用的工具为 BT 面板即宝塔面板&#xff0c;适合小白使用但是对于想要提升个人能力来说&#xff0c; BT 面板并不是一个好选择&#xff0c;而作为新手来说&#xff0c;可以使用该…

url模糊匹配优化_详情页怎么做SEO优化?

今天&#xff0c;赵彦刚与你一起围绕详情页怎么做SEO优化的问题展开讨论一下&#xff0c;也算是分享一下自己多年以来做文章、商品以及图片、电影等流量站的一些SEO的经验。很多人一直关注的是我们的网站首页关键词排名&#xff0c;按照本文的标题也就是网站首页如何做SEO优化&…

图片网站源码_网站首页被黑客篡改,查看备份文件中内容,根据时间点来排查...

网站首页被非法篡改&#xff0c;是的&#xff0c;就是你一打开网站就知道自己的网站出现了安全问题&#xff0c;网站程序存在严重的安全漏洞&#xff0c;攻击者通过上传脚本木马&#xff0c;从而对网站内容进行篡改。而这种篡改事件在某些场景下&#xff0c;会被无限放大。现象…

网站群2

引用&#xff1a;http://wzq.xa24h.com/portal.php?modview&aid2604 项目背景 上海计量测试技术研究院(SIMT)是由政府部门依法设置的法定计量检定机构&#xff0c;也是国务院计量行政管理部门批准建立的“华东国家计量测试中心”和国家科技部批准设立的国家级分析测试中心…

电脑没有安装iis,但是安装了.NET环境,如何调试网站发布的程序

大家在用.NET开发的网站发布后&#xff0c;如何在本地进行部署调试呢&#xff1f;前提是你本地没有安装IIS。 今天教大家一个小招&#xff0c;其实大家在安装完.NET开发环境后&#xff0c;会内置一个IIS&#xff0c;只需要用一个简单的命令就可以进行调试了 命令如下&#xff1…

网站漏洞修复方案防止SQL注入攻击漏洞

2019独角兽企业重金招聘Python工程师标准>>> SQL注入漏洞在网站漏洞里面属于高危漏洞&#xff0c;排列在前三&#xff0c;受影响范围较广&#xff0c;像asp、.net、PHP、java、等程序语言编写的代码&#xff0c;都存在着sql注入漏洞&#xff0c;那么如何检测网站存在…

【推荐收藏】10个获取免费网页背景纹理的最佳网站

在这篇文章中&#xff0c;我向大家推荐10个最好的背景图片和纹理资源免费下载网站。很多时候&#xff0c;我们看到的网站多是看上去平淡无奇&#xff0c;迫切需要增添一些色彩&#xff0c;彰显一点个性。装饰一个网站&#xff0c;最简单的方法是用一个新的主题&#xff0c;或者…

JMeter测试网站性能吞吐量

JMeter通过HTTP请求测试网站的方法见这个博文&#xff1a;http://leafwf.blog.51cto.com/872759/1618409 我的测试数据截图&#xff1a; 测试数据库的性能&#xff1a; 腾讯云机器测试数据&#xff1a;主机配置&#xff1a; CPU&#xff1a;1核 主频&#xff1a;2294.686M …

用宝塔面板网站php变成静态,宝塔面板设置网站伪静态教程(静态网址)

宝塔面板后台已经集成了网站伪静态程序。无需手动改代码即可一键设置网站伪静态。是分方便。此外&#xff0c;宝塔为市场上常见的程序提供了自己的伪静态规则&#xff0c;只需用鼠标点击即可。pc6a学习分享小白简单介绍&#xff0c;如何为宝塔面板设置伪静态规则。宝塔面板如何…