2017-10-20 60 views
0

我们想将我们的数据导出到未知的sql数据库。它可以是mysql,mssql,postgresql。甚至简单的事情都会产生问题。例如,在MySQL中,标识符的双引号仅在ANSI_QUOTES = true时起作用(默认为false)。在QUOTED_IDENTIFIER = ON时,mssql中的双引号仅适用。还有一些关于MySQL如何解释符合sql规范的代码的问题。例如,有时它会忽略明确指定的约束名称并根据其规则设置名称。 MS SQL也不支持名为BLOB的数据类型。有没有一种聪明的方式来执行sql兼容odbc导出?或者,我们必须以某种方式查询数据库名称和配置连接,使其与SQL兼容?如何通过ODBC以ansi sql兼容的方式创建表?

回答

0

的SQLGetInfo可以用来查询SQL_IDENTIFIER_QUOTE_CHAR,它在我的配置返回“的SQL Server(在另一所指出的安德烈Belykh简短的回答)。

我用的SQLGetInfo与SQL_DBMS_NAME参数来获取数据库管理系统的名字。在SQL Server的情况下,它会返回“的Microsoft SQL Server”,然后我可以申请SQL Server特定的代码。 SQL服务器的存储方式blob是通过filestream,但它有局限性(必须使用Windows身份验证才能访问文件)。因此,如果不支持Blob(也可以通过SQLGetTypeInfo检查),我使用varbinary(max),它受2 GB限制(这对我来说没什么问题,我忽略了更大的文件)。默认情况下,我不能使用varbinary,因为在mysql中它被限制为65KB。所以AFAIK自定义代码需要支持不同的dbms。

0

专门为引用标识符可以使用的SQLGetInfo并要求SQL_IDENTIFIER_QUOTE_CHAR

+0

感谢您指出该功能。 – pusheax

相关问题