位置:首页 > 编程专栏 > SQL Server

SQL Server 中 char varchar nvarchar length 存储长度测试

SQL Server 版本:SQL Server 2008 R2

USE master;
GO

--创建数据库
IF NOT EXISTS(SELECT * FROM dbo.sysdatabases WHERE [name]='TestDB')
	CREATE DATABASE TestDB;
GO

--使用数据库
USE TestDB;
GO

--TestLength:测试表
IF EXISTS(SELECT * FROM sysobjects WHERE [name]='TestLength')
	DROP TABLE [TestLength]
GO
CREATE TABLE [TestLength](
		[Id] [int] IDENTITY(1,1),--主键
		[Name1] [char](5),--名称1
		[Name2] [varchar](5),--名称2
		[Name3] [nvarchar](5),--名称3
		PRIMARY KEY([Id])
);
GO

--char(5):英文字符占一个字符, 中文字符占两个字符, 不能超过5个字符
INSERT INTO [TestLength]([Name1]) VALUES ('李白A');
INSERT INTO [TestLength]([Name1]) VALUES ('ABCDE');
INSERT INTO [TestLength]([Name1]) VALUES ('李白一');--失败
INSERT INTO [TestLength]([Name1]) VALUES ('ABCDEF');--失败

--varchar(5):英文字符占一个字符, 中文字符占两个字符, 不能超过5个字符
INSERT INTO [TestLength]([Name2]) VALUES ('李白A');
INSERT INTO [TestLength]([Name2]) VALUES ('ABCDE');
INSERT INTO [TestLength]([Name2]) VALUES ('李白一');--失败
INSERT INTO [TestLength]([Name2]) VALUES ('ABCDEF');--失败

--nvarchar(5):英文字符占一个字符, 中文字符占一个字符, 不能超过5个字符
INSERT INTO [TestLength]([Name3]) VALUES ('李白A');
INSERT INTO [TestLength]([Name3]) VALUES ('ABCDE');
INSERT INTO [TestLength]([Name3]) VALUES ('李白一二三');
INSERT INTO [TestLength]([Name3]) VALUES ('李白一二三四');--失败
INSERT INTO [TestLength]([Name3]) VALUES ('ABCDEF');--失败

SELECT * FROM [TestLength];

/*

在程序里的length代表的都是字符长度
html.length
"李ab".length=3

C#.Length
"李ab".Length=3

1.数据库中如果用 char varchar length=10
	全是英文 "传入字符串".Length<=10
	英文中文混合 "传入字符串".Length<=5
2.数据库中如果用 nvarchar length=10
	不区分中文英文 "传入字符串".Length<=10

推荐解决方案:
1.如果是全英文推荐使用 char or varchar length=10
	"传入字符串".Length<=10
2.如果是中文英文混合推荐使用 nvarchar length=10
	"传入字符串".Length<=10
*/




C# 社区推荐