将 MS Access 数据迁移到 MySQL:字符编码问题

Posted

技术标签:

【中文标题】将 MS Access 数据迁移到 MySQL:字符编码问题【英文标题】:Migrating MS Access data to MySQL: character encoding issues 【发布时间】:2009-10-07 01:15:29 【问题描述】:

我认为,我们有一个由 Access 2000 数据库生成的 MS Access .mdb 文件。我正在尝试使用 mdbtools 将表导出到 SQL,使用以下命令:

mdb-export -S -X \\ -I orig.mdb Reviewer > Reviewer.sql

这会产生我期望的文件,除了一件事:一些字符表示为问号。这:“他还没准备好”显示如下:“他还没准备好”,仅在某些情况下(主要是单/双大引号),可能内容是从 MS Word 粘贴到数据库中的。否则,数据看起来很棒。

我已经为“export MDB_ICONV=”尝试了各种值。我尝试在生成的文件上使用 iconv,在 from/to 中使用 ISO-8859-1,在 from/to 中使用 UTF-8,在 from/to 中使用 WINDOWS-1250 和 WINDOWS-1252 和 WINDOWS-1256各种组合。但我还没有成功找回那些花引号。

坦率地说,根据生成文件的外观,我怀疑问题出在原始 .mdb 文件或 mdbtools 中。畸形字符都是单个问号,但很明显它们不是同一事物的畸形版本;所以(我的直觉说)结果文件中没有足够的数据;所以(我的直觉说)这个问题无法在生成的文件中解决。

以前有人遇到过这个吗?前进的任何提示? FWIW,我没有也从未拥有过 MS Access——该文件来自第 3 方——所以这可能就像更改数据库中的某些内容一样简单,我很高兴听到这个消息。

谢谢。

【问题讨论】:

【参考方案1】:

看起来“聪明的引语”声称又有一个受害者。

MS word 采用纯 ascii 引号并将它们转换为双字节左引号和右引号字符,并将单引号转换为双字节撇号字符。有问题的双字节字符属于 MS 代码页,除了愚蠢的引号字符外,它与 unicode-16 大致兼容。

有一个名为 'demoroniser.pl' 的 perl 脚本可以消除所有这些问题并将引号转换回纯 ASCII。

【讨论】:

感谢您的回复!我很高兴知道 demoroniser(及其表亲,unmoroniser)。据我所知,这些工具处理 html 实体(“我编写了一个 Perl 程序,demoroniser,将 Microsoft 的“垃圾 HT​​ML”至少转换为我认为可以在我的网站上展示的东西的起点”)。但是在我正在查看的数据中(在 vi 中),格式错误的字符不是 HTML;他们是问号。无论如何,运行 demoroniser 并没有改善。我想我需要对角色本身进行诸如 demoniser 之类的操作。这有意义吗? Demoroniser 包含了摆脱它们的基本逻辑。 (如果这确实是问题!)。看看 perl 程序正在做的转换。然后“od -x”你的文件,看看这些是不是你正在处理的字符。【参考方案2】:

这很可能是因为 Access 文件中的数据是 UTF,而 MDB Tools 正在尝试将其转换为 ascii/latin/is0-8859-1 或其他一些编码。由于这些编码不能正确映射所有 UTF 字符,因此您最终会得到问号。 information here 可以通过让 MDB 工具使用正确的编码来帮助您解决编码问题。

【讨论】:

谢谢!我看过那个页面,但你提醒我再试一次。我编写了一个脚本来将 mdbtools 的字符集设置为 iconv -l 中的每个可能值,运行 mdbtools,并检查结果中的特定短语是否正确。不幸的是,没有字符集改变 mdbtools 的输出。

以上是关于将 MS Access 数据迁移到 MySQL:字符编码问题的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 c#“第 1 行的 SQL 语法错误”将数据从 Ms Access 迁移到 MySQL 工作台

数据库:在 MS Access DB 和 MYSQL 之间迁移数据

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

从 Oracle 到 MS-Access 到 Mysql

将 MS Access 迁移到 PostgreSQL [关闭]

使用 ODBC 连接到 MYSQL 在 MS-Access 中运行 SQL 时出错