【问题标题】:Difference between varchar2(10), varchar2(10 byte) and varchar2(10 char)varchar2(10)、varchar2(10 byte) 和 varchar2(10 char) 的区别
【发布时间】:2019-06-29 04:35:48
【问题描述】:

客户告诉我将varchar2(10 char) 替换为varchar2(10 byte)。我完全不知道varchar2(10),varchar2(10 char)varchar2(10 byte) 的区别。也请您告诉我我们应该在哪种情况下使用。

【问题讨论】:

    标签: sql oracle sqldatatypes


    【解决方案1】:

    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 配置。

    ocacle ask link

    【讨论】:

    • 那么 varchar2(10) 和 varchar2(10 byte) 有什么区别吗?
    • @OnkarTiwari 是的,有区别,这取决于配置
    • Zaynul.. 使用 varchar2(10 字节) 是否有意义?
    • @OnkarTiwari 实际上这取决于您的要求
    【解决方案2】:

    来自 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 设置, 并不意味着他们会...

    【讨论】:

      猜你喜欢
      • 2011-05-29
      • 2017-09-25
      • 1970-01-01
      • 2017-05-26
      • 2011-04-25
      • 1970-01-01
      • 2013-12-23
      • 1970-01-01
      相关资源
      最近更新 更多