【发布时间】:2019-06-29 04:35:48
【问题描述】:
客户告诉我将varchar2(10 char) 替换为varchar2(10 byte)。我完全不知道varchar2(10),varchar2(10 char) 和varchar2(10 byte) 的区别。也请您告诉我我们应该在哪种情况下使用。
【问题讨论】:
标签: sql oracle sqldatatypes
客户告诉我将varchar2(10 char) 替换为varchar2(10 byte)。我完全不知道varchar2(10),varchar2(10 char) 和varchar2(10 byte) 的区别。也请您告诉我我们应该在哪种情况下使用。
【问题讨论】:
标签: sql oracle sqldatatypes
VARCHAR2(10 byte) 最多支持 10 个字节的数据,在多字节字符集中可以少至两个字符。
VARCHAR2(10 char) 最多可支持 40 字节的信息,最多可支持 10 个字符的数据。
Varchar2(10) 使用 NLS_LENGTH_SEMANTICS 的当前值来确定字符串的限制。
如果是字节,则为 10 个字节。
如果是 char,则为 10 个字符。
在多字节字符集中,这些可能不同!因此,如果 NLS_LENGTH_SEMANTICS = byte,您可能只能在 varchar2 中存储 5 个字符。 所以 varchar2(10 char) 是明确的。这最多可以存储 10 个字符。 Varchar2(10) 是隐式的。它可能存储 10 个字节或 10 个字符,具体取决于 DB 配置。
【讨论】:
来自 asktom https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:9532325800346614530
Varchar2(10) 使用 NLS_LENGTH_SEMANTICS 的当前值 确定字符串的限制。
如果这是字节,那么它是 10 个字节。
如果是 char,则为 10 个字符。
在多字节字符集中,这些可能不同!因此,如果 NLS_LENGTH_SEMANTICS = byte,你可能只能存储 5 个 varchar2 中的字符。
所以 varchar2(10 char) 是显式的。这最多可以存储 10 个字符。 Varchar2(10) 是隐式的。它可以存储 10 个字节或 10 个字符, 取决于数据库配置。
最好是明确的(10 个字符)。虽然你所有的产品/测试/开发 数据库应该具有相同的 NLS_LENGTH_SEMANTICS 设置, 并不意味着他们会...
【讨论】: