8.1.3 配置目录和模式支持

许多关系数据库引用 CATALOG 和 SCHEMA 的方式并不直接对应于 MySQL 引用数据库的方式。它既不是 CATALOG 也不是 SCHEMA。通常,目录是模式的集合,因此完全限定名称类似于 catalog.schema.table.column。在 MySQL ODBC 驱动程序的历史上,CATALOG 和 DATABASE 是用于同一事物的两个名称。同时,SCHEMA 经常被用作 MySQL 数据库的同义词。这表明 CATALOG 等于 SCHEMA,这是不正确的,但在 MySQL Server 上下文中它们是同一回事。

在 ODBC 中,当引用数据库对象(例如表)时,可以使用模式和目录。开发人员对如何解释这些模式和目录概念的期望不同,因此这就是同时存在 NO_CATALOG 和 NO_SCHEMA 选项的原因;涵盖所有这些期望,并允许明确禁止将 ODBC 函数参数解释为 CATALOG 或 SCHEMA。

连接器/ODBC 驱动程序不允许同时使用目录和架构功能,因为这会导致命名不受支持。但是,某些软件(例如 MS SQL Server)可能会尝试通过链接的服务器对象执行此操作。这就是为什么 Connector/ODBC 8.0.26 向 MySQL ODBC 驱动程序添加了一个 NO_SCHEMA 选项以将模式报告为不受支持,这已经针对具有 NO_CATALOG 选项的目录完成了。使用 NO_SCHEMA 会导致驱动程序通过 SQLGetInfo() 调用报告不支持的架构操作。因此,客户端软件不会尝试以 catalog.schema.table 的形式访问表,而是以 catalog.table 的形式访问。

表 8.1 连接器/ODBC NO_CATALOG 和 NO_SCHEMA 组合

NO_CATALOG NO_SCHEMA 说明和注意事项
true true 驱动程序不支持目录或架构。
false true 支持目录并将其解释为 MySQL 数据库名称,指定模式会触发错误。
true false 模式受支持并解释为 MySQL 数据库名称,指定目录会触发错误。
false false catalogs 和 schema 都支持,但同时指定两者会出错。如果仅指定目录或仅指定架构,则将其解释为 MySQL 数据库名称。