SQL Server:数字都必须用拉丁数字指定吗?
SQL Server 是否期望使用拉丁字母表中的数字来指定数字,例如:
0123456789
使用其他字母表中的 SQL Server 数字是否有效?
Rosetta Stone:
Latin: 01234567890
Arabic: ٠١٢٣٤٥٦٧٨٩
Bengali: ০১২৩৪৫৬৭৮৯
我知道客户端 (ADO) 会使用当前区域性将 8 位字符串转换为 16 位 unicode 字符串。但客户端也会使用其当前的区域性将数字转换为字符串,例如:
SELECT * FROM Inventory
WHERE Quantity > ২৩৪,৭৮
这会引发 SQL Server 的异常。
我知道服务器/数据库有其定义的代码页和区域设置,但那是针对字符串的。
SQL Server 是否会使用活动的(或每次登录指定的)区域设置来解释数字,还是必须使用拉丁数字来指定所有数值?
Does SQL server expect numbers to be specified with digits from the latin alphabet, e.g.:
0123456789
Is it valid to give SQL Server digits in other alphabets?
Rosetta Stone:
Latin: 01234567890
Arabic: ٠١٢٣٤٥٦٧٨٩
Bengali: ০১২৩৪৫৬৭৮৯
i know that the client (ADO) will convert 8-bit strings to 16-bit unicode strings using the current culture. But the client is also converting numbers to strings using their current culture, e.g.:
SELECT * FROM Inventory
WHERE Quantity > ২৩৪,৭৮
Which throws SQL Server for fits.
i know that the server/database has it's defined code page and locale, but that is for strings.
Will SQL Server interpret numbers using the active (or per-login specified) locale, or must all numeric values be specifid with latin numeral digits?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
据我所知,T-SQL 需要拉丁数字,并将小数点指定为
.
。ISNUMERIC() 和 CAST() 都无法成功测试这些数字,因此使用这些字符的数字常量也不起作用。
允许客户端传递非拉丁数字听起来是危险的混杂(我不确定数据传输的路径,但如果用户的本地化输入未经过数字测试,则似乎存在 SQL 注入的可能性。
From what I can tell, T-SQL requires latin digits, and decimal points specified as
.
.Neither ISNUMERIC() nor CAST() can successfully test these digits, so a numeric constant using those characters would not work either.
Allowing a client to pass non-Latin digits sounds dangerously promiscuous (I'm not sure what path your data travels, but there seems to be a potential for SQL injection if user's localized input isn't being tested to be numeric.