高手请进!谁能帮我解释一下SQL多语言问题,关于varchar,nvarchar
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[mdata]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[mdata]
GO
CREATE TABLE [dbo].[mdata] (
[id] [int] IDENTITY (1, 1) NOT NULL ,
[name] [varchar] (8) COLLATE Chinese_PRC_CI_AS NULL ,
[nname] [nvarchar] (8) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO
--------比较nvarchar 和 varchar长度问题-------------
--"业务类型d" 太长,失败
--insert mdata(name,nname) values(N'业务类型d','业务类型')
-- succeed
insert mdata(name,nname) values(N'业务类型','业务类型业务类型')
-------比较SQL拼写对数据影响问题---------------------
insert mdata(name,nname) values('业务类型','业务类型')
insert mdata(name,nname) values('业务类型',N'业务类型')
insert mdata(name,nname) values(N'业务类型','业务类型')
insert mdata(name,nname) values(N'业务类型',N'业务类型')
insert mdata(name,nname) values('YWLXYWLX','YWLXYWLX')
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~``
--虽然第一个name字段是varchar,和第二个字段是nvarchar,上面5个insert语句都能成功
--且下面的比较查询语句也都能查处上面的值。
--
--谁解释一下在sql中存的是什么码(varchar,nvarchar),
--在下面的查询语句中能查询出认为内容(好像和编码无关),SQL语句又是在什么时候被处理的。
--我用的是中文SQL2000,其他环境也会这样么?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~``
select * from mdata where name = nname
select len(name), len(nname) from mdata where name = nname
select * from mdata where name = N'业务类型'
select * from mdata where nname = '业务类型'