我将在 Postrgres 数据库中存储一个长字符串(45132 个字符),同时保留每个字符(包括非常罕见的字符)。
Postgres 可以存储高达 1GB 的字符串(请参阅这里)。
就 45132 个字符串的最大大小而言,最坏的情况是什么?
根据我的(可能笨拙的)计算,Unicode 每个字符最多可占用 4 个字节,因此 1GB 的字符串长度为 250,000,000 个字符(因此我无需担心),但我的逻辑/数学是否正确,并且是否存在比 Unicode 消耗更多内存的编码,我可能需要适应这些编码?
注意:我假设 ASCII 每个字符 1 个字节,而 Unicode 每个字符最多 4 个字节。
答案1
链接文章中的信息似乎不正确。
根据 Postgres 文章 PostgreSQL 字符类型:CHAR、VARCHAR 和 TEXT:
这文本数据类型可以存储字符串无限长度。
如果没有指定 n 个整数,则字符数据类型,它的行为类似于文本数据类型。性能字符 (无 n)和文本是相同的。
指定长度说明符的唯一优点是 字符数据类型是,如果你尝试将更长的字符串插入到varchar(n)柱子。
编码字符串的大小取决于使用初始化 PostgreSQL 数据库群集时选择的默认字符集initdb
。
我在本章中发现的唯一 Unicode 数据类型 字符集支持 曾是 UTF8,指定为包含 1 至 4 个字节:
如果大多数字符都是 Latin1(8 位),那么以 UTF8 编码的 45132 长字符串将占用远远小于 1 GB 或文章中提到的无限大小,更接近 45132 字节。