gpt4 book ai didi

postgresql - 在 UTF-8 PostgreSQL 数据库中指定 ASCII 列

转载 作者:行者123 更新时间:2023-11-29 13:06:07 28 4
gpt4 key购买 nike

我有一个采用 UTF8 编码和 LC_* en_US.UTF8 的 PostgreSQL 数据库。数据库以多种不同的语言存储文本列。

然而,在某些专栏中,我 100% 确定永远不会有任何特殊字符,即 ISO 国家和货币代码。

我试过做类似的事情:

"countryCode" char(3) CHARACTER SET "C" NOT NULL

 "countryCode" char(3) CHARACTER SET "SQL_ASCII" NOT NULL

但这会返回错误

ERROR: type "pg_catalog.bpchar_C" does not exist
ERROR: type "pg_catalog.bpchar_SQL_ASCII" does not exist

我做错了什么?

更重要的是,我应该为此烦恼吗?我来自 MySQL 背景,这样做是为了提高性能和空间,PostgreSQL 也是这种情况吗?

TIA

最佳答案

老实说,我不明白这些设置的目的,如:

  • 正如@JoachimSauer 所提到的,UTF-8 编码中的 ASCII 子集将占用完全相同的字节数,因为这是发明 UTF-8 的要点:保持 ASCII 不变。因此,我看不到尺寸优势;
  • 所有能够处理不同编码字符串的软件都将使用一种通用的内部编码,即如今 PostgreSQL 的默认 UTF-8。当一些文本数据进入处理阶段时,如果编码不匹配,数据库会将其转换为内部编码。因此,如果您将某些列指定为非 UTF8,这将导致对数据进行额外处理,从而减少一些周期(不过不要认为这会对性能造成显着影响)。

鉴于没有空间优势并且有潜在的性能影响,我认为最好保持原样,即将所有列保留为数据库的默认编码。

我认为对于相同的参数,PostgreSQL 不允许为数据库中的单个对象指定编码。 Character Set and Locale are set on the per-database level .

关于postgresql - 在 UTF-8 PostgreSQL 数据库中指定 ASCII 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11244010/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com