据我所知(纠正我,如果我错了),在ODBC表名不区分大小写。另一方面,一些谷歌搜索使我无法找到目录和模式名称是否区分大小写。ODBC中的Catalog和Schema名称是否区分大小写?
任何人都可以链接到这个规范?
据我所知(纠正我,如果我错了),在ODBC表名不区分大小写。另一方面,一些谷歌搜索使我无法找到目录和模式名称是否区分大小写。ODBC中的Catalog和Schema名称是否区分大小写?
任何人都可以链接到这个规范?
不应该依赖ODBC中不区分大小写的表名。您可以使用ODBC SQLGetInfo调用,告诉您它们是否区分大小写以及它们是大写还是小写。有些数据库/驱动程序在引用表格时会维持大小写。
在MS SQL Server,你会发现不区分大小写的表名,但在甲骨文不会:
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
什么甲骨文实际上做的是大写不带引号的表名:
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选项。”