用途:用来映射简单的单字节字符,比如大小写英文字母、阿拉伯数字、常用的标点符、运算符、控制字符等。
编码范围:U+0000 - U+007F
注意:对于用这类字符的场景够用了,但是却无法表达比如汉字,日文等编码。
2. UNICODE
用途:用来映射包含 ASCII 以内的其他的所有字符。
编码范围:U+0000 - U+10FFFF
注意:ASCII 是 UNICODE 的子集,ASCII 编码的字符可以无损转换为 UNICODE 编码的字符。
MySQL 常用字符集
1. Latin1
Latin1 是 cp1252 或者 ISO-8859-1 的别名。ISO-8859-1 编码是单字节编码,向下兼容 ASCII。
编码范围:U+0000 - U+00FF
ISO-8859-1 收录的字符除 ASCII 收录的字符外,还包括西欧语言、希腊语、泰语、阿拉伯语、希伯来语对应的文字符号。
单字节内的空间都被 ISO-8859-1 编码占用,所以能够用 ISO-8859-1 编码存储、传输其他任何编码的字节流。
比如把一个 Utf8mb4 的编码或者 GBK 的编码存入 Latin1,不会有任何问题。因为 Latin1 保留了原始的字节流,这也就是 MySQL 长期以来把 Latin1 做默认字符集的原因。
但是由于 Latin1 对任何字符都存放字节流,造成了字符个数的浪费。
比如:
CHAR(10) CHARACTER SET LATIN1CHAR(10) CHARACTER SET UTF8
该字段中存储字符个数 UTF8 是 Latin1 的三倍!!!
2. GB18030
GB18030 是中国官方标准字符集,向前兼容 GBK、GB2312,是这两个的超集。用 1、2、4 个字节分别表示一个符号。比如对一般中文字符,默认是用两个字节编码存储。Windows 系统,默认用的就是 GB18030。
若只是存储中文字符,那 GB18030 最佳。
原因有两点:
1)占用空间小,比如比 UTF8 小。
2)存储的汉字根据拼音来排序,检索快。
3. UTF8
UTF8 是 Unicode 的编码实现,可以存储 UNICODE 编码对应的任何字符, 这也是使用最多的一种编码。最大的特点就是变长的编码方式,用 1 到 4 个字节表示一个符号,可以根据不同的符号编码字节长度。
字母或数字用 1 字节,汉字用 3 字节,emoji 表情符号用 4 字节。UTF8 字符集目前是使用最广泛的。
注意!MySQL 里常说的 UTF8 是 UTF8MB3 的别名,UTF8MB3 是 UTF8MB4 的子集,UTF8MB4 才是真正的 4 字节 UTF8 字符集!
UTF8MB3 表示最大支持 3 个字节存储字符,UTF8MB4 表示最大 4 个字节存储字符。根据实际需要和未来展望,MySQL 8.0 已经默认用 UTF8MB4 基础字符集。
回顾2019年中国云计算产业的发展,趁着“产业互联网”火热的东风,云计算也一路高歌前行。阿里巴巴、腾讯、百度、华为等 科技 互联网巨头企业都在持续布局。
Salesforce与阿里巴巴达成战略合作,阿里巴巴推出政务钉钉,百度云升级为百度智能云,百度推出爱番番CRM开放平台,销售易获腾讯独家1.2亿美元E轮融资,腾讯云全面升级d性计算产品序列,计算性能提升30%;金山办公正式登陆科创板上市、华为新成立“华为云计算技术有限公司” ……这些“新鲜“的云计算故事,也都曾轰动一时,甚至时至今日,仍对云计算领域影响至深。
2020年刚起步,中国云计算“第一股”——UCloud成功登陆科创板,成为众多业内人士在武汉的新型冠状病毒肺炎爆发前,最关注的"热点”之一。
展望2020年,亿欧智库坚定看好云计算领域的发展机会,并将持续输出云计算产业细分领域,如PaaS、SaaS、云安全等领域的研究报告。
值得注意的是,亿欧智库此前发布的《2019年中国云计算行业发展研究报告》所总结的六条云计算产业发展趋势依旧具备长期预判价值。以下列出概括性的内容,具体详见报告正文:
基于此,亿欧智库进一步总结云计算产业的未来发展趋势,帮助业内人士更加及时把握云计算产业最新发展机遇。本篇将重点介绍五条云计算产业有希望快速落地或爆发的主流技术:
无服务器计算(Severless Computing,以下简称Serverless)是一种包含第三方BaaS(后端即服务)服务的应用程序设计方式,与包括FaaS(函数即服务)平台上的托管临时容器中运行的自定义代码。与很多技术趋势一样,Serverless至今还没有明确且清晰的定义,对于开发人员来说,其重点代表两个截然不同但有重合的概念:
Serverless相比IaaS和SaaS,可以更好更快的在云服务商平台上部署应用,完全不用提前测算资源需求,所有功能根据事件驱动,按需加载,执行完毕,资源释放,真正实现了用多少付费多少,降低成本的同时,还提高了开发人员的生产力。
Serverless主要适合于新兴的、事件驱动性的,类似于IoT等传感设备、金融交易类型等场景。
Serverless兴起于2017年,在最近两年伴随云原生概念的推广逐渐火热。
目前 Serverless 在国内的发展和采用依然处于初期阶段,业务实践偏少,仍在不断 探索 之中。相比之下,国外整体要领先 1-2 年,国外几大云厂商前期对整个研发生态的教育和布局较多,应用较早。
现在国外也已经出现不少 Serverless 框架,比较知名包括 Serverless.com 和 Zeit.com。
根据RightScale的2018年云状态报告,无服务器是当今增长速度很快的云服务模型,年增塑达75%,并有望于2020年超越该增速。亿欧智库也对Serverless的增长速度和市场规模持乐观态度。
Kubernetes(以下简称K8s) 是一个针对容器应用,进行自动部署,d性伸缩,和管理的开源系统。主要负责在大规模服务器环境中管理容器组(pod)的扩展、复制、 健康 ,并解决 pod 的启动、负载均衡等问题。
K8s 能在实体机或虚拟机集群上调度和运行程序容器。K8s 也能让开发者斩断联系着实体机或虚拟机的“锁链”,从以主机为中心的架构跃至以容器为中心的架构。该架构最终提供给开发者诸多内在的优势,例如可移动、可扩展、自修复等。
K8s 也能兼容各种云服务提供商,例如 Google Cloud、Amazon、Microsoft Azure,还可以工作在 CloudStack、OpenStack、OVirt、Photon、VSphere。
K8s 源于 Google 内部的 Borg 项目,经 Google 使用 Go 语言重写后,被命名为Kubernetes,并于 2014 年 6 月开源。目前已有多家大公司,例如 Microsoft、 RedHat、 IBM、Docker,都支持K8s。
从近年来国外K8s发展来看, 巨头公司为自有K8s部门增添活力或构建全新产品的有效手段之一为收购 。
随着专注于容器初创公司逐渐增加,预计2020年各大云服务商将继续收购表现优秀的容器初创公司,以进军K8s市场,完善其产品体系。
不可否认,K8s作为一项新兴技术距全球普及它还有很长的路要走。但很明显,K8s已经是,并且将继续是软件世界中的主导力量。
服务网格(Service Mesh)是用于控制和监视微服务应用程序中的内部服务到服务流量的软件基础结构层。服务网格的独特之处在于它是为适应分布式微服务环境而构建的。
服务网格的兴起主要是为了解决Docker和Kubernetes无法解决的运行问题。因为诸如Docker和Kubernetes这样的工具主要解决的是部署的问题。但部署不是生产的最后一步,部署完之后,应用程序还必须运行,服务网格因解决运行问题应运而生。
2016年服务网格提出之后,以Linkerd和Envoy为代表的框架开始崭露头角。目前市面上没有现成的商业产品,大多数服务网格都是开源项目,需要一些技巧才能实现。最著名的有:
关于服务网格技术的并购目前也逐渐升温,著名的并购案有VMware在2019年7月以4.2亿美元收购了Avi Networks以及F5 Networks在2019年5月斥资2.5亿美元收购了NGINX。
2019年是被确定是适合解决服务网格问题的一年,2020年将会是核心服务网格用例出现的一年。
开源软件(Open Source Software,以下简称OSS)被定义为描述其源码可以被公众使用的软件,并且此软件的使用,修改和分发也不受许可证的限制。
1998年2月,“开源”一词首先被运用于软件。最初的开源软件项目并不是真正的企业,而是一些顶级程序员针对Microsoft、Oracle、SAP等老牌闭源公司对软件收费较高的一场革命。顶级开发人员通常以异步方式协同编写一些出色的软件。每个人不仅可以查看公开的软件,而且通过一种松散的治理模型,他们可以添加,改进和增强它。这是第一代的开源软件项目。
而经过10多年的发展,Linux、MySQL的成功为第二代开源软件公司奠定基础,比如Cloudera和Hortonworks。但第二代开源软件公司中,没有一家公司对软件拥有绝对的控制权,对手经常通过免费提供软件来进行竞争。
之后出现了像Elastic、Mongo和Confluent等第三代开源软件公司提供的Elastic Cloud,Confluent Cloud和MongoDB Atlas这样的服务,这种进化代表着开源软件公司这种模式有机会成为软件基础设施的主要商业模式。
经过22年的发展,如今OSS已经无处不在。OSS领域也发声了一些“大事件”:IBM以320亿美元的价格收购了Redhat(是2014年市值的3倍);Mulesoft在上市后以65亿美金的价格被Salesforce收购;MongoDB现在市值超过40亿美元;Elastic则为60亿美元;并且,通过Cloudera和Hortonworks的合并,将出现一个市值超过40亿美元的新公司……
当然还有很多OSS的公司在路上,例如Confluent、HashiCorp、DataBricks、Kong、Cockroach Labs等。
展望2020年,OSS的理念将与云计算SaaS(软件即服务)的理念更加契合,将大大推动软件产业的创新,并有机会迎来新一轮的发展高潮。
高性能计算(High Performance Computing,以下简称HPC)指能够执行一般个人电脑无法处理的大资料量与高速运算的电脑,其基本组成组件与个人电脑的概念无太大差异,但规格与性能则强大许多。
HPC能够在非常短的时间内执行大量计算,正从过去主要传统科研领域计算密集型为主,逐渐向新兴的大数据、人工智能以及深度学习等方向进行融合和演进。
从应用领域来看,HPC是不同行业中非常专业的领域,可以用于预报天气,也可以是分析风险,还可以分析农场数据,以根据不断变化的天气条件找到最佳的农作物种植地点。
在中国市场当中,主要有联想、浪潮和曙光三家公司处于领先的地位,占据了超过90%的市场份额。这三家公司作为中国HPC市场的状元、榜眼和探花,共同将中国HPC推上了世界第一的位置。
其中,联想连续五年蝉联“HPC China TOP100榜单”第一名,并于2019年11月8日发布“深腾X9000”高性能融合计算平台,该平台在兼顾算的更快、更准、更全面的同时,也使联想成为HPC绿色数据中心的积极倡导者,继续领跑HPC水冷解决方案。
除此之外,联想还在全球160多个国家开展众多领域的突破性研究,这些领域包括癌症、大脑研究、天体物理学、人工智能、气候科学、化学、生物学、 汽车 和航空等。
公开调研资料显示,2018年企业中使用了HPC的比例是36%。随着云计算领域的基础设施完备、资源和数据的增加,HPC的需求也将在2020年有所增加,云服务商有望对HPC进行投资。
众所周知,技术的进步对产业发展和创新具有积极推动作用。
正如近年来区块链、5G、机器学习等技术的发展对传统产业的转型促进一样,Serverless、Service Mesh、K8s、OSS、HPC这些云技术也必将提升IaaS、PaaS、SaaS等传统云计算模式的d性、灵活性、计算能力等,并与传统模式融合互补,协同助推各产业转型升级。
推荐阅读:
千淘万漉,吹尽黄沙,中国智能制造哨声洪亮 | 预见2020
2020银行业展望:对外开放加快,理财转型提速, 科技 深度赋能……
2020物流业新态势:巨头效应显著、 科技 赋能、智慧物流建设加快……
拨云见日,始得真金,产业互联网迎来高光时刻丨预见2020
预见2020:日新月异的中国保险业
数据库中关于字符集的种类有很多,个人建议,数据库字符集尽量使用utf8(utf-8),以使你的数据能很顺利的实现迁移,因为utf8字符集是目前最适合于实现多种不同字符集之间的转换的字符集,尽管你在命令行工具上无法正确查看数据库中的内容,我依然强烈建议使用utf8作为默认字符集.如果你想使用gb2312编码,那么建议你使用latin1作为数据表的默认字符集,这样就能直接用中文在命令行工具中插入数据,并且可以直接显示出来.而不要使用gb2312或者gbk等字符集,如果担心查询排序等问题,可以使用binary属性约束 对编程有影响的主要是客户端字符集和数据库字符集(还有一个服务器字符集,不知道干什么用的), 数据库中常用的 *** 作就是保存数据和读取数据,在这过程中,乱不乱码和数据库字符集貌似没有什么关系。我们只要保证写入时选择的字符集和读取时选择的字符集一致,即只需保证两次 *** 作的客户端字符集一致即可。 在MySQL的客户端上执行一次查询的过程一般是,在客户端的提示符后面输入一条SQL语句,回车,然后终端显示出查询的结果。这个过程中,只有终端和三个MySQL的系统变量指定了正确的字符集,才能保证我们将一个正确的SQL语句送到服务器,然后服务器返回正确的结果,并且在终端正确显示。 三个MySQL的系统变量是: 1. character_set_client,终端字符集,告诉Server客户端提交的SQL语句的编码格式 2. character_set_connection,连接字符集,是服务器翻译SQL语句时用到的编码格式 3. character_set_results,返回的结果集的字符集,是服务器返回结果集之前把结果集转换成的编码格式 在MySQL终端通过执行命令 show variables like ‘char%’ 可以查看这几个变量的值。这三个变量通常都设定为同一种字符集,用命令set names [charset name]就可以修改这三个变量的值。一般来说,只要你设定了能够表示你的数据的字符集,你查询的结果都可以在终端正确显示。 举个例子,使用的表t1是utf8编码,表中的字段c1继承了这个编码,表创建如下 mysql>create table t1 ( c1 text not null ) character set utf8用的字符是汉字“范”,gbk编码为B7 B6,utf8编码为E8 8C 83 用下面的SQL语句插入数据 mysql>insert into t1 values( ‘范’)a)如果终端设置为utf8,并且执行了 set names utf8,那么插入到数据库中的就是“范”这个字的utf8编码,这个过程中MySQL不需要做编码转换。写入数据库的内容可以通过执行 select hex( c1 ) from t1 得到数据的十六进制编码来验证。 b)如果终端设置为 utf8,并且执行了set names gbk,那么执行完这个插入 *** 作后,写入的二进制数据是E9 91 BC,这是“汉字“锣”的utf8编码。这是因为,终端输入的“范”用的是utf8编码,而服务器以为终端发送过来的内容是gbk编码,所以在向t1表中插入的时候进行了一次gbk到utf8的转换,结果当然是错误的。 c)如果终端设置为gbk,并且执行了set names gbk,那么执行完插入 *** 作后,写入t1的依然是“范”这个字的utf8编码。插入过程中,终端输入的是“范”的gbk编码B7 B6,服务器被告知终端发过来的SQL语句是gbk编码(由character_set_client指定),所以在插入数据前做了一次gbk到utf8的编码转换。 d)如果终端设置为gbk,并且执行了set names utf8,那么执行完插入 *** 作后,MySQL会报出一个数据被截断的警告。实际上,输入终端的是“范”这个字符的gbk编码B7 B6,而服务器被告知客户端发过来的SQL语句是utf8编码,所以在执行过程中没有做转码,直到插入数据的时候,发现B7 B6不符合utf8的编码规则,给出了警告信息,实际插入的数据是3F 3F,也就是两个问号。 查询的时候是同样的道理,MySQL也是根据set names设定的字符集来对返回给客户端的结果集做相应的编码转换,如果转换的结果和终端显示的字符集一致,就能正确显示,如果不一致就是乱码。 结论是,只要终端的字符集和set names指定的字符集一致就可以让MySQL在处理过程中执行正确的转码并且正确地显示。 另外,如果通过程序 *** 作MySQL数据库, 那么也需要事先执行set names命令来指定程序希望输出的字符集。比如,用程序从一个utf8编码的数据库向另外一个gbk编码的数据库进行数据迁移,在选取源数据库数据之前,需要执行set names gbk,才能取到gbk编码的数据。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)