本文へスキップ
IntoSQL ホーム

SQL Server を MariaDB に変換

SSMS の「スクリプトの生成」でスキーマとデータを含めて書き出したスクリプト (.sql または .sql.gz、UTF-16 または UTF-8) をドロップすると、同じテーブル、キー、インデックス、データを持つ MariaDB スクリプトをダウンロードできます。MariaDB がそのまま保持できない値と、引き継がないオブジェクトは、すべてレポートに記載されます。

ファイル
sqlshop_2024_sqlserver.sqlサンプルファイル、11 KB
データベース

18 行を変換、修正 3 件、却下なし

表示

shop_2024_sqlserver.sql のテーブルSQL Server のダンプ · SQL Server Management Objects で作成 · utf-8

  • orders10 行1
    11 列
    idint not null
    customer_idint not null
    statusvarchar(10) not null
    totaldecimal(19,4) not null
    itemstinyint unsigned not null
    ordered_atdatetime not null
    shipped_atdatetime(6)
    notetext
    detailstext
    order_refuuid not null
    total_with_taxdecimal(12,2)
  • customers8 行2
    8 列
    idint not null
    namevarchar(100) not null
    emailvarchar(200) not null
    countrychar(2) not null
    is_activetinyint(1) not null
    signed_update
    created_atdatetime not null
    row_versionblob

未変換

  • ビュー paid_orders
  • トリガー orders_no_negative

これらはデータベースごとに独自の言語で書かれます。MariaDB 用に書き直してください。

-- Written by IntoSQL from a SQL Server dump. Load it with: mariadb --default-character-set=utf8mb4 <database> < <file>
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
SET UNIQUE_CHECKS = 0;
SET SQL_MODE = 'NO_AUTO_VALUE_ON_ZERO,ALLOW_INVALID_DATES';

CREATE TABLE `orders` (
  `id` int NOT NULL AUTO_INCREMENT,
  `customer_id` int NOT NULL,
  `status` varchar(10) NOT NULL DEFAULT 'pending',
  `total` decimal(19,4) NOT NULL,
  `items` tinyint unsigned NOT NULL DEFAULT 1,
  `ordered_at` datetime NOT NULL,
  `shipped_at` datetime(6),
  `note` text,
  `details` text,
  `order_ref` uuid NOT NULL DEFAULT (uuid()),
  `total_with_tax` decimal(12,2) GENERATED ALWAYS AS (cast(`total` * (1.16) AS DECIMAL(12,2))) STORED,
  PRIMARY KEY (`id`),
  KEY `idx_orders_customer` (`customer_id`),
  KEY `idx_orders_status_date` (`status`,`ordered_at`),
  CONSTRAINT `check2` CHECK (`status` = 'cancelled' OR `status` = 'shipped' OR `status` = 'paid' OR `status` = 'pending'),
  CONSTRAINT `check3` CHECK (`total` >= (0)),
  FOREIGN KEY (`customer_id`) REFERENCES `customers` (`id`)
) AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

