【问题标题】:Why encoding needed in Database为什么在数据库中需要编码
【发布时间】:2020-02-27 19:04:30
【问题描述】:

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

【问题讨论】:

    标签: database encoding compression


    【解决方案1】:

    使用术语编码,我们的意思是将语义值置于二进制表示中(二进制:适用于大多数现代计算机上下文;理论上编码不限于计算机位/字节)。 计算机的工作方式与我们不同,因此我们需要对所有内容进行编码,以便计算机能够解释这些数字。有时编码是隐式的,或者有时在 CPU 知识之外。

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

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

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

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

    【讨论】:

    • 抱歉,这个答案有一些正确的点,但也有很多不正确的点。编码和国际化有 some 关系,但编码与千位分隔符无关。在编程中我们确实谈到了整数和浮点变量和成员类型,但是在序列化或存储这些类型时,我们肯定会对其进行编码。
    • @CodeCaster:在 i18n 中,语言环境还定义了一种编码。你知道,很多时候这样的字符在 ASCII 之外。就我读到的问题而言,序列化超出了范围(而且主要作为客​​户端-服务器协议,而不是数据库中的设置)。我选择本地化,因为通常更相关(例如排序),但所有编码问题都是蠕虫罐头。您可以尝试做出答案,但我认为您甚至会在触及大多数主题之前按“添加答案”(而且笼统地说“数据库”也很困难:这些东西与特定引擎密切相关)。
    • @CodeCaster 你能解释一下这个话题吗?
    【解决方案2】:

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

    Answer : 表中的列可以并且包含任何数据,无论是十进制数字形式还是其他形式。 每个数据,无论是十进制、浮点数、字符等,都需要编码以确保其安全。尤其是当您处理敏感数据或正在寻找一种在存档中组织数据的方法时,您应该考虑对数据进行编码.

    你的第二个问题:编码和数据的内存大小有关系吗?

    答案:由于编码可以消除数据中的冗余,因此文件的大小会小很多。这会在保存数据时加快输入速度。 编码数据的大小较小,您应该能够节省存储设备上的空间。如果您有大量数据需要存档,这是理想的选择。

    【讨论】:

    • 这在很多方面都是错误的,我什至不知道从哪里开始。编码不是加密。编码不会使您的文件变小,加密也不会。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多