mdb-export更改每行的{GUID

时间:2016-01-28 14:37:41

标签: mysql ms-access mdbtools

我在 FreeBSD 上使用 mdb-tools Microsoft Access数据库转换为 MySQL

脚本如下所示(to_mysql.sh):

#!/usr/local/bin/bash
echo "DROP TABLE IF EXISTS Student;"

mdb-schema -T Student $1 mysql

mdb-export -D '%Y-%m-%d %H:%M:%S' -I mysql $1 Student

我正在使用它:

./to_mysql.sh accessDb.MDB > data.sql

问题是mdb中的GUID(第二列)会更改所有行。

在访问数据库中,一行如下所示:

  

| {D115266B-D5A3-4617-80F8-7B80EE3022DA} | 2013-06-11 08.54.14 | 2015-12-17   14.57.01 | 2 | 2 |||||| 0 | 111111-1111 || Nameson |名称||||| 3 ||| SA | 0 |||| 0 | Gatan 2 | 222 22 | 1234 567 < / p>

当我使用上面的脚本将其转换为MySQL时,它看起来像这样:

INSERT INTO `Student` (
    `UsedFields`,`GUID`,`Changed`,`ChangedLesson`,`AccessInWebViewer`,`VisibleInWebViewer`
    ,`PasswordInWebViewer`,`Language`,`UserMan`,`SchoolID`,`Owner`,`DoNotExport`
    ,`Student`,`Category`,`LastName`,`FirstName`,`Signature`,`Sex`
    ,`Phone`,`SchoolType`,`Grade`,`EMail`,`Program`,`IgnoreLunch`
    ,`ExcludedTime`,`Individual timetable`,`Adress(TEXT) `,`Postnr(TEXT) `
    ,`Ort(TEXT) `
    )
VALUES (
    NULL,"{266bd115-d5a3-4617-f880-807b30eeda22}","2013-06-11 08:54:14"
    ,"2015-12-17 14:57:01",2,2,NULL,NULL,NULL,NULL,NULL,0,"111111-1111"
    ,NULL,"Nameson","Name ",NULL,NULL,NULL,NULL,"3",NULL,"SA"
    ,0,NULL,0,"Gatan 2","222 22","1234 567"
    );

除了GUID列之外,一切都是正确的,它改为:

  

{D115266B-D5A3-4617-80F8-7B80EE3022DA}

  

{266bd115-d5a3-4617-f880-807b30eeda22}

看起来所有的角色都只是重新排序,但我不知道为什么。

有谁知道为什么以及如何阻止这种情况?

谢谢!

1 个答案:

答案 0 :(得分:0)

似乎是mdbtools中的字节顺序问题。解决方法是创建一个小的sed脚本&#39; mdb_fixguids&#39;&#39;,类似

#!/bin/sed -f
s/{\(....\)\(....\)-\(....-....-....-............\)}/{\2\1-\3}/g;
s/{\(........-....-....\)-\(..\)\(..\)-\(..\)\(..\)\(..\)\(..\)\(..\)\(..\)}/{\1-\3\2-\5\4\7\6\9\8}/g

将其放入路径并在转换管道中使用它,例如

./to_mysql.sh accessDb.MDB | mdb_fixguids > data.sql

BTW :)这是我第一次在sed

中需要所有可能的backrefs