我有一个带有排序规则SQL_Latin1_General_CP1_CI_AS的数据库。在那个数据库中,我有一个varchar字段。该数据库中有一行,字符串为“ó”(代码页1252中为单个字符243)。我有一个简单的ASP页面,将代码页设置为65001,读取该行(使用adodb),并将其发送到浏览器。如果“非unicode程序的当前语言”设置为英语,一切正常。如果我将其更改为俄语并浏览到该页面,我会看到“o”。我可以在服务器端的asp页面设置一个断点,看起来ado正在返回“o”而不是“ó”。
为什么“非unicode程序的当前语言”很重要?数据库具有数据并针对正确的代码页进行配置。我认为内部ADO和VBScript将所有内容存储为unicode。似乎在某个地方字符串被转换为“非unicode程序的当前语言”中指定的代码页,但即使这样也没有多大意义,因为我希望看到“?”而不是“o”(但我真的不明白什么处理从一个代码页到另一个代码页的转换以及它使用的规则)。
我知道将列更改为nvarchar可能有所帮助,但这并不能解释为什么会发生这种情况。
(编辑) 我理解为什么“ó”被转换为“o”。 Windows Best Fit http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WindowsBestFit/bestfit1251.txt
仍然试图弄清楚如何将代码页1252字符串从SQL中删除并进入VBScript而不会丢失。