【问题标题】:How can I convert an MDB (Access) file to MySQL (or plain SQL file)?如何将 MDB (Access) 文件转换为 MySQL(或纯 SQL 文件)?
【发布时间】:2011-08-09 00:23:02
【问题描述】:

是否可以从 Microsoft Access 数据库创建 SQL 命令转储?我希望将此 MDB 文件转换为 MySQL 数据库进行导入,这样我就不必经过 CSV 步骤。

我希望 MSSQL 转储文件仍然包含可用的 SQL 命令,但我对 MSSQL 一无所知,请告诉我。

【问题讨论】:

    标签: mysql sql ms-access import dump


    【解决方案1】:

    你想把mdb转成mysql(直接转mysql或者mysql dump)?

    试试名为Access to MySQL 的软件。

    Access to MySQL 是一个将 Microsoft Access 数据库转换为 MySQL 的小程序。

    • 向导界面。
    • 将数据直接从一台服务器传输到另一台服务器。
    • 创建转储文件。
    • 选择要转移的表。
    • 选择要转移的字段。
    • 传输受密码保护的数据库。
    • 支持共享安全和用户级安全。
    • 可选的索引传输。
    • 可选择传输记录。
    • 可选传输字段定义中的默认值。
    • 识别和传输自动编号字段类型。
    • 命令行界面。
    • 易于安装、卸载和升级。

    请参阅上述链接以获取带有屏幕截图的分步教程。

    【讨论】:

    • 更新:免费版本已经瘫痪。 search&replace 虽然适用于较小的迁移..
    • 顺便说一下,它适用于新的 .accdb 访问格式
    • 只需补充一点,当前版本的程序运行不正常(至少这是我能够得出的结论)。它没有正确转储文件(当您要导入时会导致很多错误)并且直接连接到数据库(即使在本地主机上)也不起作用。
    • 如果您有 64 位操作系统,则需要 32 位 ODBC 驱动程序。 dev.mysql.com/downloads/connector/odbc
    【解决方案2】:

    如果您可以访问安装了 mdbtools 的 linux 机器,则可以使用此 Bash shell 脚本(另存为 mdbconvert.sh):

    #!/bin/bash
    
    TABLES=$(mdb-tables -1 $1)
    
    MUSER="root"
    MPASS="yourpassword"
    MDB="$2"
    
    MYSQL=$(which mysql)
    
    for t in $TABLES
    do
        $MYSQL -u $MUSER -p$MPASS $MDB -e "DROP TABLE IF EXISTS $t"
    done
    
    mdb-schema $1 mysql | $MYSQL -u $MUSER -p$MPASS $MDB
    
    for t in $TABLES
    do
        mdb-export -D '%Y-%m-%d %H:%M:%S' -I mysql $1 $t | $MYSQL -u $MUSER -p$MPASS $MDB
    done
    

    要调用它,只需像这样调用它:

    ./mdbconvert.sh accessfile.mdb mysqldatabasename
    

    它将导入所有表和所有数据。

    【讨论】:

    • 感谢一百万的脚本。只是两个提示,我想你可以删除 AWKGREP 变量,我已经将选项 -b strip -H 添加到 mdb-export 因为我在 mdb 中有一些奇怪的 OLE 对象,并且因为之前加载了标头。我想在某些情况下-b octal 也可以,但是在将二进制数据加载到 mysql 时遇到了问题。
    • 我正在导入名称中带有空格的表,但这对我不起作用。我必须在 shebang 之后添加IFS=$(echo -en "\n\b")
    • 太棒了!设法在 Mac 上将 MDB 导出到 MySQL。我唯一偶然发现的是带有空格的表名,但通过放置: $MYSQL -u $MUSER -p$MPASS $MDB -e "DROP TABLE IF EXISTS `$t`" 和 mdb-export -D '%Y- %m-%d %H:%M:%S' -I mysql $1 "$t" | $MYSQL -u $MUSER -p$MPASS $MDB 而且,不幸的是,必须创建一个带有表名的数组,因为 'for t in $TABLES' 用空格标记。谢谢!!
    • 嗨...我试图让它与名称中包含 % 符号的数据库一起使用。我是 MySQL 新手,但看起来这些是字符串匹配的通配符。关于如何逃脱它们的任何想法? \%\\% 不是为我做的...
    • { echo ‘set autocommit=0;’; mdb-export ... ;echo ‘commit;’ } | mysql 可能更快
    【解决方案3】:

    我修改了 Nicolay77 的脚本,将数据库输出到标准输出(unix 脚本的常用方式),这样我就可以将数据输出到文本文件或通过管道将其输出到我想要的任何程序。生成的脚本更简单一些,并且运行良好。

    一些例子:

    ./mdb_to_mysql.sh database.mdb > data.sql
    
    ./mdb_to_mysql.sh database.mdb | mysql destination-db -u user -p
    

    这是修改后的脚本(保存到 mdb_to_mysql.sh)

    #!/bin/bash
    TABLES=$(mdb-tables -1 $1)
    
    for t in $TABLES
    do
        echo "DROP TABLE IF EXISTS $t;"
    done
    
    mdb-schema $1 mysql
    
    for t in $TABLES
    do
        mdb-export -D '%Y-%m-%d %H:%M:%S' -I mysql $1 $t
    done
    

    【讨论】:

    【解决方案4】:

    OSX 用户可以关注使用mdbtools 实用程序的 Nicolay77mikkom。您可以通过 Homebrew 安装它。只需安装你的自制软件,然后去

    $ brew install mdbtools
    

    然后创建这些家伙描述的脚本之一并使用它。我用的是mikkom的,把我所有的mdb文件都转换成sql了。

    $ ./to_mysql.sh myfile.mdb > myfile.sql
    

    (顺便说一句,其中包含超过 1 个表)

    【讨论】:

    • 较新版本的 macOS/Homebrew 命令是brew install mdbtools
    • 不幸的是,mdbtools 没有正确转义斜线,并且似乎没有维护:github.com/brianb/mdbtools/issues/89
    • 正如@JohnMellor 提到的,我还收到以下错误:ERROR at line xxxx: Unknown command '\"'. 我可以通过替换所有出现在\"" 中的\" 来解决它,这样就成功了。
    猜你喜欢
    • 1970-01-01
    • 2019-05-10
    • 2015-08-30
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-17
    相关资源
    最近更新 更多