据我所知(如果我错了,请纠正我),ODBC表名称不区分大小写。另一方面,一些谷歌搜索让我无法确定目录和模式名称是否区分大小写。
有人可以链接到这个规范吗?
答案 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选项。”。