Chuyển SQL Server sang MariaDB
Thả tập lệnh mà Generate Scripts của SSMS ghi với schema và dữ liệu, dạng .sql hoặc .sql.gz, UTF-16 hoặc UTF-8, và tải xuống tập lệnh MariaDB với cùng bảng, khóa, chỉ mục và dữ liệu. Mọi giá trị MariaDB không chứa được nguyên trạng, và mọi đối tượng nó không hỗ trợ, đều được liệt kê trong báo cáo.
Đã chuyển đổi 18 hàng, 3 bản sửa, không hàng nào bị từ chối
Các bảng trong shop_2024_sqlserver.sqlBản dump SQL Server · do SQL Server Management Objects ghi · utf-8
orders10 hàng1
11 cột id int not null customer_id int not null status varchar(10) not null total decimal(19,4) not null items tinyint unsigned not null ordered_at datetime not null shipped_at datetime(6) note text details text order_ref uuid not null total_with_tax decimal(12,2) customers8 hàng2
8 cột id int not null name varchar(100) not null email varchar(200) not null country char(2) not null is_active tinyint(1) not null signed_up date created_at datetime not null row_version blob
Không được chuyển đổi
- Khung nhìn paid_orders
- Trình kích hoạt orders_no_negative
Mỗi cơ sở dữ liệu viết các đối tượng này bằng ngôn ngữ riêng. Hãy viết lại chúng cho 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;
Bản sửa
- "shipped_at" của orders là datetime2(7), có nhiều chữ số của giây hơn mức MariaDB giữ được, nên nó là datetime(6) và các chữ số cuối bị cắt.
- "created_at" của customers chứa thời điểm kèm múi giờ; MariaDB không có kiểu giữ được múi giờ, nên chúng được lưu theo UTC dưới dạng datetime.
- "row_version" của customers là phiên bản hàng do SQL Server tự đặt; bản dump không có giá trị cho nó, nên nó là blob và để trống.
Cần xem lại
- 6 cột văn bản trong nguồn so sánh không phân biệt hoa thường; MariaDB so sánh chính xác, nên khóa duy nhất và tìm kiếm có thể hoạt động khác. Hãy dùng một collation hoặc kiểu cột không phân biệt hoa thường cho các cột cần điều đó.
- 2 khung nhìn, trình kích hoạt, thủ tục hoặc sự kiện không được chuyển đổi; báo cáo liệt kê từng mục. Hãy tạo lại chúng thủ công trong MariaDB.
- Ràng buộc kiểm tra check1 trên orders không viết được cho MariaDB (function isjson), nên không được tạo. Hãy viết ràng buộc kiểm tra thủ công nếu nó quan trọng.
- Chỉ mục idx_orders_pending trên orders dùng một biểu thức không viết được cho MariaDB (neither MySQL 5.7 nor MariaDB index an expression), nên không được tạo. Hãy tạo chỉ mục thủ công nếu truy vấn cần nó.
Tệp được chuyển đổi ngay trên máy tính này và không bao giờ được tải lên.
Mẫu khác:
Những gì thay đổi từ SQL Server sang MariaDB
Mỗi hàng là một quy tắc trình chuyển đổi áp dụng, kèm dòng báo cáo được ghi khi quy tắc thay đổi dữ liệu của bạn.
bit
tinyint(1)
BOOLEAN của MariaDB là TINYINT(1): 1 và 0, đúng như bit lưu chúng.
char(n), varchar(n), nchar(n), nvarchar(n), varchar(max), text
char(n), varchar(n) đến 1024 ký tự, vượt quá thì kiểu text
Văn bản giữ mọi ký tự dưới dạng utf8mb4. Cột trong khóa tối đa là varchar(768), độ dài lớn nhất một khóa chứa được.
decimal(p,s), money, smallmoney
decimal(p,s); money thành decimal(19,4)
decimal chứa 65 chữ số, nhiều hơn 38 của SQL Server, nên mọi giá trị đều chính xác.
datetime, datetime2, smalldatetime
datetime(p)
datetime là thời gian theo đồng hồ ở cả hai bên.
datetime2(7), time(7) and datetimeoffset(7)
sáu chữ số của giây, chữ số thứ bảy bị cắt
MariaDB giữ đến micro giây; chữ số thứ bảy (100 nano giây) bị cắt, không bao giờ làm tròn, nên không giá trị nào nhảy sang giây hay ngày kế tiếp.
Dòng báo cáo: fraction_cut
datetimeoffset
datetime(p) theo UTC
TIMESTAMP của MariaDB chỉ đến năm 2038, nên các thời điểm được lưu dưới dạng datetime theo UTC, cùng một thời điểm bất kể độ lệch của mỗi giá trị.
Dòng báo cáo: moments_as_utc
time
time(p)
Cùng các giờ trong ngày.
dates before the year 1000
NULL
MariaDB lưu năm 1000 đến 9999, còn SQL Server lùi về tận năm 1. Những giá trị đó thành NULL và báo cáo đếm chúng.
Dòng báo cáo: date_out_of_range
json (SQL Server 2025)
json, một longtext kèm ràng buộc kiểm tra JSON
Cùng các giá trị JSON, mà hàm JSON của MariaDB đọc được.
uniqueidentifier
uuid
Cùng các định danh, viết bằng chữ thường.
binary, varbinary, image
binary(n), varbinary(n) và các kiểu blob
Byte vẫn là byte.
geometry, geography
blob với byte riêng của SQL Server
SSMS ghi giá trị không gian theo định dạng tuần tự hóa riêng của SQL Server, được giữ nguyên từng byte.
Dòng báo cáo: spatial_as_native
rowversion, timestamp
blob, để trống
SQL Server tự đặt phiên bản hàng và SSMS không ghi giá trị cho nó.
Dòng báo cáo: rowversion_empty
xml, sql_variant, hierarchyid, vector
longtext
MariaDB không có kiểu tương đương; xml và sql_variant giữ văn bản của từng giá trị và hierarchyid giữ đường dẫn của nó, ví dụ /1/2/.
Dòng báo cáo: type_replaced
collations that ignore case (_CI_)
so sánh chính xác (utf8mb4_bin)
Các bảng dùng utf8mb4_bin để khóa duy nhất phân biệt những gì SQL Server đã phân biệt; cột từng không phân biệt hoa thường sẽ mất đặc tính đó. Quy tắc dấu khác nhau giữa các phiên bản, nên không có collation _ci nào khớp với của SQL Server trên mọi phiên bản.
Dòng báo cáo: case_insensitive_collation
IDENTITY
AUTO_INCREMENT, tiếp tục sau id lớn nhất
Cột đứng đầu khóa chính được đếm; bộ đếm tiếp tục sau id lớn nhất.
IDENTITY columns that don't lead the primary key
một số nguyên thường
MariaDB đếm một cột mỗi bảng, ở đầu một khóa; cột khác giữ giá trị mà không có bộ đếm.
Dòng báo cáo: counter_dropped
CREATE SEQUENCE
CREATE SEQUENCE với cùng các tùy chọn
Sequence của MariaDB hoạt động giống vậy. SSMS không ghi sequence đã chạy đến đâu, nên nó bắt đầu từ điểm lúc được tạo.
computed columns
cột tính toán, STORED khi PERSISTED, nếu không thì VIRTUAL
MariaDB tính chúng theo cùng hai cách, với CONCAT được viết để NULL được tính là rỗng như trong SQL Server.
computed columns with functions MariaDB lacks
một cột thường
Công thức không viết được để lại một cột thường và một dòng trong báo cáo; SSMS không ghi giá trị cho cột tính toán.
Dòng báo cáo: generated_not_translated
defaults with functions MariaDB lacks, and NEXT VALUE FOR
không có giá trị mặc định
Giá trị mặc định không viết được sẽ bị bỏ và được báo cáo.
Dòng báo cáo: default_not_translated
CHECK constraints
được chuyển đổi
Cùng các ràng buộc kiểm tra, được kiểm tra khi từng hàng được nạp.
CHECK constraints with functions MariaDB lacks
không được tạo
Ràng buộc kiểm tra không viết được sẽ bị bỏ và được báo cáo.
Dòng báo cáo: check_skipped
CHECK constraints added WITH NOCHECK or disabled
không được tạo
SQL Server không áp dụng các ràng buộc kiểm tra này, nên các hàng có thể vi phạm chúng.
Dòng báo cáo: check_not_enforced
filtered and columnstore indexes
không được tạo
IntoSQL ghi chỉ mục b-tree trên toàn bộ cột; hãy tạo lại các chỉ mục khác sau khi nạp.
Dòng báo cáo: index_skipped
foreign keys
khóa ngoại, nạp với FOREIGN_KEY_CHECKS=0
Các hàng nạp theo thứ tự bất kỳ, và khóa kiểm tra các hàng mới sau đó.
foreign keys to tables the dump doesn't create
không được tạo
Khóa không thể tham chiếu tới bảng không tồn tại.
Dòng báo cáo: foreign_key_skipped
tables on a partition scheme
một bảng chứa các hàng của mọi phân vùng
Các hàng giữ nguyên; hãy phân vùng lại bảng trong MariaDB nếu cần.
Dòng báo cáo: partitions_dropped
temporal tables (SYSTEM_VERSIONING)
WITH SYSTEM VERSIONING, bắt đầu từ các hàng hiện tại; bảng lịch sử thành bảng thường
Từ nay MariaDB tự giữ lịch sử; các cột period và bảng lịch sử của SQL Server được sao chép như cũ.
schemas
một cơ sở dữ liệu, mỗi bảng có tên schema ở đầu
Schema của MariaDB là cơ sở dữ liệu, thứ mà tập lệnh nạp vào một cơ sở dữ liệu không thể tạo; bảng trong dbo giữ nguyên tên.
Dòng báo cáo: schemas_merged
NOT NULL columns with values that become NULL
bỏ NOT NULL
Cột có giá trị phải chuyển thành NULL không thể giữ NOT NULL, nếu không quá trình nạp sẽ dừng.
Dòng báo cáo: not_null_relaxed
views, functions, procedures, triggers, synonyms, types and partition functions
được liệt kê trong báo cáo
Mã của chúng viết bằng T-SQL, nên được liệt kê để bạn tạo lại.
Dòng báo cáo: not_converted_objects
scripts without CREATE TABLE (data only)
kiểu suy ra từ giá trị
Tập lệnh chỉ có dữ liệu thì chỉ có các hàng, nên kiểu được suy ra từ giá trị.
Dòng báo cáo: no_schema
expressions in INSERT values
NULL
Trình chuyển đổi không chạy cơ sở dữ liệu thì không tính được chúng.
Dòng báo cáo: expression_value
types IntoSQL doesn't know
longtext
Văn bản chứa được mọi giá trị; hãy đổi kiểu sau khi nạp.
Dòng báo cáo: unknown_type
NUL characters in text
được giữ
Giá trị được sao chép với ký tự NUL được thoát.
text that isn't valid in its encoding
byte lỗi thành ký tự thay thế
Tập lệnh là UTF-8 và mọi giá trị phải là văn bản hợp lệ.
Dòng báo cáo: invalid_utf8_replaced
text decoded twice (ñ)
sao chép nguyên trạng
Tập lệnh chứa đúng các ký tự này, nên chúng được sao chép; báo cáo chỉ ra chúng.
Dòng báo cáo: mojibake_suspected
| Trong SQL Server | Trong MariaDB | Dòng báo cáo |
|---|---|---|
| bit | tinyint(1)BOOLEAN của MariaDB là TINYINT(1): 1 và 0, đúng như bit lưu chúng. | |
| char(n), varchar(n), nchar(n), nvarchar(n), varchar(max), text | char(n), varchar(n) đến 1024 ký tự, vượt quá thì kiểu textVăn bản giữ mọi ký tự dưới dạng utf8mb4. Cột trong khóa tối đa là varchar(768), độ dài lớn nhất một khóa chứa được. | |
| decimal(p,s), money, smallmoney | decimal(p,s); money thành decimal(19,4)decimal chứa 65 chữ số, nhiều hơn 38 của SQL Server, nên mọi giá trị đều chính xác. | |
| datetime, datetime2, smalldatetime | datetime(p)datetime là thời gian theo đồng hồ ở cả hai bên. | |
| datetime2(7), time(7) and datetimeoffset(7) | sáu chữ số của giây, chữ số thứ bảy bị cắtMariaDB giữ đến micro giây; chữ số thứ bảy (100 nano giây) bị cắt, không bao giờ làm tròn, nên không giá trị nào nhảy sang giây hay ngày kế tiếp. | fraction_cut |
| datetimeoffset | datetime(p) theo UTCTIMESTAMP của MariaDB chỉ đến năm 2038, nên các thời điểm được lưu dưới dạng datetime theo UTC, cùng một thời điểm bất kể độ lệch của mỗi giá trị. | moments_as_utc |
| time | time(p)Cùng các giờ trong ngày. | |
| dates before the year 1000 | NULLMariaDB lưu năm 1000 đến 9999, còn SQL Server lùi về tận năm 1. Những giá trị đó thành NULL và báo cáo đếm chúng. | date_out_of_range |
| json (SQL Server 2025) | json, một longtext kèm ràng buộc kiểm tra JSONCùng các giá trị JSON, mà hàm JSON của MariaDB đọc được. | |
| uniqueidentifier | uuidCùng các định danh, viết bằng chữ thường. | |
| binary, varbinary, image | binary(n), varbinary(n) và các kiểu blobByte vẫn là byte. | |
| geometry, geography | blob với byte riêng của SQL ServerSSMS ghi giá trị không gian theo định dạng tuần tự hóa riêng của SQL Server, được giữ nguyên từng byte. | spatial_as_native |
| rowversion, timestamp | blob, để trốngSQL Server tự đặt phiên bản hàng và SSMS không ghi giá trị cho nó. | rowversion_empty |
| xml, sql_variant, hierarchyid, vector | longtextMariaDB không có kiểu tương đương; xml và sql_variant giữ văn bản của từng giá trị và hierarchyid giữ đường dẫn của nó, ví dụ /1/2/. | type_replaced |
| collations that ignore case (_CI_) | so sánh chính xác (utf8mb4_bin)Các bảng dùng utf8mb4_bin để khóa duy nhất phân biệt những gì SQL Server đã phân biệt; cột từng không phân biệt hoa thường sẽ mất đặc tính đó. Quy tắc dấu khác nhau giữa các phiên bản, nên không có collation _ci nào khớp với của SQL Server trên mọi phiên bản. | case_insensitive_collation |
| IDENTITY | AUTO_INCREMENT, tiếp tục sau id lớn nhấtCột đứng đầu khóa chính được đếm; bộ đếm tiếp tục sau id lớn nhất. | |
| IDENTITY columns that don't lead the primary key | một số nguyên thườngMariaDB đếm một cột mỗi bảng, ở đầu một khóa; cột khác giữ giá trị mà không có bộ đếm. | counter_dropped |
| CREATE SEQUENCE | CREATE SEQUENCE với cùng các tùy chọnSequence của MariaDB hoạt động giống vậy. SSMS không ghi sequence đã chạy đến đâu, nên nó bắt đầu từ điểm lúc được tạo. | |
| computed columns | cột tính toán, STORED khi PERSISTED, nếu không thì VIRTUALMariaDB tính chúng theo cùng hai cách, với CONCAT được viết để NULL được tính là rỗng như trong SQL Server. | |
| computed columns with functions MariaDB lacks | một cột thườngCông thức không viết được để lại một cột thường và một dòng trong báo cáo; SSMS không ghi giá trị cho cột tính toán. | generated_not_translated |
| defaults with functions MariaDB lacks, and NEXT VALUE FOR | không có giá trị mặc địnhGiá trị mặc định không viết được sẽ bị bỏ và được báo cáo. | default_not_translated |
| CHECK constraints | được chuyển đổiCùng các ràng buộc kiểm tra, được kiểm tra khi từng hàng được nạp. | |
| CHECK constraints with functions MariaDB lacks | không được tạoRàng buộc kiểm tra không viết được sẽ bị bỏ và được báo cáo. | check_skipped |
| CHECK constraints added WITH NOCHECK or disabled | không được tạoSQL Server không áp dụng các ràng buộc kiểm tra này, nên các hàng có thể vi phạm chúng. | check_not_enforced |
| filtered and columnstore indexes | không được tạoIntoSQL ghi chỉ mục b-tree trên toàn bộ cột; hãy tạo lại các chỉ mục khác sau khi nạp. | index_skipped |
| foreign keys | khóa ngoại, nạp với FOREIGN_KEY_CHECKS=0Các hàng nạp theo thứ tự bất kỳ, và khóa kiểm tra các hàng mới sau đó. | |
| foreign keys to tables the dump doesn't create | không được tạoKhóa không thể tham chiếu tới bảng không tồn tại. | foreign_key_skipped |
| tables on a partition scheme | một bảng chứa các hàng của mọi phân vùngCác hàng giữ nguyên; hãy phân vùng lại bảng trong MariaDB nếu cần. | partitions_dropped |
| temporal tables (SYSTEM_VERSIONING) | WITH SYSTEM VERSIONING, bắt đầu từ các hàng hiện tại; bảng lịch sử thành bảng thườngTừ nay MariaDB tự giữ lịch sử; các cột period và bảng lịch sử của SQL Server được sao chép như cũ. | |
| schemas | một cơ sở dữ liệu, mỗi bảng có tên schema ở đầuSchema của MariaDB là cơ sở dữ liệu, thứ mà tập lệnh nạp vào một cơ sở dữ liệu không thể tạo; bảng trong dbo giữ nguyên tên. | schemas_merged |
| NOT NULL columns with values that become NULL | bỏ NOT NULLCột có giá trị phải chuyển thành NULL không thể giữ NOT NULL, nếu không quá trình nạp sẽ dừng. | not_null_relaxed |
| views, functions, procedures, triggers, synonyms, types and partition functions | được liệt kê trong báo cáoMã của chúng viết bằng T-SQL, nên được liệt kê để bạn tạo lại. | not_converted_objects |
| scripts without CREATE TABLE (data only) | kiểu suy ra từ giá trịTập lệnh chỉ có dữ liệu thì chỉ có các hàng, nên kiểu được suy ra từ giá trị. | no_schema |
| expressions in INSERT values | NULLTrình chuyển đổi không chạy cơ sở dữ liệu thì không tính được chúng. | expression_value |
| types IntoSQL doesn't know | longtextVăn bản chứa được mọi giá trị; hãy đổi kiểu sau khi nạp. | unknown_type |
| NUL characters in text | được giữGiá trị được sao chép với ký tự NUL được thoát. | |
| text that isn't valid in its encoding | byte lỗi thành ký tự thay thếTập lệnh là UTF-8 và mọi giá trị phải là văn bản hợp lệ. | invalid_utf8_replaced |
| text decoded twice (ñ) | sao chép nguyên trạngTập lệnh chứa đúng các ký tự này, nên chúng được sao chép; báo cáo chỉ ra chúng. | mojibake_suspected |
Nạp tập lệnh vào MariaDB
Tập lệnh tạo bảng, sao chép các hàng, rồi thêm khóa, chỉ mục và khóa ngoại, nên nạp nhanh và dừng ở lỗi đầu tiên.
mariadb --default-character-set=utf8mb4 mydb < sql_server.mariadb.sqlKhóa ngoại được tạo đúng như bản dump khai báo, với FOREIGN_KEY_CHECKS=0 trong khi nạp các hàng, như mysqldump.
Với bản dump lớn, hãy chạy client trên cùng máy với máy chủ, và tăng max_allowed_packet nếu một hàng rất lớn.
IntoSQL Pro nạp tệp thẳng vào MariaDB từ ứng dụng máy tính hoặc dòng lệnh, không cần tạo tập lệnh.
Tạo bản dump SQL Server để có kết quả tốt nhất
Trình chuyển đổi đọc những gì bản dump chứa. Các tùy chọn sau giữ lại nhiều dữ liệu hơn trong đó:
- Trong SSMS, nhấp chuột phải vào cơ sở dữ liệu, Tasks, Generate Scripts, rồi chọn các bảng. dbatools, mssql-scripter và các công cụ khác dựng trên cùng thư viện ghi ra cùng một tập lệnh.
- Trong Advanced, đặt Types of data to script thành Schema and data. Tập lệnh chỉ có schema sẽ có bảng mà không có hàng.
- Lưu dưới dạng Unicode, mặc định của SSMS, hoặc UTF-8: cả hai đều được đọc như nhau, và gzip cũng được.
Những gì không được chuyển đổi
Khung nhìn, hàm, thủ tục, trình kích hoạt, từ đồng nghĩa, quy tắc và chính sách bảo mật được viết bằng T-SQL. Chúng được liệt kê theo tên trong báo cáo, không bao giờ bị bỏ âm thầm, để bạn viết lại cho MariaDB.
Câu hỏi về SQL Server sang MariaDB
Chưa có câu trả lời ở đây? Hãy viết cho chúng tôi từ trang liên hệ, sẽ có người trả lời. Trang liên hệ
Bản dump của tôi có bị tải lên không?
Không. Trình chuyển đổi chạy trong trình duyệt và đọc bản dump từ ổ đĩa theo từng phần, nên nó không bao giờ rời khỏi máy tính của bạn. Ứng dụng máy tính và dòng lệnh cũng chuyển đổi ngay trên máy tính của bạn.
Bản dump có thể lớn đến đâu?
Trình chuyển đổi không bao giờ giữ toàn bộ bản dump trong bộ nhớ: nó đọc tệp hai lần, theo từng đoạn, và ghi tập lệnh trong lúc đọc. Bản dump nhiều gigabyte vẫn chuyển đổi được trong trình duyệt, trong ứng dụng máy tính và bằng dòng lệnh.
Nó có đọc được tệp UTF-16 mà SSMS lưu không?
Có. SSMS lưu tập lệnh dạng UTF-16 theo mặc định, và trình chuyển đổi đọc UTF-16 và UTF-8 như nhau, có nén gzip hay không, với GO giữa các lô.
Tập lệnh có thể đến từ những phiên bản SQL Server nào?
Tập lệnh do SSMS, dbatools hoặc mssql-scripter ghi từ SQL Server 2017 trở lên. Mọi tập lệnh thử nghiệm đến từ SQL Server 2017, 2022 và 2025 và được so với nguồn từng ô một.
Giá trị IDENTITY có được giữ không?
Có, cho một cột mỗi bảng: cột IDENTITY đứng đầu khóa chính trở thành AUTO_INCREMENT và tiếp tục sau id lớn nhất. Sequence thành sequence MariaDB với cùng các tùy chọn.
money, datetimeoffset và các kiểu SQL Server khác sẽ ra sao?
bit thành tinyint(1), money thành decimal(19,4), uniqueidentifier thành UUID, và datetimeoffset thành datetime theo UTC. Bảng temporal giữ system versioning. Cột từng không phân biệt hoa thường sẽ so sánh chính xác, và báo cáo cho biết những cột nào.
Còn thủ tục, trình kích hoạt và khung nhìn thì sao?
Chúng được liệt kê theo tên trong báo cáo và không được chuyển đổi, vì mỗi cơ sở dữ liệu viết chúng bằng ngôn ngữ riêng.
Tập lệnh nạp được trên những phiên bản MariaDB nào?
MariaDB 10.11 trở lên. Mọi tập lệnh thử nghiệm đều nạp được trên 10.11 và 11.4, và dừng ở lỗi đầu tiên nếu có sự cố.