【问题标题】:Varchar and char sql server [duplicate]Varchar和char sql服务器[重复]
【发布时间】:2017-04-13 06:57:26
【问题描述】:

我目前正在为一家大公司开发,他们要求我按照一些指导方针为项目创建一个数据库,但我有一个关于 char 和 varchar 的小问题。

我有一个可以是 8 或 11 个字符的字符串,我想知道哪个是最好的解决方案:

myColumn varchar(11) 要么 myColumn char(11)

一开始我在想第二个,但是char是固定长度的,不是吗?

感谢您的回答。

【问题讨论】:

  • c-sharpcorner.com/uploadfile/cda5ba/…。这应该让您对使用什么有所了解。
  • 查看这个完整的答案。 stackoverflow.com/a/59686/6211175
  • @PareshJ 不要发火,试着给出一个体面的答案。
  • 但据我所知 varchar 会是一个更好的选择,因为它只会分配你需要的内存,而 char 会占用全部长度。
  • 在这种情况下,CHAR 是最好的选择,为什么?如果字符串为 8 > char (11) 分配 11 字节 VS varchar(11) 分配 10 字节(8 + 2 开销)......如果字符串为 11 > char (11) 分配 11 字节 VS varchar(11) 分配13 字节(11 + 2 开销)除了 char 位比 vahchar 快

标签: sql-server char varchar


【解决方案1】:

char(11) 可以保存长度最多为 11 个字符的字符串,但即使您只有 2 个字符,它也会占用整个 11 个字符的空间(将用空间填充其余部分。varchar(11) 确实持有长度相同的字符串,但不会预留空间。

What is the major difference between Varchar2 and char

【讨论】:

    【解决方案2】:

    CHAR 数据类型是固定长度数据类型。例如,如果您声明一个 CHAR (11) 数据类型的列,那么无论您在该列中存储 1 个字符还是 11 个字符,它都将始终占用 11 个字节。

    另一方面,VARCHAR 是可变长度数据类型。例如,如果您声明一个 VARCHAR (11) 数据类型的列,它将占用的字节数等于该列中存储的字符数。所以,在这个变量/列中,如果你只存储一个字符,那么它只需要一个字节,如果我们存储 11 个字符,那么它将需要 11 个字节。在此示例中,由于您已将列声明为 VARCHAR (11),因此我们可以在此列中最多存储 11 个字符。

    https://msdn.microsoft.com/en-in/library/ms176089.aspx

    【讨论】:

      【解决方案3】:

      varchar(11) 更可取,因为内存分配是动态的(例如,假设字符串长度为 8,那么内存分配仅为 8 个字符而不是全部)。但在为所有单元分配的 char(11) 内存的情况下。

      【讨论】:

        猜你喜欢
        • 2015-12-12
        • 2012-07-15
        • 2016-01-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-06
        • 2013-06-24
        • 2017-02-18
        相关资源
        最近更新 更多