【问题标题】:how many chars can a str contain?str 可以包含多少个字符?
【发布时间】:2014-09-20 13:00:04
【问题描述】:

早上好, 我在 plsql 中有一个问题,因为我必须知道一个 str 可以包含多少个字符(我使用 oracle 11)。 plsql中的代码是这样的:

str VARCHAR2(32767):= NULL; 

str 是一个最大大小为 32767 字节的字符串。

但是这个字符串最多可以包含多少个字符呢?

感谢您的帮助。

【问题讨论】:

标签: sql oracle


【解决方案1】:

我注意到您的问题是关于您可以存储的字符数,而不是字节数。区别就在这里(见 SO 回答 Difference between BYTE and CHAR in column datatypes):

让我们假设数据库字符集是 UTF-8,这是最新版本的 Oracle 中推荐的设置。在这种情况下,某些字符需要超过 1 个字节才能存储在数据库中

如果将字段定义为 VARCHAR2(11 BYTE),Oracle 可以使用最多 11 个字节进行存储,但实际上可能无法存储 11 个字符在现场,因为其中一些需要超过一个字节来存储,例如非英文字符。

通过将字段定义为 VARCHAR2(11 CHAR),您告诉 Oracle 它可以使用足够的空间来存储 11 个字符,无论每个字符需要多少字节来存储一。单个字符最多可能需要 4 个字节。

chars和bytes的区别示例:http://mothereff.in/byte-counter

此外,字符长度语义不会影响 VARCHAR2 的 4000 字节最大值(Oracle 11g,请参阅文档 Oracle doc)长度。如果某些字符需要多个字节的存储空间,则声明 VARCHAR2(4000 CHAR) 将允许少于 4000 个字符。

【讨论】:

  • 你认为你应该包括the answer you copied this from的归属吗?
  • Alex,我的错误,我添加了参考。在这种情况下我是否应该使用重复,因为我添加了与他提到的 Oracle 版本相关的信息以及显示字符数和字节长度之间差异的测试
  • 谢谢。我不确定这个问题是否完全重复,因为我认为它专门针对达到 32k 限制以及当时的行为。
【解决方案2】:

documentation (v11.2) 中所述,varchar2 分别具有 maxsize:

  • PL/SQL:32767 字节
  • SQL:4000 字节的 SQL。

为确保独立于字符集存储 N 个电荷,您必须指定:

str VARCHAR2(32767 CHAR):= NULL; 

顺便说一下,存储一个字符所需的字节数取决于字符集。

version 12.1开始,VARCHAR2被扩展为32767字节。

【讨论】:

  • 您可以添加一个在版本 12c SQL VARCHAR2 长度可以扩展到 32,767 字节。
  • VARCHAR2(32767 CHAR) 并不意味着您可以拥有 32k 个多字节字符;您仍然受限于数据类型的整体 32k 字节限制。对于较小的尺寸,它会有所不同,例如VARCHAR2(100 CHAR) 将允许 100 个多字节字符,因此总存储空间可能超过 100 个字节;但不在数据类型限制的顶部。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-16
  • 1970-01-01
  • 2012-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多