【发布时间】:2020-02-27 19:04:30
【问题描述】:
我最近越过了encoding 这个词。我学会了编码用于标准化不同的字符。数据库还对数据进行编码以标准化表数据。我的问题是如果我的列只包含十进制数字,还需要编码吗? , 编码与数据的内存大小有关系吗?
【问题讨论】:
标签: database encoding compression
我最近越过了encoding 这个词。我学会了编码用于标准化不同的字符。数据库还对数据进行编码以标准化表数据。我的问题是如果我的列只包含十进制数字,还需要编码吗? , 编码与数据的内存大小有关系吗?
【问题讨论】:
标签: database encoding compression
使用术语编码,我们的意思是将语义值置于二进制表示中(二进制:适用于大多数现代计算机上下文;理论上编码不限于计算机位/字节)。 计算机的工作方式与我们不同,因此我们需要对所有内容进行编码,以便计算机能够解释这些数字。有时编码是隐式的,或者有时在 CPU 知识之外。
在编码的严格形式(现在已经过时)上,当您决定整数的大小(以及无论它是有符号还是无符号)时,您正在选择(部分)编码(一些部分仍然通常是隐含的:有符号字符的表示类型、数字的结尾等)。只要您不读取数据库的二进制文件,这些都无关紧要,但是大小会改变使用的内存/磁盘量。 (注意,我们倾向于将这种类型称为数字,而不是编码)
但正如您所见,现在 encoding 通常用于字符串(因为几十年来我们确实非常关心数字的编码)。有了这个定义(如果你看到“Unicode”或“UTF-8”或类似的东西,这意味着我们只讨论字符串编码),数字的编码并不重要,而只是类型。
但是有一些语言环境(例如国际化):您可能需要特定的编码,例如千位分隔符将被正确打印,但这可以指定为区域设置/排序规则,或数据库编码,或在客户端(负责显示数据的程序)中。
所以:对于内存和磁盘(数据库引擎端),十进制和浮点数的编码(作为字符串编码)无关紧要,只需选择正确的类型即可。对于 blob 和字符串,(字符串)编码很重要(但对于这种情况,您可能需要检查引擎上的可用编码是什么:有时引擎将使用少量编码,并在软件上转换为其他编码,因此无需更改在磁盘/内存上)。注意:数字就是数字,所以没关系,但是对于字符串来说,很多SQL函数依赖于编码和语言环境(比如“服务器端”,比如LIKE关键字,排序等等)。
【讨论】:
您的第一个问题:如果列包含十进制数字,还需要编码吗?
Answer : 表中的列可以并且包含任何数据,无论是十进制数字形式还是其他形式。 每个数据,无论是十进制、浮点数、字符等,都需要编码以确保其安全。尤其是当您处理敏感数据或正在寻找一种在存档中组织数据的方法时,您应该考虑对数据进行编码.
你的第二个问题:编码和数据的内存大小有关系吗?
答案:由于编码可以消除数据中的冗余,因此文件的大小会小很多。这会在保存数据时加快输入速度。 编码数据的大小较小,您应该能够节省存储设备上的空间。如果您有大量数据需要存档,这是理想的选择。
【讨论】: