ODBC中的Catalog和Schema名称是否区分大小写?

时间:2011-08-10 01:22:09

标签: odbc

据我所知(如果我错了,请纠正我),ODBC表名称不区分大小写。另一方面,一些谷歌搜索让我无法确定目录和模式名称是否区分大小写。

有人可以链接到这个规范吗?

1 个答案:

答案 0 :(得分:3)

您不应该依赖ODBC中不区分大小写的表名。您可以使用ODBC SQLGetInfo调用来告诉您它们是否区分大小写以及它们是大写还是小写。一些数据库/驱动程序在引用表时保持不变。

在MS SQL Server中,您将找到不区分大小写的表名,但在Oracle中,您不会:

create table "fred" (a integer)
insert into "fred" values (1);
select * from fred
[S0002][unixODBC][Oracle][ODBC][Ora]ORA-00942: table or view does not exist
select * from "fred"
+-----------------------------------------+
| A                                       |
+-----------------------------------------+
| 1                                       |
+-----------------------------------------+
select * from "FRED"
[S0002][unixODBC][Oracle][ODBC][Ora]ORA-00942: table or view does not exist

Oracle实际上做的是大写的不带引号的表名:

SQL> create table fred (a integer)
SQLRowCount returns -1
SQL> insert into fred values (1)
SQLRowCount returns 1
SQL> select * from fred
+-----------------------------------------+
| A                                       |
+-----------------------------------------+
| 1                                       |
+-----------------------------------------+
SQLRowCount returns -1
1 rows fetched
SQL> select * from "FRED"
+-----------------------------------------+
| A                                       |
+-----------------------------------------+
| 1                                       |
+-----------------------------------------+
SQLRowCount returns -1
1 rows fetched
SQL> select * from "fred"
[S0002][unixODBC][Oracle][ODBC][Ora]ORA-00942: table or view does not exist

这同样适用于架构和目录名称。查看SQLGetInfo,您将看到驱动程序可以告诉您它的作用。查找SQL_IDENTIFIER_CASE和SQL_IDENTIFIER_QUOTE_CHAR。

http://msdn.microsoft.com/en-us/library/ms711681(v=vs.85).aspx

请注意“因为SQL-92中的标识符永远不区分大小写,所以严格符合SQL-92(任何级别)的驱动程序永远不会返回支持的SQL_IC_SENSITIVE选项。”。