본문 바로가기
Database

[MSSQL] MSSQL과 MySQL의 기초 문법 차이 정리

by JINJINC 2025. 5. 26.
728x90
반응형

데이터베이스와 테이블 생성법 비교

항목 MSSQL MySQL
자동 증가 (Auto Increment) IDENTITY(1,1) AUTO_INCREMENT
문자열 기본 인코딩 VARCHAR (기본 Latin1, 설정 가능) VARCHAR (기본 UTF-8 or 설정된 charset)

MSSQL과 MySQL은 데이터베이스와 테이블을 생성할 때 다소 다른 문법을 사용합니다. MSSQL에서는 자동 증가를 IDENTITY(1,1)로 표현하며, MySQL에서는 AUTO_INCREMENT를 사용합니다.

예시:

  • MSSQL
CREATE TABLE Users (
  id INT IDENTITY(1,1) PRIMARY KEY,
  name VARCHAR(100)
);
  • MySQL
CREATE TABLE Users (
  id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(100)
);

MSSQL 에서 utf-8 사용 설정하려면?

1. 문자 인코딩 설정

MSSQL의 기본 Collation은 Latin1이며, MySQL은 기본적으로 UTF-8을 사용합니다. MSSQL에서 UTF-8을 설정하려면 다음과 같이 진행합니다.

MSSQL 2019부터 VARCHAR/CHAR 타입에도 UTF-8 인코딩을 지원하는 collation을 사용할 수 있습니다.

-- MSSQL UTF-8 설정
CREATE TABLE Users (
  name VARCHAR(100) COLLATE Korean_100_CI_AS_SC_UTF8
);

주요 UTF8 Collation 예시

Collation Name 특징
Latin1_General_100_CI_AS_SC_UTF8 영어/유럽어용
Korean_100_CI_AS_SC_UTF8 한글 포함 (권장)
Japanese_100_CI_AS_SC_UTF8 일본어
Chinese_100_CI_AS_SC_UTF8 중국어
SQL_Latin1_General_CP1_CI_AS (기존 기본값, Latin 기반)

** UTF8이 포함된 collation만이 실제 VARCHAR에서 UTF-8 인코딩을 적용합니다.

2. 테이블 생성 시 전체 default collation 설정

CREATE DATABASE MyDB
COLLATE Korean_100_CI_AS_SC_UTF8;

3. 기존 테이블의 문자셋 변경

ALTER TABLE Users
ALTER COLUMN name VARCHAR(100) COLLATE Korean_100_CI_AS_SC_UTF8;

4. 확인 및 점검

현재 설정된 Collation 확인

-- 특정 컬럼의 collation 확인
SELECT COLUMN_NAME, COLLATION_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'Users';

-- 현재 데이터베이스 기본 collation
SELECT DATABASEPROPERTYEX('MyDB', 'Collation');

문자열 연결 연산자

항목 MSSQL MySQL
문자열 연결 연산자 + CONCAT() 함수

MSSQL은 + 연산자를 사용해 문자열을 연결하고, MySQL은 CONCAT() 함수를 사용합니다.

-- MSSQL
SELECT 'Hello ' + name FROM Users;

-- MySQL
SELECT CONCAT('Hello ', name) FROM Users;

날짜 함수

기능 MSSQL MySQL
현재 날짜/시간 GETDATE() NOW()
날짜 더하기 DATEADD() DATE_ADD()
날짜 차이 DATEDIFF() (반대 방향) DATEDIFF() (날짜1 - 날짜2)

두 DBMS는 날짜 처리에도 차이가 있습니다.

-- MSSQL
SELECT GETDATE(), DATEADD(DAY, 1, GETDATE());

-- MySQL
SELECT NOW(), DATE_ADD(NOW(), INTERVAL 1 DAY);

LIMIT 및 페이징

기능 MSSQL MySQL
행 제한 TOP N 또는 OFFSET/FETCH LIMIT
페이징 방식 OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY LIMIT 10 OFFSET 10
-- MSSQL
SELECT TOP 5 * FROM Users;

-- MSSQL (페이징)
SELECT * FROM Users ORDER BY id
OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY;

-- MySQL
SELECT * FROM Users LIMIT 5;

-- MySQL (페이징)
SELECT * FROM Users LIMIT 10 OFFSET 10;

IF문 / 조건문

항목 MSSQL MySQL
조건문 함수 CASE WHEN THEN ELSE END CASE WHEN THEN ELSE END
IF 함수 IIF() (SQL Server 2012+) IF()

예시

-- MSSQL
SELECT IIF(score > 60, 'Pass', 'Fail') FROM TestResults;

-- MySQL
SELECT IF(score > 60, 'Pass', 'Fail') FROM TestResults;

변수 사용

항목 MSSQL MySQL
변수 선언 DECLARE @var INT SET @var := 1
변수 대입 SET @var = 1 또는 SELECT @var = 1 SET @var := 1

예시

-- MSSQL
DECLARE @name VARCHAR(50);
SET @name = 'John';

-- MySQL
SET @name := 'John'

서브쿼리 별칭

항목 MSSQL MySQL
서브쿼리 뒤 별칭 필수 여부 선택 (생략 가능) 필수 (생략 불가)
-- MSSQL (가능)
SELECT * FROM (SELECT * FROM Users);

-- MySQL (오류 발생)
-- 반드시 AS 혹은 별칭 붙여야 함
SELECT * FROM (SELECT * FROM Users) AS U;

시스템 함수 및 내장 함수

  • MSSQL은 NEWID()로 UUID 생성
  • MySQL은 UUID()로 UUID 생성

트랜잭션

두 DB 모두 BEGIN, COMMIT, ROLLBACK을 사용하지만, 자동 커밋 설정 방식이 다릅니다.

  • MySQL은 기본적으로 자동 커밋 (AUTOCOMMIT ON)
  • MSSQL은 기본적으로 수동 커밋 모드
728x90
반응형

'Database' 카테고리의 다른 글

[MSSQL] MSSQL 문자열 타입  (0) 2025.05.26
[MSSQL] MSSQL과 MySQL의 문법 및 기능 비교  (0) 2025.05.26
[Window Database] Database 란?  (0) 2023.04.10

댓글