源庫和目標庫的字符集對大小寫敏感度不一致時,通過DTS進行遷移或同步的過程中,可能會出現(xiàn)目標庫缺少數(shù)據(jù)的情況。本文介紹如何避免這種情況的發(fā)生。
問題描述
不同的數(shù)據(jù)庫對大小寫敏感度的要求會存在差異。當目標庫和源庫數(shù)據(jù)庫大小寫敏感度不一致時,可能會在遷移或同步結(jié)束后,發(fā)現(xiàn)目標庫缺少數(shù)據(jù)。
問題示例
以Oracle和MySQL為例,說明數(shù)據(jù)庫對大小寫敏感度要求不一致導致目標庫數(shù)據(jù)缺失的情況。
Oracle數(shù)據(jù)庫和MySQL數(shù)據(jù)庫對大小寫敏感度的要求不一致。
- Oracle:區(qū)分大小寫,對主鍵或唯一鍵字段可以插入僅大小寫不同的值,如'a'和’A'。
- MySQL:是否區(qū)分大小寫由字符序(COLLATE)決定。一般"_ci"表示大小寫不敏感;"_cs"表示大小寫敏感。當字符序后綴為"_ci"時不區(qū)分大小寫,主鍵或唯一鍵字段不能插入僅大小寫不同的值,如'a'和’A'。
遷移場景:從源庫Oracle向目標庫MySQL遷移數(shù)據(jù)。配置DTS遷移任務后,不勾選結(jié)構(gòu)遷移,遷移完成后,查看目標庫數(shù)據(jù)。
源庫和目標庫類型 | 字符集 | 遷移動作說明 | 源庫和目標庫數(shù)據(jù) |
---|---|---|---|
源庫:Oracle | AL32UTF | 遷移對象:gb.test
|
查看源庫數(shù)據(jù)如下: |
插入數(shù)據(jù):
|
|||
目標庫:MySQL | utf8
說明 默認大小寫不敏感。
|
自建以下表結(jié)構(gòu):
|
配置DTS遷移任務后,不勾選結(jié)構(gòu)遷移,待遷移完成后查看目標庫數(shù)據(jù)如下: |
可能原因
源庫和目標庫對字符集是否區(qū)分大小寫的特性不一致。
解決方案
- 業(yè)務上考慮是否存在內(nèi)容相同僅大小寫不同的情況,如不需要的話,將存入數(shù)據(jù)庫的內(nèi)容的大小寫統(tǒng)一,例如都統(tǒng)一成小寫的形式。
- 若源庫的大小寫敏感,在選擇目標庫時,在目標端指定大小寫敏感的字符序。