---
title: "Chuyển MariaDB sang SQL Server trên trình duyệt"
description: "Di chuyển cơ sở dữ liệu MariaDB sang SQL Server: chuyển bản dump thành tập lệnh cùng bảng, khóa, sequence và dữ liệu, kèm báo cáo mọi thay đổi."
canonical: https://intosql.com/vi/mariadb-sang-sql-server
last_updated: 2026-10-15
---

# Chuyển MariaDB sang SQL Server trên trình duyệt

Thả bản dump từ mariadb-dump, mysqldump, phpMyAdmin hoặc Adminer, dạng .sql hoặc .sql.gz, và tải xuống tập lệnh SQL Server với cùng bảng, khóa, chỉ mục và dữ liệu. Mọi giá trị SQL Server 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.

[Hướng dẫn di chuyển MariaDB sang SQL Server](https://intosql.com/docs/migrations/mariadb-to-sql-server)

[Kiểu dữ liệu từ MariaDB sang SQL Server](https://intosql.com/docs/types/mariadb-to-sql-server)

## Những gì thay đổi từ MariaDB sang SQL Server

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.

| Trong MariaDB | Trong SQL Server | Dòng báo cáo |
| --- | --- | --- |
| TINYINT(1), BOOL | bit khi mọi giá trị là 0 hoặc 1, nếu không thì smallint | `bool_kept_numeric` |
| UNSIGNED integers | TINYINT UNSIGNED là tinyint; các kiểu khác là số nguyên rộng hơn kế tiếp kèm CHECK không âm, BIGINT UNSIGNED là bigint khi mọi giá trị vừa, nếu không thì decimal(38,0) | `unsigned_widened` |
| ZEROFILL and display widths | bị bỏ | `zerofill_dropped` |
| FLOAT(M,D) | real hoặc float, bỏ số chữ số thập phân cố định | `float_scale_dropped` |
| DECIMAL(p,s) | decimal(p,s) đến 38 chữ số; vượt quá thì nvarchar | `decimal_as_text` |
| BIT(1), BIT(n) | bit; bigint đến 63 bit; decimal(20,0) cho BIT(64) |  |
| zero, partial or impossible dates (0000-00-00, 2024-02-30) | NULL | `invalid_date_null` |
| NOT NULL columns with values that become NULL | bỏ NOT NULL | `not_null_relaxed` |
| DEFAULT '0000-00-00' | không có giá trị mặc định | `zero_date_default` |
| TIME | time khi mọi giá trị nằm trong một ngày, nếu không thì nvarchar | `time_as_interval` |
| YEAR | smallint kèm CHECK phạm vi |  |
| CHAR(n), VARCHAR(n) | nvarchar(n) |  |
| text with characters past U+FFFF (emoji) in VARCHAR(n) | nvarchar(2n), hoặc nvarchar(max) khi vượt 4000 | `text_length_widened` |
| DATETIME | datetime2 |  |
| TIMESTAMP | datetimeoffset theo múi giờ bản dump nêu, UTC khi không nêu | `timestamp_zone_assumed` |
| ENUM | nvarchar kèm CHECK các giá trị |  |
| ENUM holding '' (MySQL's error value) | giá trị rỗng được ràng buộc kiểm tra cho phép | `enum_invalid_value` |
| ENUM holding values outside its list | không có CHECK | `enum_check_skipped` |
| SET | nvarchar như MySQL ghi ('a,b') |  |
| JSON | nvarchar(max) |  |
| NUL bytes in text | được giữ |  |
| text that isn't valid in its character set | byte lỗi thành ký tự thay thế | `invalid_utf8_replaced` |
| text decoded twice (Ã±) | sao chép nguyên trạng | `mojibake_suspected` |
| AUTO_INCREMENT | IDENTITY, bộ đếm đặt sau các id đã sao chép |  |
| MyISAM AUTO_INCREMENT on the second column of a key | một bộ đếm cho cả bảng | `myisam_group_autoincrement` |
| ON UPDATE CURRENT_TIMESTAMP | một trình kích hoạt AFTER UPDATE | `on_update_trigger` |
| ON UPDATE CURRENT_TIMESTAMP on a table without a primary key | không được chuyển sang | `on_update_without_key` |
| generated columns | cột tính toán, PERSISTED khi nguồn lưu chúng |  |
| generated columns with functions SQL Server lacks | một cột thường | `generated_not_translated` |
| INVISIBLE columns | cột thường | `invisible_column` |
| CHECK constraints | được chuyển đổi, viết trực tiếp trong CREATE TABLE |  |
| CHECK constraints with functions SQL Server lacks | không được tạo | `check_skipped` |
| CHECK ... NOT ENFORCED | không được tạo | `check_not_enforced` |
| defaults with functions SQL Server lacks | không có giá trị mặc định | `default_not_translated` |
| keys and indexes on a prefix, c(20) | chỉ mục trên toàn bộ cột | `prefix_whole_column` |
| FULLTEXT indexes | không được tạo | `fulltext_not_created` |
| SPATIAL indexes | không được tạo | `spatial_index_not_created` |
| functional indexes, and indexes on columns of unlimited length | không được tạo | `index_skipped` |
| foreign keys | sau dữ liệu với WITH NOCHECK, rồi kiểm tra kèm cảnh báo về hàng mồ côi |  |
| ON DELETE or ON UPDATE that cascades in a cycle or along a second path | NO ACTION | `foreign_key_action_dropped` |
| foreign keys to columns without a unique key | không được tạo | `foreign_key_skipped` |
| table and column names | như đã viết; đổi tên khi chỉ khác nhau về hoa thường | `identifier_renamed` |
| names over 116 characters | rút ngắn | `name_shortened` |
| GEOMETRY, POINT, POLYGON... | geometry, kèm SRID của từng giá trị |  |
| INET4, INET6, UUID (MariaDB) | nvarchar(39), uniqueidentifier |  |
| BINARY, VARBINARY, BLOB | binary, varbinary, varbinary(max) |  |
| PARTITION BY | một bảng | `partitions_dropped` |
| WITH SYSTEM VERSIONING (MariaDB) | bảng chứa các hàng hiện tại | `system_versioning_dropped` |
| MyISAM, MEMORY and other engines | bảng thường | `engine_dropped` |
| views, triggers, procedures, functions and events | được liệt kê trong báo cáo | `not_converted_objects` |
| dumps without CREATE TABLE | kiểu suy ra từ giá trị | `no_schema` |
| geometries in a dump without CREATE TABLE | geometry |  |
| _ci collations | collation của cơ sở dữ liệu, thường không phân biệt hoa thường |  |
| SET NAMES utf8 from utf8mb4 tables | được chuyển đổi, kèm cảnh báo | `dump_lost_four_byte_chars` |
| dumps without SET NAMES whose text isn't UTF-8 | đọc dưới dạng Latin-1 (Windows-1252) | `charset_guessed` |
| sjis, cp932, gbk, big5 dumps | đọc dưới dạng UTF-8, kèm cảnh báo | `unsupported_charset` |
| UNHEX('..'), CONVERT(b'..', UNSIGNED), CONVERT(".." USING x), ST_GeomFromText('..') in rows | được tính ra giá trị |  |
| other expressions in rows | NULL | `expression_value` |
| DEFAULT in VALUES | giá trị mặc định của cột | `default_keyword_filled` |
| DEFAULT in VALUES without a literal default | NULL | `default_keyword_null` |
| REPLACE and INSERT IGNORE | hàng thường | `replace_as_insert` |
| types IntoSQL doesn't know | nvarchar(max) | `unknown_type` |
| values that don't fit their column | NULL | `invalid_value_null` |
| unreadable geometries | NULL | `bad_geometry` |
| CREATE SEQUENCE (MariaDB) | CREATE SEQUENCE ... AS bigint, kèm giá trị tiếp theo |  |
| VECTOR(n) (MariaDB 11.7+) | nvarchar(max) với các số thực dưới dạng mảng JSON | `type_replaced` |

## Nạp tập lệnh vào SQL Server

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.

```shell
sqlcmd -b -f 65001 -S localhost -d mydb -i mariadb.sql_server.sql
```

Khóa ngoại được thêm với WITH NOCHECK rồi được kiểm tra. Nếu một hàng trỏ tới hàng không tồn tại, tập lệnh cho biết ràng buộc nào và để nó ở trạng thái chưa kiểm tra, thay vì thất bại giữa chừng.

Với bản dump lớn, hãy chạy sqlcmd trên cùng máy với máy chủ. Mỗi lô tối đa 1000 hàng được commit riêng, nên nhật ký giao dịch luôn nhỏ.

## Tạo bản dump MariaDB để 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 đó:

- --default-character-set=utf8mb4 giữ emoji và các ký tự 4 byte khác, vốn bị bản dump utf8mb3 làm mất trước khi trình chuyển đổi nhìn thấy.
- --hex-blob ghi cột nhị phân và giá trị VECTOR dưới dạng thập lục phân, không bị hỏng khi sao chép giữa các hệ thống.
- --routines --triggers --events thêm các đối tượng đó vào bản dump, để báo cáo có thể liệt kê chúng.

## Những gì không được chuyển đổi

Khung nhìn, trình kích hoạt, thủ tục lưu trữ, hàm và sự kiện được viết bằng ngôn ngữ riêng của MariaDB. 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 SQL Server.

## Câu hỏi về MariaDB sang SQL Server

### 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.

### Bản dump có thể đến từ những phiên bản MariaDB nào?

Bản dump từ mariadb-dump và mysqldump trên MariaDB 10.3 đến 12, với một INSERT mỗi bảng hoặc một INSERT mỗi hàng. Mọi bản dump thử nghiệm đến từ MariaDB 10.11, 11.4 và 11.8 và được so với nguồn từng ô một.

### Cột UUID, INET6, JSON và VECTOR có được giữ không?

UUID thành uniqueidentifier, cột INET thành nvarchar, JSON thành nvarchar(max), và VECTOR thành mảng JSON chứa các số thực của nó. Ngày bằng 0 thành NULL và báo cáo đếm chúng.

### Giá trị AUTO_INCREMENT và sequence có được giữ không?

Có. Mỗi cột AUTO_INCREMENT trở thành cột IDENTITY tiếp tục sau id lớn nhất. Sequence thành sequence SQL Server, và giá trị mặc định lấy từ một sequence tiếp tục lấy từ nó.

### Còn thủ tục lưu trữ và trình kích hoạt 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 SQL Server nào?

SQL Server 2017 đến 2025. Cùng một tập lệnh nạp được trên từng phiên bản, và dừng ở lỗi đầu tiên nếu có sự cố.

## Từ MariaDB

- [MariaDB sang PostgreSQL](https://intosql.com/vi/mariadb-sang-postgresql)
- [MariaDB sang MySQL](https://intosql.com/vi/mariadb-sang-mysql)
- [MariaDB sang MariaDB](https://intosql.com/vi/mariadb-sang-mariadb)
- [MariaDB sang SQLite](https://intosql.com/vi/mariadb-sang-sqlite)
- [MariaDB sang Oracle](https://intosql.com/vi/mariadb-sang-oracle)

## Sang SQL Server

- [MySQL sang SQL Server](https://intosql.com/vi/mysql-sang-sql-server)
- [PostgreSQL sang SQL Server](https://intosql.com/vi/postgresql-sang-sql-server)
- [SQL Server sang SQL Server](https://intosql.com/vi/sql-server-sang-sql-server)
- [SQLite sang SQL Server](https://intosql.com/vi/sqlite-sang-sql-server)
- [Oracle sang SQL Server](https://intosql.com/vi/oracle-sang-sql-server)

## Hướng dẫn và mọi cặp

- [SQL Server sang MariaDB](https://intosql.com/vi/sql-server-sang-mariadb)
- [Hướng dẫn di chuyển MariaDB sang SQL Server](https://intosql.com/docs/migrations/mariadb-to-sql-server)
- [Kiểu dữ liệu từ MariaDB sang SQL Server](https://intosql.com/docs/types/mariadb-to-sql-server)
- [Mọi cặp cơ sở dữ liệu](https://intosql.com/vi/chuyen-co-so-du-lieu)
