DataLength问题 DECLARE @str varchar(200)SET @str='中国汉字' select datalength(@str)我期望的结果是8,为什是4呢,datalength不是算字节数吗? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 DECLARE @str varchar(200) SET @str='中国汉字' select datalength(@str) ,len(@str)/* ----------- -----------8 4(1 行受影响)*/ 没有啊,我用len和Datalength都是4备注:我用的是SQL server 2005 DECLARE @str varchar(200) SET @str=N'中国汉字' select datalength(@str) select len(@str)/*-----------6(1 row(s) affected)-----------4(1 row(s) affected)我的居然是6 =_=!*/ 我在查询分析器里这样写的啊:DECLARE @str varchar(200)SET @str='中国汉字' select datalength(@str) as byteNumberResults----------------------------------------------- byteNumber1 4 可能和sql字符集有关?SELECT CONVERT (varchar, SERVERPROPERTY('collation'))/*------------------------------Chinese_PRC_CI_AS*/--加个N试试?DECLARE @str varchar(200) SET @str=N'中国汉字' select datalength(@str) SELECT CONVERT (varchar, SERVERPROPERTY('collation'))我的是----------------------------SQL_Latin1_General_CP1_CI_AS DECLARE @str varchar(200) SET @str=N'中国汉字' select datalength(@str) 加了一个N结果还是4当然nvarchar的话,结果就是8了 估计是字符集的问题吧。你的是拉丁语系,存取汉字很容易造成乱码……还是全部用nvarchar保险 显示为4,再DECLARE @str varchar(200)SET @str='中国汉字'select @str看看是不是??就知道了。 高手,隐藏的够深的啊select @str 结果是???那么改变排序规则就可以了? 对于现已存放的数据,改变排序规则,没有什么效果,因为入库时,编码时找不到相应字符编码,就已是乱码了(关健时入库时是否在此规则下找到了相应的编码并插入,找不到就以?代替)。对于新存放的数据是可以的。比如你将库或列排序规则改为 chinese_rpc_ci_as 那么再执行,将会是 8不同的排序规则就会支持varchar类型里插入相应的字符编码。最好是用nvarchar.因为有可能,你改成chinese... 如果存德文,韩文,日文 ,同样它们会乱码。反过来,你应用德文,日文等相应的规则,存他们不乱码,而中文又会乱码。nvarchar是通用的解决之道。如果你的系统不涉及多语言环境, 那么可以考滤用varchar,并指定相应的排序规则。 sql语句怎么执行bat文件 郁闷,没分了,希望有人回答。bulk insert语句问题 详见内容说明 合并两个表的问题 求高手帮我设计一张表 sql数据库多表查询并排序选取前10条记录 mssql7安装问题?在线等! 如何从数据库的表的记录中过渡出相同的记录??? 如何取数据库表的某字段内的任意位置的字符?如.... Sql server问题,请高手赐教 有关联赛sql实现,高分请教高手 帮我select这个,在线等
----------- -----------
8 4(1 行受影响)
*/
备注:我用的是SQL server 2005
select datalength(@str)
select len(@str)
/*
-----------
6(1 row(s) affected)
-----------
4(1 row(s) affected)
我的居然是6
=_=!
*/
DECLARE @str varchar(200)SET @str='中国汉字' select datalength(@str) as byteNumberResults
-----------------------------------------------
byteNumber
1 4
SELECT CONVERT (varchar, SERVERPROPERTY('collation'))
/*------------------------------
Chinese_PRC_CI_AS
*/--加个N试试?
DECLARE @str varchar(200) SET @str=N'中国汉字' select datalength(@str)
----------------------------
SQL_Latin1_General_CP1_CI_AS
加了一个N结果还是4当然nvarchar的话,结果就是8了
你的是拉丁语系,存取汉字很容易造成乱码……
还是全部用nvarchar保险
看看是不是??就知道了。
select @str
结果是???
那么改变排序规则就可以了?