首页 > 代码库 > SQL Server: char, nchar, varchar和nvarchar
SQL Server: char, nchar, varchar和nvarchar
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
SQL Server: char, nchar, varchar和nvarchar