SQL Server: char, nchar, varchar和nvarchar

p.MsoNormal,li.MsoNormal,div.MsoNormal { margin: 0cm; margin-bottom: .0001pt; text-align: justify; font-size: 10.5pt; font-family: "Calibri", "sans-serif" }
p.MsoAcetate,li.MsoAcetate,div.MsoAcetate { margin: 0cm; margin-bottom: .0001pt; text-align: justify; font-size: 9.0pt; font-family: "Calibri", "sans-serif" }
span.Char { }
div.Section1 { }

1. 定长或变长

定长或变长都是相对于数据存储长度而言.

定长:当字段中保存的数据没有达到指定的长度时, 自动以英文空格在数据后面填充到指定长度.

变长:当字段中保存的数据没有达到指定的长度时, 不会以英文空格在数据后面填充到指定长度.

2. 存储ANSI字符或Unicode字符

ANSI字符: 按1个字节存储.

Unicode字符: 按2个字节存储.

Char:

-- Step 1: Create tables

create table DataType_tbl_char(

[id] [int] identity(1,1) not null,

[name] [char](10) null   -- 设定数据长度为10

)on [primary]

go

-- Step 2.1: insert data part 1 插入数字

insert into DataType_tbl_char(name) values(‘12345‘)     -- 插入成功

insert into DataType_tbl_char(name) values(‘123456‘)     -- 插入成功

insert into DataType_tbl_char(name) values(‘1234567‘)   -- 插入成功

insert into DataType_tbl_char(name) values(‘12345678‘)  -- 插入成功

insert into DataType_tbl_char(name) values(‘123456789‘) -- 插入成功

insert into DataType_tbl_char(name) values(‘1234567890‘)-- 插入成功

-- 插入失败(值超长, 因为设置了字段长度为10)

insert into DataType_tbl_char(name) values(‘12345678901‘)

-- Step 2.2: insert data part 2 插入中文

insert into DataType_tbl_char(name) values(‘一二三四五‘)  -- 插入成功

-- 插入失败(char类型存储ANSI字符时占用1个字节, 存储Unicode字符时2个字节)

insert into DataType_tbl_char(name) values(‘一二三四五六‘)

-- Step 3: 数据显示

select id, name

,LEN(name) as NameLength

,‘|‘ + name + ‘|‘ as ShowText   -- 数据前后加了"|"隔开方便查看

from DataType_tbl_char

Nchar:

-- Step 1: Create tables

create table DataType_tbl_nchar(

[id] [int] identity(1,1) not null,

[name] [nchar](10) null  -- 设定数据长度为10

)on [primary]

go

-- Step 2.1: insert data part 1 插入数字

insert into DataType_tbl_nchar(name) values(‘12345‘)        -- 插入成功

insert into DataType_tbl_nchar(name) values(‘123456‘)       -- 插入成功

insert into DataType_tbl_nchar(name) values(‘1234567‘)      -- 插入成功

insert into DataType_tbl_nchar(name) values(‘12345678‘)     -- 插入成功

insert into DataType_tbl_nchar(name) values(‘123456789‘)    -- 插入成功

insert into DataType_tbl_nchar(name) values(‘1234567890‘)   -- 插入成功

-- 插入失败(值超长, 因为设置了字段长度为10)

insert into DataType_tbl_nchar(name) values(‘12345678901‘)

go

-- Step 2.2: insert data part 2 插入中文

insert into DataType_tbl_nchar(name) values(‘一二三四五‘)            -- 插入成功

insert into DataType_tbl_nchar(name) values(‘一二三四五六‘)          -- 插入成功

insert into DataType_tbl_nchar(name) values(‘一二三四五六七‘)         -- 插入成功

insert into DataType_tbl_nchar(name) values(‘一二三四五六七八‘)       -- 插入成功

insert into DataType_tbl_nchar(name) values(‘一二三四五六七八九‘)     -- 插入成功

insert into DataType_tbl_nchar(name) values(‘一二三四五六七八九十‘)   -- 插入成功

-- 插入失败(值超长, 因为设置了字段长度为10)

insert into DataType_tbl_nchar(name) values(‘一二三四五六七八九十零‘)

go

-- Step 3: 数据显示

select id, name

,LEN(name) as NameLength

,‘|‘ + name + ‘|‘ as ShowText   -- 数据前后加了"|"隔开方便查看

from DataType_tbl_nchar

Varchar:

-- Step 1: Create tables

