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 | 
댓글