str可以包含多少个字符?

时间:2014-07-29 07:49:04

标签: sql oracle

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

str VARCHAR2(32767):= NULL; 

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

但是这个字符串可以包含的最大字符数是多少?

感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

我注意到你的问题是你可以存储的字符数,而不是字节数。不同之处在于(参见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个字节。

关于字符和字节之间差异的示例:http://mothereff.in/byte-counter

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

答案 1 :(得分:2)

正如documentation(v11.2)中所解释的, varchar2 分别有maxsize:

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

为确保您可以通过字符集独立存储N次充电,您必须指定:

str VARCHAR2(32767 CHAR):= NULL; 

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

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