SQL Server:必须使用拉丁数字数字指定所有数字吗?

时间:2010-03-23 16:01:30

标签: sql-server sql-server-2008 sql-server-2000 internationalization locale

SQL服务器是否期望使用拉丁字母表中的数字指定数字,例如:

0123456789

在其他字母表中提供SQL Server数字是否有效?

Rosetta Stone:

Latin:   01234567890
Arabic:  ٠١٢٣٤٥٦٧٨٩
Bengali: ০১২৩৪৫৬৭৮৯

我知道客户端(ADO)将使用当前文化将8位字符串转换为16位unicode字符串。但客户端也使用他们当前的文化将数字转换为字符串,例如:

SELECT * FROM Inventory
WHERE Quantity > ২৩৪,৭৮

这会使SQL Server失败。

我知道服务器/数据库有它定义的代码页和语言环境,但这是用于字符串的。

SQL Server是使用活动(或指定的每个登录)语言环境解释数字,还是必须使用拉丁数字数字指定所有数值?

1 个答案:

答案 0 :(得分:3)

据我所知,T-SQL需要拉丁数字,小数点指定为.

ISNUMERIC()和CAST()都不能成功测试这些数字,因此使用这些字符的数字常量也不起作用。

允许客户端传递非拉丁数字听起来非常混乱(我不确定您的数据传输路径,但是如果用户的本地化输入未被测试为数字,则似乎有可能进行SQL注入。