KingbaseESV8R2 は Oracle からの移行のみをサポートしているため、最初に MySQL を Oracle に移行します。
Oracle への移行の問題:
1.Oracle ではテーブル名に最大 30 桁の制限があります
2.無効な 16 進数、無効な 16 進数##3。テーブル データが空で、「
4 に NULL を挿入できません。インデックス名が長すぎます。
V8R3 への移行時の問題: 1.tinyint(1) は、すでにマッピングされていたとしても、移行後にブール値にマッピングされます。移行ツールですが、同じです。
したがって、移行後、テーブルのフィールド タイプを変更する必要があります。デフォルト値がある場合は、デフォルト値も変更する必要があります。
次に、R2 のオブジェクト マネージャーを使用して論理復元を実行します。
CREATE SEQUENCE test_id_SEQ START 101;に設定してから追加します。自動インクリメントが必要なフィールド デフォルト値に
NEXTVAL('test_id_SEQ'::REGCLASS)を追加し、insert ステートメントを使用すると、テスト テーブルのフィールド ID は 101
INSERT INTO test (name) values('1');から増加し始めます。シーケンスを削除する前に、フィールドのデフォルト値を削除する必要があります。シーケンス
DROP SEQUENCE test_id_SEQ2.uuidkingbase には uuid 関数がなく、実行エラー
select replace(uuid(), '-', '') as id from dualが発生します。とりあえず
select SYS_GUID_NAME() as id from dual;に置き換えました 結局、mysql と kingbase の uuid 生成ルールの違い4. SQL の問題発見1. `distinguishing キーワードは使えません2.関数 IFNULL は NVL3 に変更されます。すべてのフィールドはグループ by4 に表示される必要があります。sql は表示できません
!='', エラーは報告されませんが、実行結果は null です。Kingbase では、空の文字列は null
SELECT to_char(to_timestamp('2020-02-20 15:35:44', 'YYYY-MM-DD HH24:MI:SS'),'MM-DD')7 にフォーマットする必要があります。二重引用符
"" は使用できません。一重引用符
''# を使用してください。 8 の代わりに ## を使用します。
9 は使用できません。時刻の書式設定、加算および減算
limit_time = limit_time (現在) () - apply_time)
MySQL:
limit_time = date_add( limit_time, INTERVAL ( SELECT TimeStampDiff( DAY, now(), apply_time ) ) + 1 DAY )
Kingbase: 問題は時間と文字列の変換にあります。まずタイムスタンプを文字列にフォーマットし、次に時間を追加または加算するために変換し直します。減算
limit_time = limit_time + (to_date(to_char(now(),'YYYY-MM-DD'),'YYYY-MM-DD') - to_date(to_char(apply_time,'YYYY-MM-DD'),'YYYY-MM-DD') + integer '1')
10. テーブル名とシステム ビューは同じ名前の可能性があるため、
スキーマ名を追加します。テーブル名 を区別するために 11. is_delete = false に変更しますフィールド値が 0 の場合、false は使用できません。
以上がMySQL を KingbaseESV8R2 に移行する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。