create table DataType_tbl_varchar(

[id] [int] identity(1,1) not null,

[name] [varchar](10) null   -- 设定数据长度为10

)on [primary]

go

-- Step 2.1: insert data part 1 插入数字

insert into DataType_tbl_varchar(name) values(‘12345‘)      -- 插入成功

insert into DataType_tbl_varchar(name) values(‘123456‘)     -- 插入成功

insert into DataType_tbl_varchar(name) values(‘1234567‘)    -- 插入成功

insert into DataType_tbl_varchar(name) values(‘12345678‘)   -- 插入成功

insert into DataType_tbl_varchar(name) values(‘123456789‘)  -- 插入成功

insert into DataType_tbl_varchar(name) values(‘1234567890‘) -- 插入成功

-- 插入失败(值超长, 因为设置了字段长度为10)

insert into DataType_tbl_varchar(name) values(‘12345678901‘)

-- Step 2.2: insert data part 2 插入中文

insert into DataType_tbl_varchar(name) values(‘一二三四五‘)  -- 插入成功

-- 插入失败(char类型存储ANSI字符时占用1个字节, 存储Unicode字符时2个字节)

insert into DataType_tbl_varchar(name) values(‘一二三四五六‘)

-- Step 3: 数据显示

select id, name

,LEN(name) as NameLength

,‘|‘ + name + ‘|‘ as ShowText   -- 数据前后加了"|"隔开方便查看

from DataType_tbl_varchar

Nvarchar:

-- Step 1: Create tables

create table DataType_tbl_nvarchar(

[id] [int] identity(1,1) not null,

[name] [nvarchar](10) null  -- 设定数据长度为10

)on [primary]

go

-- Step 2.1: insert data part 1 插入数字

insert into DataType_tbl_nvarchar(name) values(‘12345‘)        -- 插入成功

insert into DataType_tbl_nvarchar(name) values(‘123456‘)       -- 插入成功

insert into DataType_tbl_nvarchar(name) values(‘1234567‘)      -- 插入成功

insert into DataType_tbl_nvarchar(name) values(‘12345678‘)     -- 插入成功

insert into DataType_tbl_nvarchar(name) values(‘123456789‘)    -- 插入成功

insert into DataType_tbl_nvarchar(name) values(‘1234567890‘)   -- 插入成功

-- 插入失败(值超长, 因为设置了字段长度为10)

insert into DataType_tbl_nvarchar(name) values(‘12345678901‘)

go

-- Step 2.2: insert data part 2 插入中文

insert into DataType_tbl_nvarchar(name) values(‘一二三四五‘)        -- 插入成功

insert into DataType_tbl_nvarchar(name) values(‘一二三四五六‘)       -- 插入成功

insert into DataType_tbl_nvarchar(name) values(‘一二三四五六七‘)     -- 插入成功

insert into DataType_tbl_nvarchar(name) values(‘一二三四五六七八‘)    -- 插入成功

insert into DataType_tbl_nvarchar(name) values(‘一二三四五六七八九‘)  -- 插入成功

insert into DataType_tbl_nvarchar(name) values(‘一二三四五六七八九十‘) -- 插入成功

-- 插入失败(值超长, 因为设置了字段长度为10)

insert into DataType_tbl_nvarchar(name) values(‘一二三四五六七八九十零‘)

go

-- Step 3: 数据显示

select id, name

,LEN(name) as NameLength

,‘|‘ + name + ‘|‘ as ShowText   -- 数据前后加了"|"隔开方便查看

from DataType_tbl_nvarchar

时间: 12-14

SQL Server: char, nchar, varchar和nvarchar的相关文章

SQL中char、varchar、nvarchar的区别

SQL中char.varchar.nvarchar的区别: char    char是定长的,也就是当你输入的字符小于你指定的数目时,char(8),你输入的字符小于8时,它会再后面补空值.当你输入的字符大于指定的数时,它会截取超出的字符.   nvarchar(n)    包含 n 个字符的可变长度 Unicode 字符数据.n 的值必须介于 1 与 4,000 之间.字节的存储大小是所输入字符个数的两倍.所输入的数据字符长度可以为零.       varchar[(n)]      长度为

Sql Server char、varchar、nchar、nvarchar的区别

