日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

sqlserver迁移到mysql遇到的那些坑

發布時間:2023/12/20 数据库 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sqlserver迁移到mysql遇到的那些坑 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

背景

由于各種原因,成本啊、擴展性等,公司決定把線上的業務從sql server遷移到mysql RDS。

遷移過程主要包括了程序修改和數據庫的遷移。程序修改我們略過不談,我們重點關注數據庫遷移。

?

大概過程

由于是異構的數據庫,沒有找到數據實時同步的方法(若哪位大俠可以異構實時同步,還請多多指教),所有使用ETL工具定時同步數據。

同步的數據包括insert和update的數據(還好業務中沒有物理的delete)。

待萬事俱備,切換數據庫之前,再進行一次數據同步。

切換完成之后,在進行數據檢查,把最后一次同步之后,寫入到sqlserver中的數據,傳輸到mysql上。

大功告成!!!

?

那些坑

本文主要介紹遷移過程中的那些坑,主要是結構和語法上的。

1,時間戳timestamp數據類型

sqlserver和mysql都有timestamp數據類型,但是兩者的實現區別很大。

在sql server中,該類型表明數據庫中數據修改發生的相對順序,它的值本質上是一個bigint類型的一個遞增數字,與時間和日期無關,?該數字在數據庫實例級別不會重讀。

在mysql中,該類型表明數據庫中數據修改發生的相對順序, 它的本質是一個時間,該時間再表級別都有可能重復。

最坑的是該類型的字段是我們業務的關鍵字段,用于用戶從服務器上拉去數據。

最后的解決辦法,該字段的數據按照bigint的值從sql server遷移到mysql,mysql在添加一個timastamp數據類型,程序添加判斷機制。

2,字符集和emoji表情

sqlserver中默認直接可以保存emoji表情。開始遷移過程沒有注意到該問題。歷史數據遷移完畢以后,才發現該問題。omg!!

mysql中需要使用utf8mb4來保存此數據。

3,索引不能超過大小

mysql中索引長度不能超過767字節,這可是個大坑啊!!!

這個只能是優化數據類型。

比如有的字段保存設備的macid,數據類型是varchar(50),經過調研發現macid只有12位,可以修改成varchar(12)。

再有int是否可以改為tinyint或者smallint、是否可以用latin1代替utf8(當然最好是都統一使用utf8)等

這里主要就是數據類型的優化,稍后會有專門的文章來介紹數據類型優化。

4,varchar(max)類型

mysql沒有該數據類型,如果使用power designer反向工程的話,從sqlserver到mysql,該數據類型會變為char(1)。mysql中需要使用text類型。

5,常見的不兼容的語法

sqlserver中一個使用top取前幾行的數據,mysql使用limit完成此功能。這個相對還比較好修改。

兩者使用臨時表的方法也不一樣。

存儲過程和函數的格式。

6,CTE遞歸

在存在遞歸查詢的操作里,sqlserver有一個非常棒的功能就是CTE遞歸查詢。

7,over窗口查詢

sqlserver中的over窗口函數也是我非常喜歡的一個功能,比如分組排序、分組范圍等查詢。

?

轉載于:https://www.cnblogs.com/shizheyangde/p/7410816.html

總結

以上是生活随笔為你收集整理的sqlserver迁移到mysql遇到的那些坑的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。