Oracle数据类型:我应该使用VARCHAR2还是CHAR

Eli*_*m99 10 oracle plsql

我应该在Oracle中使用VARCHAR2或CHAR作为数据类型吗?

有人建议我使用CHAR来处理我需要的这些新表,但我很担心,因为这些新表将用于普及使用VARCHAR2数据类型的现有表.我担心在VARCHAR2字段中放置额外的空格以及比较问题.我知道有一些方法可以通过修剪或转换来比较它们,但我担心它会使我的代码变得杂乱无章.

你有什么看法?

iva*_*tpr 12

我担心在VARCHAR2字段中放置额外的空格以及比较问题.我知道有一些方法可以通过修剪或转换来比较它们,但我担心它会使我的代码变得杂乱无章.

实际上恰恰相反.使用CHAR会强制你的字符串固定长度,如果它们太短,用空格填充它们.因此,当在使用数据的任何应用程序中将CHAR与常规字符串进行比较时,该应用程序每次都需要添加修剪.换句话说,VARCHAR2是自然导致更清晰代码的选择.

通常,您应该始终使用VARCHAR2,除非您有一个非常具体的原因,您需要CHAR列.

如果您担心前面或末尾有额外空格的字符串,那么可以想到一些选项:

  • 确保插入过程中的任何过程都会对插件进行修剪.
  • 在列上添加一个检查约束,以确保string = trim(string).
  • 添加一个插入前的行级触发器,在插入字符串时对其进行修剪.
  • 每当查询表时,请确保对字符串进行修剪


gav*_*koa 5

读:

引自 AskTom 文章:

CHAR/NCHAR 实际上只不过是变相的 VARCHAR2/NVARCHAR2,这一事实使我认为实际上只有两种字符串类型需要考虑,即 VARCHAR2 和 NVARCHAR2。我从未在任何应用程序中找到 CHAR 类型的用途。由于 CHAR 类型总是将结果字符串空白填充到固定宽度,我们很快发现它在表段和任何索引段中都消耗了最大的存储空间。这已经够糟糕了,但是还有另一个重要的原因要避免使用 CHAR/NCHAR 类型:它们在需要检索此信息的应用程序中造成混淆(许多在存储后无法“找到”他们的数据)。其原因与字符串比较的规则及其执行的严格性有关。

  • 请注意,您应该在此处、本网站上发布答案的基本部分,否则您的帖子有被删除的风险 [请参阅常见问题解答,其中提到的答案仅是一个链接而已。](http://stackoverflow。 com/faq#deletion) 如果您愿意,您仍然可以包含该链接,但仅作为“参考”。答案应该是独立的,不需要链接。 (2认同)