Database 为什么数据库中需要编码

Database 为什么数据库中需要编码,database,encoding,compression,Database,Encoding,Compression,我最近越过了术语编码。我学会了编码是用来标准化不同的字符。数据库还对数据进行编码以标准化表数据。我的问题是,如果我的列只包含十进制数,那么还需要编码吗,编码是否与数据的内存大小有关?您的第一个问题:如果列包含十进制数,仍然需要编码? 答:表中的列可以包含任何数据,无论是十进制数字还是其他形式的数据。 不管是哪种数据,无论是十进制、浮点、字符等形式,都需要编码来保证它的安全性。特别是当您处理敏感数据或正在寻找一种在存档中组织数据的方法时,您应该考虑对数据进行编码。 您的第二个问题:编码是否与数据的

我最近越过了术语
编码
。我学会了编码是用来标准化不同的字符。数据库还对数据进行编码以标准化表数据。我的问题是,如果我的列只包含十进制数,那么还需要编码吗,编码是否与数据的内存大小有关?

您的第一个问题:如果列包含十进制数,仍然需要编码?

答:表中的列可以包含任何数据,无论是十进制数字还是其他形式的数据。 不管是哪种数据,无论是十进制、浮点、字符等形式,都需要编码来保证它的安全性。特别是当您处理敏感数据或正在寻找一种在存档中组织数据的方法时,您应该考虑对数据进行编码。 您的第二个问题:编码是否与数据的内存大小有关?

答:因为编码消除了数据中的冗余,所以文件的大小会小得多。这会在保存数据时加快输入速度。 编码数据的大小较小,您应该能够在存储设备上节省空间。如果您有大量需要存档的数据,这非常理想。

对于术语编码,我们的意思是将语义值放在二进制表示中(二进制:对于大多数现代计算机环境;理论上编码不限于计算机位/字节)。 计算机的工作原理与我们不同,所以我们需要对一切进行编码,以便计算机能够解释数字。有时编码是隐式的,有时是CPU知识之外的

在一种严格的编码形式上(现在已经过时),当你决定一个整数的大小时(无论它是有符号的还是无符号的),你选择的是(部分)一种编码(有些部分仍然是隐式的:有符号字符的表示类型,数字的结尾等等)。只要您不读取数据库的二进制文件,这些都无关紧要,但大小会改变所使用的内存/磁盘量。(注意,我们倾向于称这种类型为数字,而不是编码)

但正如您所看到的,现在编码通常用于字符串(因为几十年来我们非常关心数字的编码)。根据这个定义(如果您看到“Unicode”或“UTF-8”或类似的东西,这意味着我们讨论的只是字符串编码),数字的编码并不重要,而只是类型

但是还有区域设置(例如国际化):您可能需要特定的编码,以便正确打印例如千位分隔符,但这可能指定为区域设置/排序规则,或数据库编码,或在客户端(负责显示数据的程序)中


因此:对于内存和磁盘(数据库引擎端),十进制和浮点的编码(作为字符串编码)无关紧要,只需选择正确的类型即可。对于blob和string,(string)编码很重要(但对于这种情况,您可能需要检查引擎上的可用编码:有时引擎将使用很少的编码,并在软件上转换为其他编码,因此磁盘/内存上没有任何更改)。注意:数字就是数字,所以这并不重要,但对于字符串,许多SQL函数依赖于编码和区域设置(在“服务器端”,比如
比如
关键字、排序等等)。

这在很多方面都是错误的,我甚至不知道从哪里开始。编码不是加密。编码不会使文件变小,加密也不会。对不起,这个答案有一些正确的地方,但也有许多不正确的地方。编码和国际化有一定的关系,但编码与千个分隔符无关。在编程中,我们确实谈论整数和浮点变量以及成员类型,但在序列化或存储这些类型时,我们肯定会对它们进行编码。@CodeCaster:在i18n中,locale还定义了编码。你知道,很多时候这样的字符在ASCII之外。就我所读到的问题而言,序列化超出了范围(而且主要作为客户机-服务器协议,而不是数据库中的设置)。我选择本地化,因为它通常更相关(例如排序),但所有编码问题都是一堆蠕虫。你可以试着回答,但我认为你甚至在涉及大多数主题之前都会按“添加答案”(用一般术语来说,也很难说“数据库”:这些东西与特定的引擎密切相关)。@CodeCaster你能解释一下这个主题吗?