是否将Oracle数据库字符集从US7ASCII更改为AL32UTF8" double"数据库大小?

时间:2015-07-13 22:23:21

标签: oracle utf-8 character-encoding ascii

我们在向Oracle数据库中插入阿拉伯语和希伯来语文本时遇到了一些问题。 Oracle 11g数据库的字符集是US7ASCII。将数据库的字符集更改为AL32UTF8会立即将数据库的大小加倍吗?

1 个答案:

答案 0 :(得分:1)

这完全取决于你所要求的......

为了编码阿拉伯语或希伯来语字符,UTF-8编码使用两个字节。因此,例如,VARCHAR2(10 BYTE)足以存储5个希伯来字符,VARCHAR2(10 CHAR)需要20个字节的存储空间才能存储10个阿拉伯字符。当然,如果你的一些数据也使用拉丁字母,每个字符只需要一个字节的存储空间,或者某些字符来自其他Unicode平面(某些数学符号,例如,表情符号等),需要三个或四个字节的存储空间,那么“我需要VARCHAR(10 CHAR)需要多少字节”或“我可以在VARCHAR(10 BYTE)中存储多少个字符”的问题会变得有点复杂。 / p>

这是否“使数据库的大小加倍”取决于您的观点。首先,显然,字符集对非字符数据类型没有影响。无论数据库字符集如何,存储在NUMBERDATE列中的数据都需要完全相同的空间量。然而,忽略这一点,比较像“加倍”需要你将某些东西与基线进行比较,这有点棘手。没有基线可以在US7ASCII数据库中使用每个字符的单个字节存储(正确)存储阿拉伯语和希伯来语,因此不准确地说将数据存储在AL32UTF8数据库中会使字符串列的存储要求翻倍。您可以谈论使用单字节希伯来字符集(如ISO 8859-8)的基线,但是您无法存储阿拉伯数据(反之亦然,如果您使用的是单字节阿拉伯字符集,如ISO 8859-6)。你可能会谈到一个基线,你有一个不正确的NLS配置,其中数据库字符集是US7ASCII但是应用程序绕过字符集转换并从多个不同的单字节字符集插入数据但是你要比较存储要求是否正确,支持针对不正确,不受支持和高度定制的配置的存储要求进行配置。

相关问题