MS Access to MySQL 转换帮助(巨表)

Posted

技术标签:

【中文标题】MS Access to MySQL 转换帮助(巨表)【英文标题】:MS Access to MySQL Conversion help (Gigantic table) 【发布时间】:2011-08-08 17:03:44 【问题描述】:

所以我在 MS Access (*.mdb) 中有这个包含大约 700 万条记录的巨大表,我想将其转换为更实用的 mysql 格式,并将其存储在我的网络服务器上。文件本身重 2GB。

问题是,由于表太大,我不能正常导出(Access说限制是65536条记录)

我尝试了一些第 3 方软件,但无济于事。

任何人都可以推荐一种干净的方式这样做,而不会损坏内部数据?

提前感谢您的帮助。

【问题讨论】:

或许尝试先迁移到 MS SQL Server,然后再迁移到 MySQL? 我没有这样的服务器,可惜... 你去:microsoft.com/sqlserver/en/us/editions/express.aspx 恐怕 78MB 对于我的手机供电不稳定的连接来说有点太多了。等我回家试试,谢谢你的帮助。 你用什么方法导出的?我并不认为 65,536 的限制适用于所有可用的导出方法。 【参考方案1】:

如果您还没有,请为 MySQL 安装 ODBC 驱动程序。最新版本在这里:Download Connector/ODBC

从 Windows ODBC 数据源管理器为您的 MySQL 服务器创建 DSN(数据源名称)。

然后从 Access 2003 中,在数据库窗口中选择您的表,然后从 Access 的主菜单中选择文件->导出。在“Export Table 'yourtablename' To ...”对话框中,从“Save as type”下拉列表(位于对话框底部)中选择“ODBC Databases()”。下一个对话框允许您指定 MySQL 将用于导出表的名称,它默认为 Access 表名称。单击确定后,您将看到另一个对话框“选择数据源”,您可以在其中为 MySQL 选择 DSN。在该对话框上单击“确定”后,您可能会再收到一个询问用户名和密码的信息。提供它们,然后单击“确定”。

希望您的餐桌能够顺利转移。但是,我从来没有用 MySQL 做过这个操作。它通过 ODBC 传输到 SQL Server 和 PostGreSQL 对我有用。所以我不明白为什么它也不能与 MySQL 一起使用。

此外,我从未尝试一次性导出 700 万条记录。如果它窒息,我们将不得不想出一个解决方法。

如果您使用的是 Access 2007 而不是 2003,请从功能区的“导出”部分开始寻找类似的选项。

我建议这种方法是因为我的印象是这种导出将是一次性交易,所以我认为 Access UI 导出方法会最简单。但是,您可以使用带有 ODBC DSN 的 DoCmd.TransferDatabase Method 对 VBA 代码执行基本相同的操作。

另一种选择是在 MySQL 中创建兼容的表结构,在 Access 中创建指向 MySQL 目标表的链接(再次使用您的 DSN),然后从 Access 运行“追加查询”:

INSERT INTO link_to_mysql_table (field1, field2, field3, etc)
SELECT field1, field2, field3, etc
FROM access_table;

如果导出阻塞 700 万条记录,追加查询方法可能很有用。您可以添加 WHERE 子句以将 SELECT 查询的输出记录集限制为可管理的块大小,然后使用不同的 WHERE 重复以指定另一个块。

【讨论】:

我正在使用 ACCESS 2010,我会尝试在此基础上实施您的解决方案,如果您找到方法请告知。 好吧,它开始导出并且还没有错误!所以我很乐观!这可能只是它!它噎住了,但见鬼,让它运行一整夜,我正在这样做一次,它 Awww 它失败了。磁盘上的临时空间太大或没有足够的空间(最大 2GB)。将尝试您的第二种方法 疯了!通过第二种方法,您是指带有 WHERE 子句的附加查询来限制传输的行数吗?那是我接下来要尝试的。 是的。我也试过链接,不好。我目前正在尝试逐个导出它(一百万一百万:P)【参考方案2】:

是压缩+修复后700万的价值吗?我的意思是,如果每条记录的长度约为 120 个字符,那么您可以在 2 个演出中容纳 3200 万条记录。

另外,我不知道导出 65,000 条记录的限制,但仅限于 Excel。

因此,您可以/应该能够将数据导出到 csv,然后在 mySql 中使用批量文本导入来提取该数据。因此,请尝试将表导出为 csv。应该可以的。

我的意思是,如果您与 sql 服务器有良好的本地连接,您可以通过 odbc 链接表,但如果没有,那么我将导出到 csv(它非常快)。然后我会压缩文件(他们压缩太棒了)。将文件上传到服务器,解压缩,然后使用批量文本导入。所以,这样的压缩文件非常小,可以节省大量的传输时间。

您也可以考虑使用制表符分隔,因为 mySql 也可以导入这些,但是一个简单的文本文件应该可以正常工作。

【讨论】:

我有大约 20 列来描述每条记录。虽然我不能说这张桌子是 100% 有效率的(不是我做的)。还有,服务器是本地的,我试试用CSV的方式返回给你。 @David 对我有用。想要截图? (也许我做错了,请赐教)。 你如何检查它是否有这个限制?您是否在 Excel 中打开生成的 CSV 文件?如果是这样,Excel 就是问题——用记事本打开它,你会看到那里的所有数据。我刚刚将一个包含 700 万行的表导出到一个逗号分隔的文件中。【参考方案3】:

我会按照

中的描述使用 pyodbc

http://en.wikibooks.org/wiki/Python_Programming/Database_Programming

从下载 python 2.7 http://python.org/ 下载 http://code.google.com/p/pyodbc/

根据你的表和文件修改下面的代码来设置myfile.mdb和MyTable

将代码保存在 translate.py 文件中

import csv
mycsv = csv.writer(open('result.csv', 'wb'), delimiter=',',
                    quotechar='"', quoting=csv.QUOTE_MINIMAL)
import pyodbc

DBfile = 'myfile.mdb'
conn = pyodbc.connect('DRIVER=Microsoft Access Driver (*.mdb);DBQ='+DBfile)
cursor = conn.cursor()

SQL = 'SELECT * FROM MyTable;'
for row in cursor.execute(SQL): # cursors are iterable
    mycsv.writerow(row)

cursor.close()
conn.close()

运行python translate.py

【讨论】:

恐怕我不会用python编程,我不知道我需要什么工具,我还不想开始学习。 就像我说的,我不打算使用 Python 来完成这项工作。如果您有 php 解决方案,我很乐意对其进行测试。【参考方案4】:

在您自己的系统上安装 MySQL 并升级到它,而不是尝试使用您的本地服务器。然后从您的 MySQL 向服务器实例运行附加查询。

【讨论】:

我已经在本地机器上安装了 MySQL,如何从 ACCESS 转移到它? 查看有关 MySQL 的 ODBC 驱动程序等的答案。虽然我可能会在 MySQL 的本地副本中创建表并从 Access 内部链接到它。确保 MySQL 表上没有索引,以便尽可能快。然后从 Access 向 MySQL 表运行追加查询。

以上是关于MS Access to MySQL 转换帮助(巨表)的主要内容,如果未能解决你的问题,请参考以下文章

如何从 MS Access 转换为 MySQL?

MySql 到 MS Access 查询转换 [重复]

将 MS Access 97 转换为 MySQL 5.5(有任何工具吗?)

将 MS Access 2000 转换为 2010

MS-Access Recordset to Array,值被转置

帮我将给 ms 访问查询转换为 MySQL 查询?