【问题标题】:Why ASCII T-SQL function return a number when use non english characters?为什么 ASCII T-SQL 函数在使用非英文字符时返回一个数字?
【发布时间】:2016-05-19 19:39:38
【问题描述】:

我知道ASCII(不带扩展名)看不懂非英文字符,但是为什么我放这个的时候:

SELECT ASCII('Ñ')

函数返回 209。是使用了扩展,还是发生了什么?感谢您提前回答。

【问题讨论】:

  • 大量使用“ASCII”一词是错误的。虽然人们可能不愿意重命名函数或引入新函数,但至少应该更新文档!很多时候,ASCII 是字符代码,就像面巾纸是面巾纸一样。如果它是商标,它将在genericized trademarks 列表中。

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


【解决方案1】:

209 数字是 ÑACP 代码值 带波浪号的拉丁文大写字母 N 适用于 ACP1250、@987654329 中的任何一个@、ACP1254ACP1257ACP1258 encodings(见下文补充)。

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

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

这有点简洁,但它是否简洁精确?我不这么认为:ASCII 最初基于英文字母表,将 128 指定字符编码为 七位 整数,如@987654323 所示@。然而,ASCII('Ñ') 返回的 209 数字显然是一个 八位 整数。

其实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 码 转换为字符。

语法

CHAR ( integer_expression )  

参数

integer_expression 是一个从 0 到 255 的整数。 NULL 是 如果整数表达式不在此范围内,则返回。

顺便说一句,所有这些差异都源于臭名昭著的术语混淆,即大量滥用(互换)诸如ASCIIANSICP 之类的术语,甚至诸如UNICODEUTF-16UCS-2 等术语。等等

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

ACP     Hex  codepoint  #Description
---     ---  ---------  ------------ 
CP1250  0xD1    0x0143  #LATIN CAPITAL LETTER N WITH ACUTE
CP1251  0xD1    0x0421  #CYRILLIC CAPITAL LETTER ES
CP1252  0xD1    0x00D1  #LATIN CAPITAL LETTER N WITH TILDE
CP1253  0xD1    0x03A1  #GREEK CAPITAL LETTER RHO
CP1254  0xD1    0x00D1  #LATIN CAPITAL LETTER N WITH TILDE
CP1255  0xD1    0x05C1  #HEBREW POINT SHIN DOT
CP1256  0xD1    0x0631  #ARABIC LETTER REH
CP1257  0xD1    0x0143  #LATIN CAPITAL LETTER N WITH ACUTE
CP1258  0xD1    0x00D1  #LATIN CAPITAL LETTER N WITH TILDE

【讨论】:

    猜你喜欢
    • 2023-03-09
    • 2021-12-22
    • 2023-04-01
    • 1970-01-01
    • 2014-08-19
    • 2012-03-13
    相关资源
    最近更新 更多