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