【发布时间】:2014-05-31 09:50:44
【问题描述】:
我实际上有一个基于 MySQL 的应用程序,其架构基于 InnoDB(有约束...) 我的同事需要导入这个架构,所以我将我的架构导出到 SQL 文件中。
例如:
DROP TABLE IF EXISTS `admins`;
CREATE TABLE `admins` (
`id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
`username` varchar(45) NOT NULL,
`password` varchar(45) NOT NULL,
`email` varchar(45) DEFAULT NULL,
`creation_date` datetime NOT NULL,
`close_date` datetime DEFAULT NULL,
`close_reason` varchar(45) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;
现在,我想要一个跨数据库应用程序,所以:
- 我尝试在 PostgreSQL 中导入我以前的 sql 文件,但没有成功,我的 SQL 文件是 mysql 相关的(例如使用`字符...)
- 我尝试使用 mysqldump 和兼容模式“--compatible=ansi”导出我的架构,我的目标是:拥有一个与所有主要 SGBD 兼容的通用 sql 文件。但它不起作用:PostgreSQL 返回有关 synthax 的错误
compatible=ansi 返回:
DROP TABLE IF EXISTS "admins";
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE "admins" (
"id" smallint(5) unsigned NOT NULL AUTO_INCREMENT,
"username" varchar(45) NOT NULL,
"password" varchar(45) NOT NULL,
"email" varchar(45) DEFAULT NULL,
"creation_date" datetime NOT NULL,
"close_date" datetime DEFAULT NULL,
"close_reason" varchar(45) DEFAULT NULL,
PRIMARY KEY ("id")
);
/*!40101 SET character_set_client = @saved_cs_client */;
我什至尝试使用兼容性=postgresql 导出:
DROP TABLE IF EXISTS "admins";
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE "admins" (
"id" smallint(5) unsigned NOT NULL,
"username" varchar(45) NOT NULL,
"password" varchar(45) NOT NULL,
"email" varchar(45) DEFAULT NULL,
"creation_date" datetime NOT NULL,
"close_date" datetime DEFAULT NULL,
"close_reason" varchar(45) DEFAULT NULL,
PRIMARY KEY ("id")
);
/*!40101 SET character_set_client = @saved_cs_client */;
但也没有用...
我知道有工具可以将 MySQL 架构转换为 PostgreSQL 架构,但这不是目标...
我的问题:是否有可能只有一个与 MySQL、PostgreSQL、SQLite 兼容的 SQL 文件......并且不为每个 SGBD 维护一个 SQL 文件?
谢谢
【问题讨论】:
标签: mysql sql sql-server database postgresql