【问题标题】:How to create table via ODBC in ansi sql compliant way?如何以符合 ansi sql 的方式通过 ODBC 创建表?
【发布时间】:2017-10-20 14:17:40
【问题描述】:

我们想将我们的数据导出到未知的 sql 数据库。它可以是 mysql、mssql、postgresql。即使是简单的事情也会产生问题。例如,在 MySQL 中,标识符的双引号仅在 ANSI_QUOTES = true(默认为 false)时才有效。 mssql 中的双引号仅在 QUOTED_IDENTIFIER = ON 时有效。还有一些关于 MySQL 如何解释 sql 兼容代码的问题。例如,有时它会忽略显式指定的约束名称并根据其规则设置名称。 MS SQL 也不支持名为 BLOB 的数据类型。是否有一种智能的方式来进行符合 sql 的 odbc 导出?或者我们必须以某种方式查询数据库名称并以使其与 sql 兼容的方式配置连接?

【问题讨论】:

    标签: sql odbc


    【解决方案1】:

    对于引用标识符,您可以使用 SQLGetInfo 并询问 SQL_IDENTIFIER_QUOTE_CHAR

    【讨论】:

      【解决方案2】:

      SQLGetInfo 可用于查询 SQL_IDENTIFIER_QUOTE_CHAR 并在我的配置中为 sql server 返回 "(正如 Andrey Belykh 在另一个简短回答中指出的那样)。

      我使用 SQLGetInfoSQL_DBMS_NAME 参数来获取 dbms 名称。如果是 sql server,它会返回“Microsoft SQL Server”。然后我可以应用 sql server 特定的代码。 SQL server 存储blob 的方式是通过filestream,但是它有局限性(必须使用Windows 身份验证才能访问文件)。因此,如果不支持 blob(也可以通过 SQLGetTypeInfo 检查),我使用 varbinary(max) 限制为 2 GB(这对我来说没问题,我忽略了较大的文件)。默认情况下我不能使用 varbinary,因为在 mysql 中它被限制为 65KB。所以需要AFAIK自定义代码来支持不同的dbms。

      【讨论】:

        猜你喜欢
        • 2017-12-26
        • 2015-11-25
        • 2012-04-19
        • 1970-01-01
        • 1970-01-01
        • 2019-07-14
        • 1970-01-01
        • 2013-05-02
        相关资源
        最近更新 更多