为什么ASCII T-SQL函数在使用非英文字符时返回一个数字?

时间:2016-05-19 19:39:38

标签: sql-server-2008 ascii non-ascii-characters

我知道<%= javascript_tag "GetMarineWeather((#{@latitude.to_json}, #{@longitude.to_json}));" %> (没有扩展名)不理解非英文字符,但为什么我这样说:

ASCII

该函数返回209.它是使用扩展名,还是它发生了什么?谢谢你的回答。

1 个答案:

答案 0 :(得分:1)

209 的数字 ACP代码值 Ñ 拉丁大写字母N,其中Tilde 对任何{{1}有效},ACP1250ACP1252ACP1254ACP1257 encodings(请参阅下面的补充说明)。

阅读MSDN参考(适用于:SQL Server,从2008年开始):

  

ASCII (Transact-SQL)返回的 ASCII代码值   字符表达式的最左边的字符。

这有点简洁,但它是否简洁,精确?我不这么认为:最初基于英文字母,ASCII将 128 指定的字符编码为 七位 整数the ASCII chart所示。但是,ACP1258返回的 209 数字显然是 8位 整数

实际上ASCII('Ñ')函数返回字符表达式最左边字符的 ACP代码值(请参阅ACP: Acronym for the Windows (ANSI) code page in use。)<登记/> 为了证明,让我们在SQL Server(Transact-SQL)中使用下一个效果:the ASCII function is the opposite of the CHAR function。 MSDN参考说明了一点:

  

CHAR (Transact-SQL)将int ASCII代码转换为字符。

     

语法

ASCII
     

参数

     

CHAR ( integer_expression ) 0到255之间的整数。 NULL是   如果整数表达式不在此范围内,则返回。

BTW,所有这些差异来自臭名昭着的术语混淆,即慷慨地滥用(交换)诸如integer_expressionASCIIANSI或甚至像CP之类的术语,{ {1}},UNICODE等等。

补充:代码 209 的Windows ANSI字符表(下表来自我的小UTF-16脚本):

UCS-2