VARCHAR和NVARCHAR的LEN和DATALENGTH

时间:2015-06-05 09:31:51

标签: sql-server sql-server-2008-r2 varchar nvarchar datalength

阅读" What is the difference between char, nchar, varchar, and nvarchar in SQL Server?"我有一个问题。

我正在使用MS SQL Server 2008 R2

var lastValue;
setInterval(function() {
  var curValue = $('#test').html();
  if(lastValue !== curValue) {
    lastValue = curValue;
    // Do whatever it is you want to do with the new value here.
  }
});

返回

oldDivChange = divChange;
divChange = function(aArgs, callback) {
  oldDivChange(aArgs);

  var newValue = $('#test').html();
  callback(newValue);
};

为什么第二个DATALENGTH(C1)是12?

1 个答案:

答案 0 :(得分:2)

INSERT中,您要将文字从unicode转换为C1的中文代码页。很可能这个过程改变了文本,有些东西可能会丢失。

这是SQL Fiddle

您可以看到第二个字符3F中存储为varchar。您还可以看到最后一个字符也在3F中存储为varchar3F?的代码。当Windows尝试将文本从unicode转换为代码页并且某些字符无法在给定代码页中表示时,转换函数(很可能是WideCharToMultiByte)会为此类字符添加?

又一个例子。最后一个字符A94D中编码为varchar8C54编号为nvarchar。如果你在字符映射中查找它将显示这些代码(unicode和代码页):

character map

另见:

What does it mean when my text is displayed as Question Marks?

https://www.microsoft.com/middleeast/msdn/Questionmark.aspx

  

任何时候必须显示Unicode数据,它们可能在内部   使用WideCharToMultiByte API从Unicode转换。任何时候   字符无法在当前代码页上表示,它将是   用问号(?)代替。

这正是您在N'中华人民共和国'列中存储unicode文字varchar时发生的情况。 unicode文本将转换为多字节,并且某些字符无法在该代码页中表示,并且会被问号?替换。