iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 5
0

今天筆者介紹的是資料移轉的部份,先從 SQL Server 移轉開始。

這個部份取決於原始資料的熟悉程度,以下列的是已經分析完以後使用的工具說明。

簡單的資料分析

資料庫裡頭的欄位都是簡單欄位,所以基本上沒有什麼欄位的不合問題。
原來的儲存編碼為 Big5,統一到 MariaDB 是 UTF-8。

原來的想法

MySQL Workbench是一個很好用的管理工具,尤其是他的 Database Migration,不過他在轉資料的時候,錯誤訊息真的很少(只會說資料轉不進去),所以最後拿來轉 Schema 用。

SQL Server 移轉紀錄

Schema 部份

使用 MySQL Workbench 移轉。

資料部份

使用 bcp 的 script (bcp "select * from ... where ..." queryout "table.csv" -c -t"\t" -r"|" -S <server> -U <users> -P <password>),以 Tab 分開欄位,以 | 分行,這個可以透過 SELECT * FROM information_schema.tables WHERE TABLE_TYPE='BASE TABLE'兜出語法來。

因為筆者使用的是 SQL Server 2012,匯出的資料儲存不能是 UTF-8(Windows 的 ANSI 在中文電腦裡是 Big5),所以我透過以下的幾個方法來做

  • Powershell Get-Content table.csv | Out-File -encoding utf8 table_utf8.csv
  • GNU on Windows 的 iconv
  • 直接透過 MariaDB load file 匯入

這邊大家一定覺得很納悶,為什麼已經有了 Powershell 轉檔了還要 iconv,還有直接透過匯入的 ?

其實這些都是試誤出來的。

一開始想說先幫 MariaDB 轉成 UTF-8 格式的 CSV 檔,讓 MariaDB 不必經過轉換檔的問題,但是就碰到了 Unknown Character UTF-8 '?' 的問題,不是都已經轉成 UTF-8 格式了嗎?

原來原始資料就有一些問題,導致轉檔也會好像轉好似的沒發生什麼問題,但是確實不是 UTF-8 文字。所以透過 iconv 轉,有時候可以,有時候還是有問題,最後只能透過 MariaDB 的轉檔方式執行。

  • 匯入沒有問題時 load data local infile 'e://import//table_utf8.csv' into ... fields terminated by '\t' lines terminated by '|';
  • 匯入有問題用 Big5 匯入時 load data local infile 'e://import//table_utf8.csv' into ... character set big5 fields terminated by '\t' lines terminated by '|';

接下來就是漫長的對檔過程,最後終於完成 SQL Server 移轉資料到 MariaDB的目標。

明天要介紹的是 Oracle DB 移轉資料到 MariaDB 的過程。


上一篇
MariaDB 的備份與還原
下一篇
移轉資料到 MariaDB [2]
系列文
MariaDB 的使用與管理30

尚未有邦友留言

立即登入留言