MariaDB 강좌 / 데이터베이스 만들기: CREATE DATABASE·USE·문자 집합
CREATE DATABASE는 서버 안에 데이터베이스를 만들고 USE는 현재 접속의 작업 대상을 선택합니다. 한글과 다양한 문자를 저장할 학습 데이터베이스는 utf8mb4로 명시하고, 생성 여부와 문자 집합·정렬 규칙을 따로 확인해야 합니다.
데이터베이스 이름과 준비 조건
서버와 클라이언트 접속이 가능한 상태에서 course_user@127.0.0.1을 사용합니다. 설치 강좌에서 shopcourse.* 범위의 CREATE 등을 부여했으므로 이 이름의 데이터베이스를 만들 수 있습니다. 다른 이름으로 바꾸려면 그 이름에 맞는 권한도 준비해야 합니다.
서버가 하나여도 데이터베이스는 여러 개일 수 있습니다. 이 강좌에서는 shopcourse를 상품·고객·주문 실습의 작업 공간으로 사용합니다. 시스템 데이터베이스인 mysql·information_schema 등과 구분하고, 운영 서비스의 데이터베이스를 실습 대상으로 선택하지 않습니다.
CREATE DATABASE로 만들고 설정 확인하기
다음 전체 SQL을 클라이언트에 입력하거나 UTF-8 lesson05-create-database.sql로 저장해 SOURCE로 실행합니다. 접속 밖의 명령이 아니라 접속 안에서 실행할 SQL입니다.
CREATE DATABASE IF NOT EXISTS shopcourse CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; SHOW WARNINGS; USE shopcourse; SELECT DATABASE() AS current_database; SHOW CREATE DATABASE shopcourse; SELECT SCHEMA_NAME, DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME FROM information_schema.SCHEMATA WHERE SCHEMA_NAME = 'shopcourse';
새 환경이면 shopcourse가 생성되고 current_database 열에 shopcourse가 나옵니다. 마지막 조회에는 문자 집합 utf8mb4와 정렬 규칙 utf8mb4_unicode_ci가 표시되어야 합니다. SHOW CREATE DATABASE의 문장은 서버 버전에 따라 인용 방식·주석 형식 등이 다를 수 있으므로 의미와 설정값을 비교하세요.
| SCHEMA_NAME | DEFAULT_CHARACTER_SET_NAME | DEFAULT_COLLATION_NAME |
|---|---|---|
| shopcourse | utf8mb4 | utf8mb4_unicode_ci |
문법과 CREATE 권한 조건은 CREATE DATABASE, 저장된 정의 조회는 SHOW CREATE DATABASE 문서를 참고하세요. 이 단계를 실행했다고 products 테이블이나 상품 행까지 만들어지는 것은 아닙니다.
IF NOT EXISTS는 기존 설정을 바꾸지 않습니다
같은 이름이 있으면 IF NOT EXISTS는 이미 존재한다는 안내를 내고 새로 만들지 않습니다. 기존 데이터베이스의 문자 집합이 다른데 이 문장을 다시 실행해도 그 설정이 자동 교체되지는 않습니다. 그래서 SHOW WARNINGS와 설정 조회를 함께 넣었습니다.
기존 shopcourse가 보이면 이전 실습 결과인지 먼저 확인합니다. 테이블과 데이터가 들어 있는 상태에서 “처음부터 다시”라는 이유로 DROP DATABASE를 바로 실행하지 않습니다. 새 학습 이름을 선택하거나 변경이 필요한 범위와 권한을 판단하고, 실제 저장된 데이터의 변환은 별도 작업으로 다룹니다.
문자 집합과 정렬 규칙의 역할
| 항목 | 결정하는 것 | 이번 실습 |
|---|---|---|
| 문자 집합(character set) | 문자를 인코딩해 표현하는 방식과 범위 | utf8mb4 |
| 정렬 규칙(collation) | 문자열을 비교하고 정렬하는 규칙 | utf8mb4_unicode_ci |
| 연결 문자 집합 | 클라이언트와 서버가 SQL·문자 결과를 주고받는 방식 | 접속 옵션 --default-character-set=utf8mb4 |
| 테이블·열의 설정 | 실제 저장 위치의 문자 설정; 기본값을 상속하거나 별도 지정 | 6강 products에서 명시적으로 지정 |
utf8mb4는 4바이트 문자를 포함하는 UTF-8 문자 집합입니다. 이름이 utf8인 설정이 모든 버전에서 utf8mb4를 뜻한다고 가정하지 말고 실제 정의를 확인하세요. 이 강좌에서는 배포판 간 공통 실습을 위해 오래 사용된 utf8mb4_unicode_ci를 명시하며, 최신 서버의 기본 정렬 규칙과 같다는 뜻은 아닙니다.
정렬 규칙은 단순히 화면에 글자가 보이는 모양이 아닙니다. 대소문자 비교, 문자열 정렬과 고유값 판단에도 관련됩니다. 설정의 상속과 적용 범위는 문자 집합과 정렬 규칙 설정 문서에서 확인할 수 있습니다.
다음은 같은 A·a 문자열을 두 규칙으로 비교하는 작은 실험입니다. 데이터베이스 이름이나 저장된 상품을 변경하지 않고 비교 규칙 한 가지를 바꿉니다.
SELECT _utf8mb4'A' COLLATE utf8mb4_unicode_ci = _utf8mb4'a' COLLATE utf8mb4_unicode_ci AS case_insensitive, _utf8mb4'A' COLLATE utf8mb4_bin = _utf8mb4'a' COLLATE utf8mb4_bin AS binary_comparison;
| case_insensitive | binary_comparison |
|---|---|
| 1 | 0 |
여기서 1은 같음, 0은 다름입니다. A/a 사례의 결과를 모든 언어의 모든 문자 비교 규칙으로 일반화하지 않습니다. 문자열 인코딩 문제와 대소문자 비교 요구는 서로 다른 판단입니다.
USE는 현재 연결의 기본 데이터베이스 선택입니다
USE는 이 클라이언트 연결에서 이름을 생략한 테이블 작업의 기본 대상을 선택합니다. 다른 클라이언트 연결의 선택까지 바꾸거나 MariaDB 서버 전체 기본값을 영구 변경하는 명령은 아닙니다.
USE shopcourse; SELECT DATABASE() AS current_database; SHOW TABLES;
새 데이터베이스의 SHOW TABLES가 비어 있으면 테이블이 없다는 뜻이며 생성 실패로 단정하지 않습니다. 작업 대상 선택은 새 연결에서 다시 확인합니다. 특정 데이터베이스 이름을 명시하는 shopcourse.products 표기와 USE로 기본 대상을 선택하는 방법도 구분하세요.
이 선택 상태에서 상품을 저장하는 전체 과정은 상품 테이블을 만들고 조회하는 실습에서 사용합니다. 기본 관리 명령을 별도로 조회할 때는 데이터베이스 조회·생성·삭제·이름 변경 설명도 참고할 수 있습니다.
권한·선택·한글 오류를 점검하기
| 오류 또는 예상과 다른 결과 | 확인할 대상 |
|---|---|
| Access denied / CREATE 권한 없음 | 로그인한 CURRENT_USER()와 SHOW GRANTS; 설치 단계의 shopcourse 권한 일치 |
| Unknown database | 이름 철자·서버 주소·포트; 다른 서버에 생성했는지 확인 |
| No database selected | 이 연결에서 USE shopcourse 실행 여부 |
| 정렬 규칙이 예시와 다름 | 기존 DB 여부와 SHOW CREATE DATABASE; IF NOT EXISTS를 설정 변경 명령으로 오인하지 않기 |
| 한글이 깨짐 | 원본 파일 UTF-8·클라이언트 문자 집합·테이블/열 설정을 각각 확인 |
초기 설정을 확인하는 실습에는 데이터베이스 삭제가 필요하지 않습니다. 기존 데이터베이스 기본 문자 설정을 바꾸더라도 이미 있는 테이블·열이 자동으로 전부 변환되는 것은 아닙니다. 값을 바꾸기 전 원래 SHOW CREATE DATABASE 결과와 테이블 정의를 보관하고 필요한 적용 범위를 정해야 합니다.









