Sql 前导长度是什么意思?

Sql 前导长度是什么意思?,sql,oracle,Sql,Oracle,我在谷歌查char和varchar2的区别。我在这篇文章中遇到了一个单词前导长度。上面写着 假设将字符串'ORATABLE'存储在CHAR(20)字段和VARCHAR2(20)字段中。CHAR字段将使用22个字节(前导长度为2个字节)。VARCHAR2字段将仅使用10个字节(8表示字符串,2字节表示前导长度) Q1:如果字符串为8个字符(1字节=1个字符),字符字段将如何使用22个字节 Q2前导长度是多少?为什么它会占用2个字节?数据类型用字符填充字符串。因此,对于'ORATABLE',它看起来

我在谷歌查char和varchar2的区别。我在这篇文章中遇到了一个单词前导长度。上面写着

假设将字符串'ORATABLE'存储在CHAR(20)字段和VARCHAR2(20)字段中。CHAR字段将使用22个字节(前导长度为2个字节)。VARCHAR2字段将仅使用10个字节(8表示字符串,2字节表示前导长度)

Q1:如果字符串为8个字符(1字节=1个字符),字符字段将如何使用22个字节

Q2前导长度是多少?为什么它会占用2个字节?

数据类型用字符填充字符串。因此,对于
'ORATABLE'
,它看起来像:

'ORATABLE            '
 12345678901234567890
“前导长度”是指开头的两个字节,用于指定字符串的长度。需要两个字节,因为一个字节不够。两个字节允许长度达到65535个单位;一个字节只允许长度达到255

重要的一点是
CHAR()
VARCHAR2()
使用相同的内部格式,因此没有理由起诉
CHAR()
。就个人而言,我只会将其用于固定长度的代码,例如ISO国家代码或美国社会保险号码。

数据类型将字符串填充为字符。因此,对于
'ORATABLE'
,它看起来像:

'ORATABLE            '
 12345678901234567890
“前导长度”是指开头的两个字节,用于指定字符串的长度。需要两个字节,因为一个字节不够。两个字节允许长度达到65535个单位;一个字节只允许长度达到255


重要的一点是
CHAR()
VARCHAR2()
使用相同的内部格式,因此没有理由起诉
CHAR()
。就我个人而言,我只会将其用于固定长度的代码,如ISO国家代码或美国社会保险号码。

使用更可靠的来源讨论的是物理存储在磁盘上的内容。Oracle在创建其产品时,他们决定将字符串的
长度
存储在前两个字节中(而不是在需要时动态计算)。你可能会问为什么甲骨文会这样做,但这是一个完全不同的问题。在任何情况下,为了存储
char(20)
值,Oracle将使用22个字节,而不是20个字节-前两个字节将存储字符串的长度(20)。为什么它需要两个字节?你可以从Gordon的答案中看到。@Mathu说字符串的长度将存储在前两个字节中。在我给出的示例'ORATABLE'8中,字符串的长度是多少,或者括号中给出的长度是多少,即CHAR(20)?@SaumyojitDas-CHAR(20)表示输入字符串将填充长度为20的空格。如果取而代之的是VARCHAR2(20)或VARCHAR2(100)或VARCHAR2(4000),那么每种情况下的长度都是8。您可以使用Oracle函数
DUMP
查看存储的内容(包括长度)。如果您不熟悉它,请使用Google查找Oracle文档中的
DUMP
-这是一个非常有用的函数,可以帮助您了解并用于将来将面临的许多不同问题。@mathguy in char(20)如果字符串为8个字符,那么左12个字符将由空格填充?如果是这样的话,那么总大小应该是多少字节?1个字符=1个字节使用更可靠的源讨论的是物理存储在磁盘上的内容。Oracle在创建其产品时,他们决定将字符串的
长度
存储在前两个字节中(而不是在需要时动态计算)。你可能会问为什么甲骨文会这样做,但这是一个完全不同的问题。在任何情况下,为了存储
char(20)
值,Oracle将使用22个字节,而不是20个字节-前两个字节将存储字符串的长度(20)。为什么它需要两个字节?你可以从Gordon的答案中看到。@Mathu说字符串的长度将存储在前两个字节中。在我给出的示例'ORATABLE'8中,字符串的长度是多少,或者括号中给出的长度是多少,即CHAR(20)?@SaumyojitDas-CHAR(20)表示输入字符串将填充长度为20的空格。如果取而代之的是VARCHAR2(20)或VARCHAR2(100)或VARCHAR2(4000),那么每种情况下的长度都是8。您可以使用Oracle函数
DUMP
查看存储的内容(包括长度)。如果您不熟悉它,请使用Google查找Oracle文档中的
DUMP
-这是一个非常有用的函数,可以帮助您了解并用于将来将面临的许多不同问题。@mathguy in char(20)如果字符串为8个字符,那么左12个字符将由空格填充?如果是这样,那么总大小应该是多少字节?1 char=1 byteI即使在这些情况下,使用
char
也没有任何好处。我听说它认为它是自我记录的(例如
char(3)
说“这个列应该正好是3个字节”,但由于它除了添加不需要的空格之外没有强制执行它-你可以通过检查约束更好地强制执行它,并通过注释更好地记录它-我认为即使这样也没有用。@Gordon Linoff u说“前导长度”开头是指定字符串长度的两个字节。开头是什么?考虑到前导长度为2个字节,给定的字符串“ORATABLE”应该占用10个字节(ORATABLE是一个8个字符的单词,所以8+2(前导长度)=10)?我的判断正确吗?@Saumoyitdas…我认为Oracle使用两个字节,不管长度如何,但文档在这一点上是模糊的。其他一些数据库可能使用一个字节,否则使用两个或更多字节。@Gordon Linoff u说“前导长度”开头是两个字节,用于指定字符串的长度。开头是什么?@GordonLinoff“两个字节允许长度最多为65535个单位;一个字节仅允许l