【问题标题】:SQL Server: Must numbers all be specified with latin numeral digits?SQL Server:数字必须全部用拉丁数字指定吗?
【发布时间】:2010-03-23 16:01:30
【问题描述】:

SQL Server 是否期望用拉丁字母中的数字指定数字,例如:

0123456789

以其他字母形式给出 SQL Server 数字是否有效?

罗塞塔斯通:

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

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

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

这会导致 SQL Server 出现问题。

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

SQL Server 将使用活动(或每次登录指定)区域设置来解释数字,还是必须用拉丁数字指定所有数值?

【问题讨论】:

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


    【解决方案1】:

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

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

    允许客户端传递非拉丁数字听起来很危险(我不确定您的数据传输的路径,但如果用户的本地化输入没有被测试为数字,则似乎存在 SQL 注入的可能性。

    【讨论】:

    • 字符“٢”是数字。因此,根据您使用的 IsNumeric() 函数,它可能/将/应该通过。
    猜你喜欢
    • 2018-08-21
    • 1970-01-01
    • 2020-10-26
    • 1970-01-01
    • 2017-08-31
    • 2020-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多