实例测试nvarchar,varchar的区别
公司项目要求支持多国语言,所以决定用utf-8,今天是数据库设计的第一天,我在asp+sqlserver环境下做了测试,结果无论中文、日文、英文、繁体中文出来的结果都一样,我的理解应该是只有nchar和nvarchar正常显示,其他的是乱码,不对吗?
假设你的数据库系统安装在简体中文环境下, 而且你的默认排序规则是 Chinease 的(默认安装), 则用下面的代码, 你就能测试出问题来.
USE tempdb
GO
CREATE TABLE tb(
col1 varchar(10) COLLATE Latin1_General_CS_AS, -- collate是对 char/varchar 有效的, nvarchar/nchar/ntext 不受collate的影响, 因此无须指定 collate
col2 nvarchar(10) COLLATE Latin1_General_CS_AS
)
GO
INSERT tb SELECT '中', '国'
GO
SELECT *, DBCollate = DATABASEPROPERTYEX(DB_NAME(), 'Collation') FROM tb
GO
DROP TABLE tb
/*-- 结果
col1 col2 DBCollate
---------- ---------- --------------------
? 国 Chinese_PRC_CI_AS
(所影响的行数为 1 行)
--*/
GO
CREATE TABLE tb(
col1 varchar(10) COLLATE Latin1_General_CS_AS, -- collate是对 char/varchar 有效的, nvarchar/nchar/ntext 不受collate的影响, 因此无须指定 collate
col2 nvarchar(10) COLLATE Latin1_General_CS_AS
)
GO
INSERT tb SELECT '中', '国'
GO
SELECT *, DBCollate = DATABASEPROPERTYEX(DB_NAME(), 'Collation') FROM tb
GO
DROP TABLE tb
/*-- 结果
col1 col2 DBCollate
---------- ---------- --------------------
? 国 Chinese_PRC_CI_AS
(所影响的行数为 1 行)
--*/
建表时, 为字段指定与实例默认collate不同的collae选项, 是为了在同一台电脑上把问题测试出来.
collate是对 char/varchar 有效的, nvarchar/nchar/ntext 不受collate的影响, 因此无须指定 collate