使用 char 和 varchar 数据

charvarchar 数据类型存储由以下字符组成的数据:

  • 大写字符或小写字符。例如,a、b 和 C。
  • 数字。例如,1、2 和 3。
  • 特殊字符。例如,at 符号 (@)、“与”符号 (&) 和感叹号 (!)。

charvarchar 数据可以是单个字符。char 数据还可以是最多包含 8000 个字符的字符串,varchar 数据可以是最多包含 2^31 个字符的字符串。varchar 数据可以有两种形式。varchar 数据的最大字符长度可以是指定的。例如,varchar(6) 指示此数据类型最多存储六位字符;它也可以是 varchar(max), 形式的,即此数据类型可存储的最大字符数可达 2^31。有关 varchar(max), 的详细信息,请参阅使用大值数据类型

每个 charvarchar 数据值都具有排序规则。排序规则定义属性,如用于表示每个字符的位模式、比较规则以及是否区分大小写或重音。每个数据库有默认排序规则。当定义列或指定常量时,除非使用 COLLATE 子句指派特定的排序规则,否则将为它们指派数据库的默认排序规则。当组合或比较两个具有不同排序规则的 charvarchar 值时,根据排序规则的优先规则来确定操作所使用的排序规则。

字符常量必须包括在单引号 (') 或双引号 (") 中。建议用单引号括住字符常量。当 QUOTED IDENTIFIER 选项设为 ON 时,有时不允许用双引号括住字符常量。

下面的 Transact-SQL 示例给一个字符变量赋值:

DECLARE @MyCharVar CHAR(25)
SET @MyCharVar = 'Ricardo Adocicados'

如果使用单引号分隔的字符常量包含一个嵌入的单引号,可以使用两个单引号表示嵌入单引号。例如:

SET @MyCharVar = 'O''Leary'

如果要存储的数据比允许的字符数多,则数据就会被截断。例如,如果某列被定义为 char(10),现要将值“This is a really long character string”存储到该列,则 SQL Server 将把该字符串截断为“This is a ”。

当指定了 NOT NULL 子句时,char 数据类型是一种长度固定的数据类型。如果插入值的长度比 char NOT NULL 列的长度小,将在值的右边填补空格直到达到列的长度。例如,如果某列定义为 char(10),而要存储的数据是“music”,则 SQL Server 将数据存储为“music_____”,这里“_”表示空格。

如果创建 char NULL 列时 ANSI_PADDING 为 ON,则其行为将和 char NOT NULL 列一样:在值的右边填补直到达到列的长度。如果创建 char NULL 列时 ANSI_PADDING 为 OFF,则其行为将和 ANSI_PADDING 设为 OFF 的 varchar 列一样:末尾的空格将截断。

varchar 数据类型是一种长度可变的数据类型。比列的长度小的值,不会在值的右边填补来达到列的长度。在创建列时,如果 ANSI_PADDING 选项设置为 OFF,则所有存储在列中的字符值末尾的空格都将截断。在创建列时,如果 ANSI_PADDING 设置为 ON,则末尾空格将不截断。

在字符串字节中的位的存储方式是按照安装时指定的 Microsoft SQL Server 2005 代码页来解释的。charvarchar 对象可以包含 SQL Server 代码页中的任何字符。 .

使用 SQL Server 6.5 或更低版本中的 SQL Server ODBC 驱动程序的应用程序只能支持最大 255 个字节的字符数据。如果这些应用程序尝试检索 SQL Server 7.0 或更高版本的字符参数或结果集中包含的数据超过 255 个字节,则字符数据将在第 255 个字节处截断。

请参阅

其他资源

数据类型 (Transact-SQL)
char 和 varchar (Transact-SQL)
排序规则优先级 (Transact-SQL)
SET ANSI_PADDING (Transact-SQL)
sp_dbcmptlevel (Transact-SQL)

帮助和信息

获取 SQL Server 2005 帮助