(1) 定义: char: 固定长度,存储ANSI字符,不足的补英文半角空格. nchar: 固定长度,存储Unicode字符,不足的补英文半角空格 varchar: 可变长度,存储ANSI字符,根据数据长度自动变化. nvarchar: 可变长度,存储Unicode字符,根据数据长度自动变化. nvarchar(n) :包含 n个字符的可变长度 Unicode 字符数据.n 的值必须介于 1 与 4,000 之间.字节的存储大小是所输入字符个数的两倍.所输入的数据字符长度可以为零. varch

SQL中char nchar varchar nvarchar text ntext的区别

类型 长度 使用说明 长度说明 char(n) 定长 索引效率高,程序里面使用trim去除多余的空白 n必须是一个介于1和8000之间的数值,存储大小为n个字节 varchar(n) 变长 效率没char高 灵活 n必须是一个介于1和8000之间的数值.存储大小为输入数据的字节的实际长度,而不是n个字节 text(n) 变长 非Unicode数据 不用指定长度 nchar(n) 定长 处理Unicode数据类型(所有的字符使用两个字节表示) n的值必须介于1和4000之间,存储大小为n字节的两倍

sql中char nchar varchar nvarchar的区别

char    char是定长的,也就是当你输入的字符小于你指定的数目时,char(8),你输入的字符小于8时,它会再后面补空值.当你输入的字符大于指定的数时,它会截取超出的字符.   nvarchar(n)    包含 n 个字符的可变长度 Unicode 字符数据.n 的值必须介于 1 与 4,000 之间.字节的存储大小是所输入字符个数的两倍.所输入的数据字符长度可以为零.      varchar[(n)]     长度为 n 个字节的可变长度且非 Unicode 的字符数据.n 必须是

sql server中的varchar和Nvarchar有什么区别?

很多开发者进行数据库设计的时候往往并没有太多的考虑char, varchar类型,有的是根本就没注意,因为存储价格变得越来越便宜了,忘记了最开始的一些基本设计理论和原则,这点让我想到了现在的年轻人,大手一挥一把人民币就从他手里溜走了,其实我想不管是做人也好,做开发也好,细节的把握直接决定很多东西.当然还有一部分人是根本就没弄清楚他们的区别,也就随便选一个.在这里我想对他们做个简单的分析,当然如果有不对的地方希望大家指教. 1.CHAR.CHAR存储定长数据很方便,CHAR字段上的索引效率级高,比

SQL中char、varchar、nvarchar的区别(zhuan)

char    char是定长的,也就是当你输入的字符小于你指定的数目时,char(8),你输入的字符小于8时,它会再后面补空值.当你输入的字符大于指定的数时,它会截取超出的字符.   nvarchar(n)    包含 n 个字符的可变长度 Unicode 字符数据.n 的值必须介于 1 与 4,000 之间.字节的存储大小是所输入字符个数的两倍.所输入的数据字符长度可以为零.       varchar[(n)]      长度为 n 个字节的可变长度且非 Unicode 的字符数据.n 必

[转]SQL中char、varchar、nvarchar的区别

char    char是定长的,也就是当你输入的字符小于你指定的数目时,char(8),你输入的字符小于8时,它会再后面补空值.当你输入的字符大于指定的数时,它会截取超出的字符.   nvarchar(n)    包含 n 个字符的可变长度 Unicode 字符数据.n 的值必须介于 1 与 4,000 之间.字节的存储大小是所输入字符个数的两倍.所输入的数据字符长度可以为零.       varchar[(n)]      长度为 n 个字节的可变长度且非 Unicode 的字符数据.n 必

sql server char nchar nvarchar varchar之間的區別

char存储固定长度的字符串,最大长度为8000个字节. varchar存储可变长度的字符串,最大长度为8000个字节. nchar存储固定长度的Unicode字符串,最大长度为4000个字符. nvarchar存储可变唱的的Unicode字符串,最大长度为4000值字符. 注意的是: 在分配存储空间上会有不同,如varchar(10)分配10个字节 nvarchar(10)则可以分配20个字节.也就是说nvarchar(10)要不varchar(10)存储较多的信息.因为一个为字节存储,一个为

sqlserver char nchar varchar nvarchar 的区别

数据库SQLserver的数据库存储类型(nchar.char .nvarchar.varchar)的说明及比较 1.char类型: 对英文(ASCII)字符占用1个字节,对一个汉字占用2个字节,CHAR存储定长数据很方便,CHAR字段上的索引效率极高,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间.因为是固定长度,所以速度效率高. 2.varchar类型:      存储变长数据,如果一个字段可能的值是不固定长度的,我们只知道它不可能超过10个字符