CREATE TABLE `customers` (
  `id` int NOT NULL AUTO_INCREMENT,
  `name` varchar(100) NOT NULL,
  `email` varchar(200) NOT NULL,
  `country` char(2) NOT NULL DEFAULT 'US',
  `is_active` tinyint(1) NOT NULL DEFAULT 1,
  `signed_up` date,
  `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `row_version` blob,
  PRIMARY KEY (`id`),
  UNIQUE KEY (`email`)
) AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='People who bought at least once';

INSERT INTO `customers` (`id`,`name`,`email`,`country`,`is_active`,`signed_up`,`created_at`) VALUES (1,'Ana Martínez','ana@example.com','MX',1,'2023-01-15','2023-01-15 10:24:00.000000');
INSERT INTO `customers` (`id`,`name`,`email`,`country`,`is_active`,`signed_up`,`created_at`) VALUES (2,'Zoë Müller','zoe@example.de','DE',1,'2023-02-03','2023-02-03 08:11:42.000000');
INSERT INTO `customers` (`id`,`name`,`email`,`country`,`is_active`,`signed_up`,`created_at`) VALUES (3,'José Peña','jose@example.es','ES',0,'2023-03-21','2023-03-21 19:05:17.000000');
INSERT INTO `customers` (`id`,`name`,`email`,`country`,`is_active`,`signed_up`,`created_at`) VALUES (4,'李雷','lilei@example.cn','CN',1,'2023-05-09','2023-05-09 02:40:00.000000');
INSERT INTO `customers` (`id`,`name`,`email`,`country`,`is_active`,`signed_up`,`created_at`) VALUES (5,'Noah O\'Brien','noah@example.ie','IE',1,NULL,'2023-06-30 14:00:00.000000');
INSERT INTO `customers` (`id`,`name`,`email`,`country`,`is_active`,`signed_up`,`created_at`) VALUES (6,'Amélie Laurent','amelie@example.fr','FR',1,'2024-01-02','2024-01-02 09:30:00.000000');
INSERT INTO `customers` (`id`,`name`,`email`,`country`,`is_active`,`signed_up`,`created_at`) VALUES (7,'Ravi Patel','ravi@example.in','IN',0,'2024-02-29','2024-02-29 23:59:59.000000');
INSERT INTO `customers` (`id`,`name`,`email`,`country`,`is_active`,`signed_up`,`created_at`) VALUES (8,'Sofia Rossi 🌻','sofia@example.it','IT',1,'2024-04-12','2024-04-12 12:12:12.000000');
INSERT INTO `orders` (`id`,`customer_id`,`status`,`total`,`items`,`ordered_at`,`shipped_at`,`note`,`details`,`order_ref`) VALUES (1,1,'shipped',129.9000,3,'2024-03-01T10:00:00.000000','2024-03-02T16:30:00.123456',NULL,'{"gift": false}','0b7a4c2e-3f1d-4e8a-9c55-1a2b3c4d5e6f');
INSERT INTO `orders` (`id`,`customer_id`,`status`,`total`,`items`,`ordered_at`,`shipped_at`,`note`,`details`,`order_ref`) VALUES (2,2,'paid',54.0000,1,'2024-03-02T11:15:00.000000',NULL,'Gift wrap 🎁','{"gift": true, "wrap": "red"}','1c8b5d3f-4a2e-4f9b-8d66-2b3c4d5e6f70');
INSERT INTO `orders` (`id`,`customer_id`,`status`,`total`,`items`,`ordered_at`,`shipped_at`,`note`,`details`,`order_ref`) VALUES (3,1,'cancelled',12.5000,1,'2024-03-03T09:45:00.000000',NULL,'Customer changed their mind',NULL,'2d9c6e4a-5b3f-4a0c-9e77-3c4d5e6f7081');
INSERT INTO `orders` (`id`,`customer_id`,`status`,`total`,`items`,`ordered_at`,`shipped_at`,`note`,`details`,`order_ref`) VALUES (4,4,'shipped',980.0000,12,'2024-03-05T02:10:00.000000','2024-03-07T08:00:00.000000','请小心轻放','{"fragile": true}','3e0d7f5b-6c4a-4b1d-8f88-4d5e6f708192');
INSERT INTO `orders` (`id`,`customer_id`,`status`,`total`,`items`,`ordered_at`,`shipped_at`,`note`,`details`,`order_ref`) VALUES (5,5,'pending',45.7500,2,'2024-03-08T17:20:00.000000',NULL,'Leave at the door; ring twice',NULL,'4f1e806c-7d5b-4c2e-9a99-5e6f708192a3');
INSERT INTO `orders` (`id`,`customer_id`,`status`,`total`,`items`,`ordered_at`,`shipped_at`,`note`,`details`,`order_ref`) VALUES (6,6,'shipped',310.4000,5,'2024-03-10T13:00:00.000000','2024-03-11T09:00:00.000000','Fragile: "glass"','{"fragile": true}','50f2917d-8e6c-4d3f-8baa-6f708192a3b4');
INSERT INTO `orders` (`id`,`customer_id`,`status`,`total`,`items`,`ordered_at`,`shipped_at`,`note`,`details`,`order_ref`) VALUES (7,8,'paid',76.2000,2,'2024-03-11T18:45:00.000000',NULL,NULL,NULL,'6103a28e-9f7d-4e40-9cbb-708192a3b4c5');
INSERT INTO `orders` (`id`,`customer_id`,`status`,`total`,`items`,`ordered_at`,`shipped_at`,`note`,`details`,`order_ref`) VALUES (8,2,'shipped',19.9900,1,'2024-03-12T08:00:00.000000','9999-12-31T23:59:59.999999','Shipped date set to the maximum by an old import',NULL,'7214b39f-a08e-4f51-8dcc-8192a3b4c5d6');
INSERT INTO `orders` (`id`,`customer_id`,`status`,`total`,`items`,`ordered_at`,`shipped_at`,`note`,`details`,`order_ref`) VALUES (9,3,'shipped',64.0000,2,'2024-03-14T15:30:00.000000','2024-03-15T10:00:00.000000','Two parcels','{"parcels": [1, 2]}','8325c4a0-b19f-4062-9edd-92a3b4c5d6e7');
INSERT INTO `orders` (`id`,`customer_id`,`status`,`total`,`items`,`ordered_at`,`shipped_at`,`note`,`details`,`order_ref`) VALUES (10,7,'paid',1499.0000,1,'2024-03-15T21:05:00.000000',NULL,'C:\\Users\\ravi\\invoice.pdf',NULL,'9436d5b1-c2a0-4173-8fee-a3b4c5d6e7f8');

SET UNIQUE_CHECKS = 1;
SET FOREIGN_KEY_CHECKS = 1;

修正

  1. orders の "shipped_at" は datetime2(7) で、MariaDB が保てるより多くの秒の桁を持つため、datetime(6) にして末尾の桁を切り捨てます。
  2. customers の "created_at" にはタイムゾーン付きの日時があります。MariaDB にはタイムゾーンを保つ型がないため、datetime として UTC で保存します。
  3. customers の "row_version" は SQL Server が自動で設定する行バージョンです。ダンプにはその値がないため、blob にして空のままにします。

確認が必要

  • ソースでは 6 個のテキスト列が大文字と小文字を区別せずに比較します。MariaDB は厳密に比較するため、一意キーや検索の動作が変わる場合があります。 必要な列には、大文字と小文字を区別しない照合順序か列の型を使ってください。
  • 2 件のビュー、トリガー、ルーチン、イベントは変換されません。レポートにそれぞれ記載しています。 MariaDB で手動で作り直してください。
  • orders のチェック制約 check1 は MariaDB 用に書き換えられないため (function isjson)、作成しません。 必要であれば、手動でチェック制約を書いてください。
  • orders のインデックス idx_orders_pending は MariaDB 用に書き換えられない式を使っているため (neither MySQL 5.7 nor MariaDB index an expression)、作成しません。 クエリに必要なら、手動でインデックスを作成してください。

ファイルはこのコンピューター上で変換され、アップロードされることはありません。

その他のサンプル:

SQL Server から MariaDB で変わること

各行はコンバーターが適用するルールです。ルールによってデータが変わったときにレポートに書かれる行も示します。

  • bit

    tinyint(1)

    MariaDB の BOOLEAN は TINYINT(1) で、bit と同じく 1 と 0 です。

  • char(n), varchar(n), nchar(n), nvarchar(n), varchar(max), text

    char(n)、1024 文字までは varchar(n)、それを超えると text 型

    テキストはすべての文字を utf8mb4 で保ちます。キーに含まれる列は、キーに収まる最大の varchar(768) までです。

  • decimal(p,s), money, smallmoney

    decimal(p,s)、money は decimal(19,4)

    decimal は SQL Server の 38 桁より多い 65 桁を保持できるため、すべての値が正確です。

  • datetime, datetime2, smalldatetime

    datetime(p)

    datetime はどちらでも時計が示す時刻です。

  • datetime2(7), time(7) and datetimeoffset(7)

    秒の小数は 6 桁、7 桁目は切り捨て

    MariaDB はマイクロ秒まで保持します。7 桁目 (100 ナノ秒) は丸めずに切り捨てるため、値が次の秒や日に繰り上がることはありません。

    レポートの行: fraction_cut

  • datetimeoffset

    UTC の datetime(p)

    MariaDB の TIMESTAMP は 2038 年までしか扱えないため、日時は UTC の datetime として保存します。各値のオフセットにかかわらず同じ時点です。

    レポートの行: moments_as_utc

  • time

    time(p)

    同じ時刻です。

  • dates before the year 1000

    NULL

    MariaDB が保存できるのは 1000 年から 9999 年までですが、SQL Server は 1 年までさかのぼれます。それらの値は NULL になり、レポートで件数を示します。

    レポートの行: date_out_of_range

  • json (SQL Server 2025)

    json (JSON チェック付きの longtext)

    JSON の値は同じで、MariaDB の JSON 関数で読めます。

  • uniqueidentifier

    uuid

    同じ識別子を小文字で書き出します。

  • binary, varbinary, image

    binary(n)、varbinary(n)、blob 型

    バイトはバイトのままです。

  • geometry, geography

    SQL Server 独自のバイト列を持つ blob

    SSMS は空間値を SQL Server のシリアル化形式で書き出し、それをバイト単位でそのまま保ちます。

    レポートの行: spatial_as_native

  • rowversion, timestamp

    blob、空

    行バージョンは SQL Server が自動で設定するもので、SSMS はその値をスクリプトに含めません。

    レポートの行: rowversion_empty

  • xml, sql_variant, hierarchyid, vector

    longtext

    MariaDB には同等の型がありません。xml と sql_variant は各値のテキストを、hierarchyid は /1/2/ のようなパスを保ちます。

    レポートの行: type_replaced

  • collations that ignore case (_CI_)

    厳密な比較 (utf8mb4_bin)

    テーブルは utf8mb4_bin を使うため、SQL Server で区別されていた値は一意キーでも区別されます。大文字と小文字を区別しなかった列はその動作を失います。アクセントの規則はバージョンによって異なるため、どのバージョンでも SQL Server と一致する _ci 照合順序はありません。

    レポートの行: case_insensitive_collation

  • IDENTITY

    AUTO_INCREMENT、最大の ID の後から継続

    主キーの先頭の列を採番します。カウンターは最大の ID の後から続きます。

  • IDENTITY columns that don't lead the primary key

    普通の整数

    MariaDB が採番するのはテーブルごとに 1 列だけで、キーの先頭の列です。それ以外の列はカウンターなしで値を保ちます。

    レポートの行: counter_dropped

  • CREATE SEQUENCE

    同じオプションの CREATE SEQUENCE

    MariaDB のシーケンスも同じように動作します。SSMS はシーケンスの現在位置をスクリプトに含めないため、作成時の値から始まります。

  • computed columns

    生成列、PERSISTED なら STORED、それ以外は VIRTUAL

    MariaDB も同じ 2 つの方法で計算します。SQL Server と同じく NULL を空として扱うように CONCAT を書き出します。

  • computed columns with functions MariaDB lacks

    普通の列

    書き換えられない式は、普通の列とレポートの 1 行になります。SSMS は計算列の値をスクリプトに含めません。

    レポートの行: generated_not_translated

  • defaults with functions MariaDB lacks, and NEXT VALUE FOR

    デフォルト値なし

    書き換えられないデフォルト値は含めず、レポートに記載します。

    レポートの行: default_not_translated

  • CHECK constraints

    変換済み

    チェック制約は同じで、各行の読み込み時に検証します。

  • CHECK constraints with functions MariaDB lacks

    作成しない

    書き換えられないチェック制約は含めず、レポートに記載します。

    レポートの行: check_skipped

  • CHECK constraints added WITH NOCHECK or disabled

    作成しない

    SQL Server はこれらのチェックを適用していないため、行が違反している可能性があります。

    レポートの行: check_not_enforced

  • filtered and columnstore indexes

    作成しない

    IntoSQL が書き出すのは列全体に対する b-tree インデックスです。その他は読み込み後に作り直してください。

    レポートの行: index_skipped

  • foreign keys

    外部キー、FOREIGN_KEY_CHECKS=0 で読み込み

    行はどの順序でも読み込め、その後はキーが新しい行をチェックします。

  • foreign keys to tables the dump doesn't create

    作成しない

    キーは存在しないテーブルを参照できません。

    レポートの行: foreign_key_skipped

  • tables on a partition scheme

    すべてのパーティションの行を持つ 1 つのテーブル

    行は同じです。必要なら MariaDB でもう一度テーブルをパーティション分割してください。

    レポートの行: partitions_dropped

  • temporal tables (SYSTEM_VERSIONING)

    WITH SYSTEM VERSIONING、現在の行から開始。履歴テーブルは普通のテーブルとして

    MariaDB はこれ以降の履歴を自動で保持します。SQL Server の期間列と履歴テーブルはそのままコピーします。

  • schemas

    1 つのデータベース、テーブル名の先頭にスキーマ名

    MariaDB のスキーマはデータベースであり、1 つのデータベースに読み込むスクリプトでは作成できません。dbo のテーブルは名前を保ちます。

    レポートの行: schemas_merged

  • NOT NULL columns with values that become NULL

    NOT NULL を削除

    値を NULL にする必要があった列は NOT NULL を保てません。保つと読み込みが止まります。

    レポートの行: not_null_relaxed

  • views, functions, procedures, triggers, synonyms, types and partition functions

    レポートに記載

    コードが T-SQL で書かれているため、作り直せるよう一覧にします。

    レポートの行: not_converted_objects

  • scripts without CREATE TABLE (data only)

    値から読み取った型

    データのみのスクリプトには行しかないため、型は値から決まります。

    レポートの行: no_schema

  • expressions in INSERT values

    NULL

    データベースを実行しないコンバーターでは、これらを評価できません。

    レポートの行: expression_value

  • types IntoSQL doesn't know

    longtext

    テキストはどんな値も保持できます。読み込み後に型を変更してください。

    レポートの行: unknown_type

  • NUL characters in text

    保持

    値は NUL 文字をエスケープしてコピーします。

  • text that isn't valid in its encoding

    不正なバイトを置換文字に

    スクリプトは UTF-8 なので、すべての値が有効なテキストである必要があります。

    レポートの行: invalid_utf8_replaced

  • text decoded twice (ñ)

    そのままコピー

    スクリプトにはまさにこの文字が含まれているため、そのままコピーし、レポートで指摘します。

    レポートの行: mojibake_suspected

SQL Server ではMariaDB ではレポートの行
bittinyint(1)MariaDB の BOOLEAN は TINYINT(1) で、bit と同じく 1 と 0 です。
char(n), varchar(n), nchar(n), nvarchar(n), varchar(max), textchar(n)、1024 文字までは varchar(n)、それを超えると text 型テキストはすべての文字を utf8mb4 で保ちます。キーに含まれる列は、キーに収まる最大の varchar(768) までです。
decimal(p,s), money, smallmoneydecimal(p,s)、money は decimal(19,4)decimal は SQL Server の 38 桁より多い 65 桁を保持できるため、すべての値が正確です。
datetime, datetime2, smalldatetimedatetime(p)datetime はどちらでも時計が示す時刻です。
datetime2(7), time(7) and datetimeoffset(7)秒の小数は 6 桁、7 桁目は切り捨てMariaDB はマイクロ秒まで保持します。7 桁目 (100 ナノ秒) は丸めずに切り捨てるため、値が次の秒や日に繰り上がることはありません。fraction_cut
datetimeoffsetUTC の datetime(p)MariaDB の TIMESTAMP は 2038 年までしか扱えないため、日時は UTC の datetime として保存します。各値のオフセットにかかわらず同じ時点です。moments_as_utc
timetime(p)同じ時刻です。
dates before the year 1000NULLMariaDB が保存できるのは 1000 年から 9999 年までですが、SQL Server は 1 年までさかのぼれます。それらの値は NULL になり、レポートで件数を示します。date_out_of_range
json (SQL Server 2025)json (JSON チェック付きの longtext)JSON の値は同じで、MariaDB の JSON 関数で読めます。
uniqueidentifieruuid同じ識別子を小文字で書き出します。
binary, varbinary, imagebinary(n)、varbinary(n)、blob 型バイトはバイトのままです。
geometry, geographySQL Server 独自のバイト列を持つ blobSSMS は空間値を SQL Server のシリアル化形式で書き出し、それをバイト単位でそのまま保ちます。spatial_as_native
rowversion, timestampblob、空行バージョンは SQL Server が自動で設定するもので、SSMS はその値をスクリプトに含めません。rowversion_empty
xml, sql_variant, hierarchyid, vectorlongtextMariaDB には同等の型がありません。xml と sql_variant は各値のテキストを、hierarchyid は /1/2/ のようなパスを保ちます。type_replaced
collations that ignore case (_CI_)厳密な比較 (utf8mb4_bin)テーブルは utf8mb4_bin を使うため、SQL Server で区別されていた値は一意キーでも区別されます。大文字と小文字を区別しなかった列はその動作を失います。アクセントの規則はバージョンによって異なるため、どのバージョンでも SQL Server と一致する _ci 照合順序はありません。case_insensitive_collation
IDENTITYAUTO_INCREMENT、最大の ID の後から継続主キーの先頭の列を採番します。カウンターは最大の ID の後から続きます。
IDENTITY columns that don't lead the primary key普通の整数MariaDB が採番するのはテーブルごとに 1 列だけで、キーの先頭の列です。それ以外の列はカウンターなしで値を保ちます。counter_dropped
CREATE SEQUENCE同じオプションの CREATE SEQUENCEMariaDB のシーケンスも同じように動作します。SSMS はシーケンスの現在位置をスクリプトに含めないため、作成時の値から始まります。
computed columns生成列、PERSISTED なら STORED、それ以外は VIRTUALMariaDB も同じ 2 つの方法で計算します。SQL Server と同じく NULL を空として扱うように CONCAT を書き出します。
computed columns with functions MariaDB lacks普通の列書き換えられない式は、普通の列とレポートの 1 行になります。SSMS は計算列の値をスクリプトに含めません。generated_not_translated
defaults with functions MariaDB lacks, and NEXT VALUE FORデフォルト値なし書き換えられないデフォルト値は含めず、レポートに記載します。default_not_translated
CHECK constraints変換済みチェック制約は同じで、各行の読み込み時に検証します。
CHECK constraints with functions MariaDB lacks作成しない書き換えられないチェック制約は含めず、レポートに記載します。check_skipped
CHECK constraints added WITH NOCHECK or disabled作成しないSQL Server はこれらのチェックを適用していないため、行が違反している可能性があります。check_not_enforced
filtered and columnstore indexes作成しないIntoSQL が書き出すのは列全体に対する b-tree インデックスです。その他は読み込み後に作り直してください。index_skipped
foreign keys外部キー、FOREIGN_KEY_CHECKS=0 で読み込み行はどの順序でも読み込め、その後はキーが新しい行をチェックします。
foreign keys to tables the dump doesn't create作成しないキーは存在しないテーブルを参照できません。foreign_key_skipped
tables on a partition schemeすべてのパーティションの行を持つ 1 つのテーブル行は同じです。必要なら MariaDB でもう一度テーブルをパーティション分割してください。partitions_dropped
temporal tables (SYSTEM_VERSIONING)WITH SYSTEM VERSIONING、現在の行から開始。履歴テーブルは普通のテーブルとしてMariaDB はこれ以降の履歴を自動で保持します。SQL Server の期間列と履歴テーブルはそのままコピーします。
schemas1 つのデータベース、テーブル名の先頭にスキーマ名MariaDB のスキーマはデータベースであり、1 つのデータベースに読み込むスクリプトでは作成できません。dbo のテーブルは名前を保ちます。schemas_merged
NOT NULL columns with values that become NULLNOT NULL を削除値を NULL にする必要があった列は NOT NULL を保てません。保つと読み込みが止まります。not_null_relaxed
views, functions, procedures, triggers, synonyms, types and partition functionsレポートに記載コードが T-SQL で書かれているため、作り直せるよう一覧にします。not_converted_objects
scripts without CREATE TABLE (data only)値から読み取った型データのみのスクリプトには行しかないため、型は値から決まります。no_schema
expressions in INSERT valuesNULLデータベースを実行しないコンバーターでは、これらを評価できません。expression_value
types IntoSQL doesn't knowlongtextテキストはどんな値も保持できます。読み込み後に型を変更してください。unknown_type
NUL characters in text保持値は NUL 文字をエスケープしてコピーします。
text that isn't valid in its encoding不正なバイトを置換文字にスクリプトは UTF-8 なので、すべての値が有効なテキストである必要があります。invalid_utf8_replaced
text decoded twice (ñ)そのままコピースクリプトにはまさにこの文字が含まれているため、そのままコピーし、レポートで指摘します。mojibake_suspected

スクリプトを MariaDB に読み込む

スクリプトはテーブルを作成して行をコピーしてから、キー、インデックス、外部キーを追加します。そのため読み込みが速く、最初のエラーで止まります。

mariadb --default-character-set=utf8mb4 mydb < sql_server.mariadb.sql

外部キーはダンプが宣言するとおりに作成し、mysqldump と同様に、行の読み込み中は FOREIGN_KEY_CHECKS=0 にします。

大きなダンプでは、サーバーと同じマシンでクライアントを実行し、1 行がとても大きい場合は max_allowed_packet を上げてください。

IntoSQL Pro なら、デスクトップアプリやコマンドラインからファイルを MariaDB に直接読み込めます。スクリプトを書き出す必要はありません。

SQL Server を最適な方法でダンプする

コンバーターはダンプの内容を読み取ります。次のオプションを使うと、より多くのデータがダンプに残ります。

  • SSMS でデータベースを右クリックし、[タスク]、[スクリプトの生成] を選んでテーブルを選択します。dbatools、mssql-scripter など同じライブラリを使うツールも同じスクリプトを書き出します。
  • [詳細設定] で [スクリプトを作成するデータの種類] を [スキーマとデータ] にします。スキーマだけのスクリプトでは、テーブルに行がありません。
  • SSMS のデフォルトである Unicode、または UTF-8 で保存します。どちらも同じように読み込め、gzip も使えます。

変換されないもの

ビュー、関数、プロシージャ、トリガー、シノニム、ルール、セキュリティポリシーは T-SQL で書かれています。黙って削除することはなく、レポートに名前で一覧するので、MariaDB 向けに書き直せます。

SQL Server から MariaDB への変換に関する質問

ここに答えがない場合は、お問い合わせページからご連絡ください。担当者が返信します。 お問い合わせページ

ダンプはアップロードされますか?

いいえ。コンバーターはブラウザ上で動作し、ダンプをディスクから少しずつ読み込むため、ダンプがコンピューターの外に出ることはありません。デスクトップアプリとコマンドラインも、お使いのコンピューター上で変換します。

ダンプはどのくらいの大きさまで扱えますか?

コンバーターはダンプ全体をメモリに保持しません。ファイルを範囲ごとに 2 回読み、読みながらスクリプトを書き出します。数 GB のダンプも、ブラウザ、デスクトップアプリ、コマンドラインで変換できます。

SSMS が保存する UTF-16 のファイルを読めますか?

はい。SSMS はデフォルトでスクリプトを UTF-16 で保存しますが、コンバーターは UTF-16 も UTF-8 も、gzip の有無にかかわらず、バッチ間の GO を含めて同じように読み込みます。

どの SQL Server バージョンのスクリプトに対応していますか?

SQL Server 2017 以降から SSMS、dbatools、mssql-scripter で書き出したスクリプトです。すべてのテスト用スクリプトは SQL Server 2017、2022、2025 で作成し、ソースとセル単位で比較しています。

IDENTITY の値は保持されますか?

はい、テーブルごとに 1 列です。主キーの先頭にある IDENTITY 列は AUTO_INCREMENT になり、最大の ID の後から続きます。シーケンスは同じオプションの MariaDB のシーケンスになります。

money、datetimeoffset など SQL Server の型はどうなりますか?

bit は tinyint(1)、money は decimal(19,4)、uniqueidentifier は UUID、datetimeoffset は UTC の datetime になります。テンポラルテーブルはシステムバージョニングを保ちます。大文字と小文字を区別しなかった列は厳密に比較するようになり、対象の列はレポートに記載されます。

プロシージャ、トリガー、ビューはどうなりますか?

データベースごとに独自の言語で書かれるため、変換はせず、レポートに名前で一覧します。

スクリプトはどの MariaDB バージョンで読み込めますか?

MariaDB 10.11 以降です。すべてのテスト用スクリプトを 10.11 と 11.4 で読み込み、問題があれば最初のエラーで止まります。