Sql-Server
如何驗證兩個 MS SQL 和 MySQL 之間的數據轉儲
我正在嘗試使用 MD5 雜湊驗證從 MSSQL 導出並導入 MySQL 的數據是 100% 準確的。在 Linux 上,我在 Windows 上使用 md5sum 和 WinMD5。編碼相同:UTF8。我嘗試了 UNICODE 和 ANSI,但結果是一樣的。
當我直覺地比較導出文件中的數據或單個單元格值的雜湊值時,它是 100% 準確的。但是,比較這兩個文件會產生不同的雜湊值。任何人都知道為什麼雜湊會不同?
非常感謝您的意見。
更新:數據使用 BCP 從 MSSQL 導出到文本 (.txt) 文件中。MySQL 數據使用以下命令導出:SELECT * INTO OUTFILE…. 到文本文件中。兩者都使用 “%^&” 作為欄位分隔符,"!@#$" 作為行分隔符,並使用 “" 進行轉義。
文件雜湊不同的原因可能有多種:
- 行尾不同;
- 間距可能不同(製表符與空格);
- 相同數據的不同佈局
- 編碼(保存數據的文件)
- 報價(單對雙)
- 區分大小寫
我要做的是將兩個文件與
diff
工具進行比較。git diff
可以在這裡提供幫助,因為它具有逐字區分的能力,如果您通過它--no-index
選項,甚至不必將它們放在 git 儲存庫中。這個命令可以幫助$ git diff --no-index --color-words file1.txt file2.txt
使用類似comp命令來找出它們不同的第一個地方。
然後在十六進制編輯器中打開文件,比如Windows 的HxD,看看它們的不同之處。特別是,尋找:
- CRLF (DOS, 0x0D0A) 與 LF (*nix, 0x0A) 行終止
- Unicode BOM(字節順序標記,UTF-8 為 0xEFBBBF)在一個開頭但不是另一個
- 花哨的報價與正常報價
- 案例問題