sql-server - SQL Server : Must numbers all be specified with latin numeral digits?

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

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

0123456789

用其他字母表示 SQL Server 数字是否有效?

罗塞塔石碑:

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

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

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

这让 SQL Server 很不舒服。

我知道服务器/数据库有其定义的代码页和区域设置,但那是针对字符串的。

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

最佳答案

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

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

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

关于sql-server - SQL Server : Must numbers all be specified with latin numeral digits?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2501487/

相关文章:

c# - 如何从 SqlDataReader uniqueidentifier 获取 Guid

sql - 一个模式的存储过程可以访问其他模式的表

sql - TSQL:通过自定义身份创建自定义身份吗? (管理数据库修订)

sql-server - ADOQuery 正在绕过而不是删除触发器

SQL 更新不适用于 Group by

sql - 下一个 :jdbc How to allow multiple statements for SQL Server

c# - 如何获取存储过程的返回值

sql-server - SSRS 2008 自动换行问题

sql-server-2008 - SQL Server 2000 创建到 SQL Server 2008 的链接服务器

sql-server - 从 Windows Phone 访问桌面上的文件和数据库