在 oracle 数据库中使用 UTF8 有什么缺点吗?

7 oracle charset utf-8 oracle-11g

我们正在安装订购配置的 oracle 数据库,他们问我们想要什么字符编码。该应用程序(Java)仅提供英文版本,但用户来自世界各地。

不使用 UTF8 或其他 unicode 字符集是否有任何动机?

Rob*_*ven 9

但要注意:

不要使用名为 UTF8 的字符集作为数据库字符集,除非需要与版本 8.1.7 及更早版本的 Oracle 数据库客户端和服务器兼容,或者除非您的应用程序供应商明确要求。尽管名称非常相似,但 UTF8 并不是 Unicode 编码 UTF-8 的正确实现。如果在需要 UTF-8 处理的地方使用 UTF8 字符集,可能会出现数据丢失和安全问题。对于 Web 相关数据(例如 XML 和 URL 地址)尤其如此。

Oracle 推荐 AL32UTF8作为数据库字符集。AL32UTF8 是 Oracle 对 Unicode 标准的 UTF-8 编码的名称。


Mac*_*Mac 6

您应该有两个选择:

  1. 选择您的数据库字符集(由VARCHAR2CHARCLOB数据类型使用)。
  2. 选择您的国家字符集(由NVARCHAR2NCHARNCLOB数据类型使用)。

这里所见

Oracle 建议对所有新系统部署使用 Unicode。

国家字符集只能是 Unicode :UTF-8 或 UTF-16。因此,为两者选择相同的字符集将是多余的......

我的建议(你说你的申请只有英文版):

  • 要求您的数据库字符集为 UTF-8。
  • 要求您的国家字符集为 UTF-16。

这是我对您的架构定义的一般建议。逐表,逐列(我在这里取VARCHAR2/NVARCHAR2样本):

  • 如果您的列可以包含世界上的任何字符(如在用户输入中),请将其设为NVARCHAR2.
  • 如果您可以控制将要存储的内容(然后是英语),请使用它VARCHAR2