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

我们正在安装订购一个configuration的oracle数据库,他们问我们想要什么字符编码。 应用程序(Java)只有英文,但用户来自世界各地。

有没有动机不使用UTF8或其他Unicode字符集?

你应该有两个select:

  1. select您的数据库字符集 (由VARCHAR2CHARCLOB数据types使用)。
  2. select你的国家字符集 (由NVARCHAR2NCHARNCLOB数据types使用)。

如这里所见 :

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

国家字符集只能是Unicode:UTF-8或UTF-16。 所以select相同的字符集将是多余的…

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

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

这里是我的模式定义的一般build议。 按表逐列(我在这里取VARCHAR2 / NVARCHAR2样本):

  • 如果你的列可以包含世界上的任何字符(如在用户input中 ),使其为NVARCHAR2
  • 如果你有对将要存储的内容的控制(那么英文),使其成为VARCHAR2

但要小心:

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

Oraclebuild议使用AL32UTF8作为数据库字符集。 AL32UTF8是Unicode标准的UTF-8编码的Oracle名称。

有没有动机不使用UTF8或其他Unicode字符集?

只是一个; 你有一个现有的数据集,你不能保证当前的字符集编码。

在这种情况下,你可能想要补救,仍然使用UTF8。

一点都不。

半开玩笑:是的,你不能和不知道UTF的老客户连接。