【问题标题】:Migrating from MySQL to DB2 iSeries从 MySQL 迁移到 DB2 iSeries
【发布时间】:2014-11-18 14:40:43
【问题描述】:

所以我不希望这个帖子被标记为垃圾邮件,因为之前的帖子是关于这个主题的,所以我将解释我到目前为止所做的事情,我的问题是并询问是否有任何解决方案。

我的笔记本电脑上有一个 MySQL 数据库,需要迁移到 iSeries 上的 DB2。我正在使用一个工具,由于垃圾邮件问题,我不会说是哪一个,它允许我在我的 MySQL 数据库中“复制”一个表并将其“粘贴”到我的 DB2 数据库中。

我遇到的问题是因为表名和列名在 MySQL 数据库中包含空格,所以该工具在粘贴时失败。我通过用下划线替换空格来更改一个表来确认这一点,并且副本运行良好。我有一百多个表需要复制,并且不想手动编辑每个表和列名。

有没有办法在 MySQL 表名和列中用下划线全局替换空格?

还有其他想法吗?我也在研究一种方法来强制该工具创建的查询将对象名称括在引号中,但到目前为止还没有运气。

感谢您提供的任何帮助和建议。

【问题讨论】:

  • 理论上,您应该能够将数据库导出到文本文件。查找并替换所有空格,然后重新创建数据库。
  • 根据文档,MySQL 不支持不带引号的标识符中的空格。所以CREATE TABLE MY TABLE 无效。 OTOH,CREATE TABLE "MY TABLE" 在 MySQL 和 DB2 for i 中均有效。所以我不明白你的问题......
  • 轻微修正,在 MySQL 默认CREATE TABLE `MY TABLE` 是有效的。您需要 SET sql_mode='ANSI_QUOTES' 才能获得支持 CREATE TABLE "MY TABLE"

标签: mysql db2 ibm-midrange database-migration


【解决方案1】:

由于 Stack Overflow 旨在帮助解决编程问题,我将忽略所选工具的缺陷问题,并针对更大的问题提出编程解决方案 - DB2 不允许在表名和列名中使用空格。您确实要求任何建议...

编写读取 MySQL 目录表的代码。在 DB2 中,它们是 SYSTABLES、SYSVIEWS、SYSINDEXES、SYSCOLUMNS 等。阅读 SYSTABLES 并将其用作其余代码的“主要”源。检查表名;如果它有一个嵌入的空间,用下划线替换它。使用 SYSCOLUMNS 生成一个 CREATE TABLE 语句,该语句将创建新表(在新的 MySQL 数据库中?) - 还执行空格以替换下划线。发出 CREATE TABLE 后,生成一条 SQL 语句,将旧表中的列插入新表;再次使用空格来强调替换。填充新表后,生成用于 CREATE VIEW、CREATE PROCEDURE、CREATE FUNCTION 等的 SQL 语句。

一般的想法是,您将使用与 DB2 for i 立即兼容的表、视图和列名称来完全重新创建 MySQL 数据库,以便您的工具可以做到这一点。

当然,如果您遇到这么多麻烦,那么在 IBM i 端直接创建 TABLE 等可能同样容易,而不是通过不是您需要的中间工具。

【讨论】:

  • DB2 确实允许使用空格,您只需引用表名。 create table "MY TABLE" (fld1 char (10)) OLSMIAMI 中的表 MY TABLE 已创建但未记录。
  • 是的,显然问题在于该工具不执行引用,因此他需要以一种或另一种方式在 MySQL 数据库中进行全局“扫描和替换”。
  • 这没有多大意义,因为 MySQL 也不允许不带引号的标识符......虽然默认引号是反引号......所以他可能需要SET sql_mode='ANSI_QUOTES'
猜你喜欢
  • 1970-01-01
  • 2014-08-03
  • 2023-03-05
  • 2021-10-08
  • 2011-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多