This guide provides detailed information about converting SQL Server database schemas to and from other database systems using SQLMapper.
| SQL Server Type | MySQL Type | Notes |
|---|---|---|
| BIGINT | BIGINT | - |
| INT | INT | - |
| SMALLINT | SMALLINT | - |
| TINYINT | TINYINT | Range differences |
| DECIMAL(p,s) | DECIMAL(p,s) | - |
| VARCHAR(n) | VARCHAR(n) | - |
| NVARCHAR(n) | VARCHAR(n) | UTF-8 encoding |
| TEXT | LONGTEXT | - |
| DATETIME2 | DATETIME | Precision differences |
| UNIQUEIDENTIFIER | CHAR(36) | - |
| SQL Server Type | PostgreSQL Type | Notes |
|---|---|---|
| BIGINT | BIGINT | - |
| INT | INTEGER | - |
| SMALLINT | SMALLINT | - |
| DECIMAL(p,s) | NUMERIC(p,s) | - |
| VARCHAR(n) | VARCHAR(n) | - |
| NVARCHAR(n) | VARCHAR(n) | - |
| TEXT | TEXT | - |
| DATETIME2 | TIMESTAMP | - |
| UNIQUEIDENTIFIER | UUID | - |
SQL Server:
CREATE TABLE users (
id INT IDENTITY(1,1) PRIMARY KEY,
username VARCHAR(50)
);MySQL equivalent:
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50)
);PostgreSQL equivalent:
CREATE TABLE users (
id SERIAL PRIMARY KEY,
username VARCHAR(50)
);SQL Server:
CREATE PROCEDURE UpdateEmployee
@EmpID INT,
@Salary DECIMAL(10,2)
AS
BEGIN
UPDATE Employees
SET Salary = @Salary
WHERE EmployeeID = @EmpID;
END;MySQL equivalent:
DELIMITER //
CREATE PROCEDURE UpdateEmployee(
IN p_EmpID INT,
IN p_Salary DECIMAL(10,2)
)
BEGIN
UPDATE Employees
SET Salary = p_Salary
WHERE EmployeeID = p_EmpID;
END //
DELIMITER ;SQL Server uses different collation naming conventions:
-- SQL Server
COLLATE SQL_Latin1_General_CP1_CI_AS
-- MySQL
COLLATE utf8mb4_general_ci
-- PostgreSQL
COLLATE "en_US.utf8"-- SQL Server
GETDATE()
DATEADD(day, 1, GETDATE())
-- MySQL
NOW()
DATE_ADD(NOW(), INTERVAL 1 DAY)
-- PostgreSQL
CURRENT_TIMESTAMP
CURRENT_TIMESTAMP + INTERVAL '1 day'-- SQL Server
SELECT FirstName + ' ' + LastName
-- MySQL
SELECT CONCAT(FirstName, ' ', LastName)
-- PostgreSQL
SELECT FirstName || ' ' || LastName-- Original SQL Server Table
CREATE TABLE orders (
order_id INT IDENTITY(1,1),
quantity INT,
unit_price DECIMAL(10,2),
total_price AS (quantity * unit_price),
CONSTRAINT pk_orders PRIMARY KEY (order_id)
);
-- MySQL Conversion
CREATE TABLE orders (
order_id INT AUTO_INCREMENT,
quantity INT,
unit_price DECIMAL(10,2),
total_price DECIMAL(10,2) GENERATED ALWAYS AS (quantity * unit_price) STORED,
PRIMARY KEY (order_id)
);
-- PostgreSQL Conversion
CREATE TABLE orders (
order_id SERIAL,
quantity INT,
unit_price NUMERIC(10,2),
total_price NUMERIC(10,2) GENERATED ALWAYS AS (quantity * unit_price) STORED,
PRIMARY KEY (order_id)
);-- SQL Server Table with Custom Types
CREATE TABLE customer_data (
id INT IDENTITY(1,1),
customer_code UNIQUEIDENTIFIER DEFAULT NEWID(),
status VARCHAR(20),
metadata NVARCHAR(MAX),
CONSTRAINT pk_customer PRIMARY KEY (id)
);
-- MySQL Conversion
CREATE TABLE customer_data (
id INT AUTO_INCREMENT,
customer_code CHAR(36) DEFAULT (UUID()),
status VARCHAR(20),
metadata JSON,
PRIMARY KEY (id)
);
-- PostgreSQL Conversion
CREATE TABLE customer_data (
id SERIAL,
customer_code UUID DEFAULT gen_random_uuid(),
status VARCHAR(20),
metadata JSONB,
PRIMARY KEY (id)
);