早上好, 我在plsql中遇到问题,因为我必须知道str可以包含多少个char(我使用oracle 11)。 plsql中的代码是这样的:
str VARCHAR2(32767):= NULL;
str是一个最大大小为32767字节的字符串。
但是这个字符串可以包含的最大字符数是多少?
感谢您的帮助。
答案 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:
为确保您可以通过字符集独立存储N次充电,您必须指定:
str VARCHAR2(32767 CHAR):= NULL;
顺便说一下,存储字符所需的字节数取决于字符集。
从version 12.1开始,VARCHAR2扩展到32767字节。