15. 1 ๋ฌธ์์ด(CHAR ์ VARCHAR)
CHAR ํ์
- ๋ฌธ์์ด ์ ์ฅํ๋ ๋ฐ์ดํฐ ํ์
- ์ ์ฅ ๊ณต๊ฐ ํฌ๊ธฐ๊ฐ ๊ณ ์
VARCHAR ํ์
- ๊ฐ๋ณ ๊ธธ์ด๋ฅผ ์ ์ฅํ๋ฉฐ ๋ฐ์ดํฐ ๊ธธ์ด๋ฅผ ์ ์ฅํ๊ธฐ ์ํด 1~2๋ฐ์ดํธ์ ์ ์ฅ ๊ณต๊ฐ์ด ์ถ๊ฐ๋ก ๋ ํ์
- VARCHAR(10)์ 'Hello' ๋ 5๋ฐ์ดํธ ์ ์ฅ์ [5][H][e][l][l][o] ๋ก ์ด 6๋ฐ์ดํธ๋ก ์ ์ฅ
- ๋ฐ์ดํฐ ๊ธธ์ด๊ฐ 255๋ฐ์ดํธ ์ดํ๋ฉด 1๋ฐ์ดํธ๋ง ์ฌ์ฉํ๊ณ , 256 ๋ฐ์ดํธ ์ด์์ด๋ฉด 2๋ฐ์ดํธ๋ฅผ ์ฌ์ฉํ๋ค. ๊ทธ๋์, VARCHAR ํ์ ์ ์ต๋ ๊ธธ์ด๋ 65,536 ๋ฐ์ดํธ ์ด์์ผ๋ก ์ค์ ํ ์ ์๋ค.
๐กVARCHAR ํ์ ์ฌ์ฉ ์ ์ฃผ์์
MySQL ์ ํ๋์ ๋ ์ฝ๋์์ TEXT ์ BLOB ํ์ ์ ์ ์ธํ ์นผ๋ผ์ ์ ์ฒด ํฌ๊ธฐ๊ฐ 64KB(65,536 ๋ฐ์ดํธ)๋ฅผ ์ด๊ณผํ ์ ์๋ค. ์ด๋ฏธ ๋ค๋ฅธ ์นผ๋ผ์์ 40KB ์ ํฌ๊ธฐ๋ฅผ ์ฌ์ฉํ๊ณ ์๋ค๋ฉด VARCHAR ํ์ ์ 24KB๋ง ์ฌ์ฉํ ์ ์๋ค.
๋ง์ฝ, 24KB ๋ฅผ ์ด๊ณผํ๋ VARCHAR ํ์ ์ ์์ฑํ๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํ๊ฑฐ๋ ์๋์ผ๋ก VARCHAR ํ์ ์ด TEXT ํ์ ์ผ๋ก ๋์ฒด๋๋ค. ๊ทธ๋์, ์นผ๋ผ์ ์๋ก ์ถ๊ฐํ ๋๋ VARCHAR ํ์ ์ด TEXT ํ์ ์ผ๋ก ์๋์ผ๋ก ๋ณํ๋์ง ์๋์ง ํ์ธํ๋ ๊ฒ์ด ์ข๋ค.
CHAR ์ VARCHAR ํ์ ์ ์ ํ ๊ธฐ์ค
- ํน์ ์นผ๋ผ์ VARCHAR(10) ๊ฐ 4๋ฐ์ดํธ("ABCD")๋ง์ ์ ์ฅํ ์ ์๋ ๊ตฌ์กฐ์ผ ๋, ์นผ๋ผ์ ๊ฐ์ด ๋ณ๊ฒฝ๋์ด 5๋ฐ์ดํธ("ABCDE")๋ฅผ ์ ์ฅํ๋ ค๊ณ ํ๋ฉด ๋ ์ฝ๋ ์์ฒด๋ฅผ ๋ค๋ฅธ ๊ณต๊ฐ์ผ๋ก ์ฎ๊ฒจ์ ์ ์ฅํ๋ค. ์ด๋ฌํ ๋ ์ฝ๋์ ์ด๋์ด๋ ๋ถ๋ฆฌ๋ CHARํ์ ์ผ๋ก ๋ฐ์ํ๋ 2~3๋ฐ์ดํธ ๊ณต๊ฐ ๋ญ๋น๋ณด๋ค ๋ ํฐ ์์์ ๋ญ๋นํ๋ค.
๊ทธ๋์, ํ์ ์ ์ ํํ ๋๋ '์ ์ฅ๋๋ ๋ฌธ์์ด์ ๊ธธ์ด๊ฐ ๋๊ฒ ๋น์ทํ์ง' ์ '์นผ๋ผ์ ๊ฐ์ด ์์ฃผ ๋ณ๊ฒฝ๋๋์ง' ๋ฅผ ๊ณ ๋ คํด์ผ ํ๋ค.
์ฃผ๋ฏผ๋ฑ๋ก๋ฒํธ ๊ฐ์ด ํญ์ ๊ธธ์ด๊ฐ ๊ณ ์ ์ ์ด๊ฑฐ๋ ๊ฐ์ด 2~3๋ฐ์ดํธ ์ฐจ์ด๊ฐ ๋๋๋ผ๋ ์์ฃผ ๋ณ๊ฒฝ๋ ์ ์๋ ๋ถ์ ๋ฒํธ๋ ๊ฒ์๋ฌผ์ ์ํ ๊ฐ์ CHAR ํ์ ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
๐กMySQL์์ CHAR(10), VARCHAR(10) ์ ์กด์ฌํ๋ '10' ์ ์๋ฏธ
๋ฐ์ดํธ ํฌ๊ธฐ๊ฐ ์๋ ๋ฌธ์์ ์๋ฅผ ์๋ฏธํ๋ค.
- ์์ด๋ฅผ ํฌํจํ ์๊ตฌ๊ถ ์ธ์ด๋ ๊ฐ ๋ฌธ์๋ 1๋ฐ์ดํธ๋ฅผ ์ฌ์ฉ. ์ฆ, 10๊ธ์๋ฅผ ์ ์ฅํ๊ณ , 10๋ฐ์ดํธ๋ฅผ ์ฌ์ฉ
- ํ๊ตญ์ด, ์ผ๋ณธ์ด์ธ ์์์๊ถ ์ธ์ด๋ ๊ฐ ๋ฌธ์๊ฐ ์ต๋ 2๋ฐ์ดํธ๋ฅผ ์ฌ์ฉ. ์ฆ, 10๊ธ์๋ฅผ ์ ์ฅํ๊ณ ์ต๋ 20๋ฐ์ดํธ๋ฅผ ์ฌ์ฉ
- UTF-8 ๊ณผ ๊ฐ์ ์ ๋์ฝ๋๋ ์ต๋ 4๋ฐ์ดํธ๋ฅผ ์ฌ์ฉ. ์ฆ, 10๊ธ์๋ฅผ ์ ์ฅํ๊ณ ์ต๋ 40๋ฐ์ดํธ๊น์ง ์ฌ์ฉ
๋ฌธ์์ด ์ ์ฅ ๊ณต๊ฐ๊ณผ ์คํค๋ง ๋ณ๊ฒฝ
Case 1. VARCHAR(62) → VARCHAR(63) ๋ก ์คํค๋ง ๋ณ๊ฒฝ
A. ์ ๊ธ ์์ด ๋งค์ฐ ๋น ๋ฅด๊ฒ ์คํค๋ง๊ฐ ๋ณ๊ฒฝ๋๋ค.
Case 2. VARCHAR(63) → VARCHAR(64) ๋ก ์คํค๋ง ๋ณ๊ฒฝ
์ฝ๊ธฐ ์ ๊ธ์ด ๊ฑธ๋ฆฌ๋ฉฐ, ์คํค๋ง ๋ณ๊ฒฝ๋์ ์ฐ๊ธฐ ์์ ์ด ๋ถ๊ฐํ๋ค.(๊ธฐ๋ณธ ๋ฌธ์ ์งํฉ์ธ utf8mb4(UTF-8) ๋ฌธ์์งํฉ์ ์ฌ์ฉํ๋ค๊ณ ๊ฐ์ )
โถ ์ ๋ค๋ฅผ๊น?
VARCHAR(63) ์ ๋ฐ์ดํธ๋ (4 * 63 = 252๋ฐ์ดํธ)๋ก ์ ์ฅ๋ ๋ฌธ์์ด ๊ธธ์ด๋ฅผ ์ ์ฅํ๋๋ฐ 1๋ฐ์ดํธ๋ฅผ ์ฌ์ฉํ๋ค.
ํ์ง๋ง, VARCHAR(64) ์ ๋ฐ์ดํธ๋ (256๋ฐ์ดํธ๋ก ๋ฌธ์ ๊ธธ์ด๋ฅผ ์ ์ฅํ๋๋ฐ 2๋ฐ์ดํธ๋ก ๋ฐ๊ฟ์ผ ํ๊ณ , ๋ฌธ์์ด ๊ธธ์ด๋ฅผ ์ ์ฅํ๋ ๊ณต๊ฐ์ ํฌ๊ธฐ๊ฐ ๋ฐ๋๋ฉด MySQL ์ ์คํค๋ง๋ฅผ ๋ณ๊ฒฝํ๋ ๋์ ์ฝ๊ธฐ ์ ๊ธ์ ๊ฑธ์ด ์ฐ๊ธฐ ์์ ์ ๋ง๋ ๋ฉ์ปค๋์ฆ์ ๊ฐ์ง๊ณ ์๋ค.
๋ฌธ์์งํฉ ์๊ฐ
- latin ๊ณ์ด : ์ํ๋ฒณ, ์ซ์, ํค๋ณด๋์ ํน์ ๋ฌธ์๋ก๋ง ๊ตฌ์ฑ๋ ๋ฌธ์์ด ์ ์ฅํ๋๋ฐ ์ฌ์ฉ
- euckr : ํ๊ตญ์ด ์ ์ฉ, ๋ชจ๋ ๊ธ์๋ 1~2๋ฐ์ดํธ ์ฌ์ฉ
- utf8mb4 : ๋ค๊ตญ์ด ๋ฌธ์ ํฌํจ, ํ ๊ธ์๋ 1~4๋ฐ์ดํธ ์ฌ์ฉ, ๊ธฐ๋ณธ๊ฐ์ด๋ค.
์ฌ์ฉ ๊ฐ๋ฅํ ๋ฌธ์ ์งํฉ ๋ณด๋ ๋ช ๋ น์ด → SHOW CHARACTER SET;
์ฝ๋ ์ด์ (Collation)
๊ฐ๋
- ๋ฌธ์์ด ์นผ๋ผ์ ๊ฐ์ ๋ํ ๋น๊ต๋ ์ ๋ ฌ ์์๋ฅผ ์ํ ๊ท์น์ ์๋ฏธ
- MySQL์ ๋ชจ๋ ๋ฌธ์์ด ํ์ ์ ์นผ๋ผ์ ๋ ๋ฆฝ์ ์ธ ๋ฌธ์ ์งํฉ๊ณผ ์ฝ๋ ์ด์ ์ ๊ฐ์ง๋ค.
- SHOW COLLATION ๋ช ๋ น์ ํตํด ํ์ธํ๋ฉฐ, DEFAULT ์ Yes ๊ฐ ์ ํ ์ฝ๋ ์ด์ ์ด ํด๋น ๋ฌธ์ ์งํฉ์ ๊ธฐ๋ณธ ๊ฐ์ด๋ค.
์ฝ๋ ์ด์ ์ด๋ฆ์ ๊ท์น์ ๋ฐ๋ผ ์ ์๋์ด ์๋ค.
- 3๊ฐ์ ํํธ๋ก ๊ตฌ์ฑ๋ ์ฝ๋ ์ด์
์ด๋ฆ
- ์ฒซ ๋ฒ์จฐ ํํธ๋ ๋ฌธ์ ์งํฉ์ ์ด๋ฆ
- ๋ ๋ฒ์งธ ํํธ๋ ํด๋น ๋ฌธ์ ์งํฉ์ ํ์ ๋ถ๋ฅ
- ์ธ ๋ฒ์งธ ํํธ๋ ๋๋ฌธ์๋ ์๋ฌธ์์ ๊ตฌ๋ถ ์ฌ๋ถ๋ก "ci" ์ด๋ฉด ๋์๋ฌธ์ ๊ตฌ๋ถX, "cs"๋ฉด ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถ
- 2๊ฐ์ ํํธ๋ก ๊ตฌ์ฑ๋ ์ฝ๋ ์ด์
์ด๋ฆ
- ์ฒซ ๋ฒ์งธ ํํธ๋ ๋ฌธ์ ์งํฉ์ ์ด๋ฆ
- ๋ ๋ฒ์งธ ํํธ๋ ํญ์"bin" ํค์๋ ์ฌ์ฉ๋๋ฉฐ, "bin" ์ ์ด์ง ๋ฐ์ดํฐ๋ฅผ ์๋ฏธํ๋ฉฐ ๋น๊ต ๋ฐ ์ ๋ ฌ์ ์ค์ ๋ฌธ์ ๋ฐ์ดํฐ์ ๋ฐ์ดํธ ๊ฐ์ ๊ธฐ์ค์ผ๋ก ์ํ๋๋ค.
์์ฃผ ์ฌ์ฉ๋๋ ์ฝ๋ ์ด์ ์๊ฐ
- ์์ฃผ ์ฌ์ฉํ๋ latin1 , euckr, utf8mb4 ๋ฌธ์ ์งํฉ์ ์ฝ๋ ์ด์ ์ latin1_swedish_ci, euckr_korean_ci, utf8mb4_0900_ai_ci ์ด๋ค.
- ์ด๋ค์ ๋ชจ๋ "ci" ๋ผ์, ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํด์ ๋น๊ตํ๊ฑฐ๋ ์ ๋ ฌ ํ๋ ์นผ๋ผ์์๋ "cs" ๊ณ์ด์ด๋ "bin" ๊ณ์ด์ ์ฝ๋ ์ด์ ์ ๋ช ์์ ์ผ๋ก ์ง์ ํด์ผ ํ๋ค.
์ฝ๋ ์ด์ ์ ๋ฐ๋ผ ๋ฌธ์์ด ๋น๊ต์ ์ธ๋ฑ์ค์ ๋ผ์น๋ ์ํฅ์ด ๋ค๋ฅด๋ค.
- ํ์ ์ ์ด๋ฆ, ๋ฌธ์์ด์ ๊ธธ์ด, ๋ฌธ์ ์งํฉ, ์ฝ๋ ์ด์ ๋ชจ๋ ๊ฒ์ด ์ผ์นํด์ผ ๋๊ฐ์ ํ์ ์ด๋ผ ํ ์ ์๋ค.
- ๋ฌธ์ ์งํฉ๊ณผ ์ฝ๋ ์ด์ ์ด ๋ชจ๋ ์ผ์นํด์ผ JOIN ์ด๋ WHERE ์กฐ๊ฑด์์ ์ธ๋ฑ์ค๋ฅผ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค.
- ์ฝ๋ ์ด์ ์ DB์์ค, ํ ์ด๋ธ ์์ค, ์นผ๋ผ ์์ค์์ ๊ฐ๋ณ์ ์ผ๋ก ์ค์ ์ด ๊ฐ๋ฅํ๋ค.
> CREATE DB db_test CHARACTER SET=utf8mb4;
> CREATE TABLE tb_member (
member_id VARCHAR(20) NOT NULL COLLATE latin1_general_cs,
member_name VARCHAR(20) NOT NULL COLLATE utf8_bin
...
);
๊ฐ ์ปฌ๋ผ์ ๋ฌธ์ ์งํฉ์ด๋ ์ฝ๋ ์ด์ ์ ์ ํํ ํ์ธํ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋ค.
> SELECT table_name, column_name, column_type, character_set_name, collation_name
FROM information_shema.columns
WHERE table_schema = '{DB์ด๋ฆ}' AND table_name='{ํ
์ด๋ธ์ด๋ฆ}';
MySQL 5.7๋ฒ์ ์์ 8.0 ๋ฒ์ ์ผ๋ก ์ ๊ทธ๋ ์ด๋ ์ ์์์ผ ํ ์ฃผ์์
- utf8mb4 ๋ฌธ์ ์งํฉ์ ๊ธฐ๋ณธ ์ฝ๋ ์ด์ ์ด MySQL 8.0 ์ด ๋๋ฉด์ utf8mb4_general_ci ์์ utf8mb4_0900_ai_ci ๋ก ๋ฐ๋์๋ค.
- ๊ทธ๋์, MySQL 8.0 ๋ฒ์ ์ ๊ทธ๋ ์ด๋ ์ ์ฝ๋ ์ด์ ์ด ์ผ์นํ์ง ์์ ์๋ฌ๊ฐ ๋ฐ์ํ๊ฑฐ๋ ์ฑ๋ฅ์ด ์ ํ๋ ์ ์๊ธฐ ๋๋ฌธ์ ๋ฌธ์์ด ์งํฉ์ ์ฝ๋ ์ด์ ์ผ์น๋ฅผ ํด์ค์ผ ํ๋ค.
- default_collation_for_utf8mb4 ๋ ์์คํ ๋ณ์์ "utf8mb4_general_ci" ์ ์ค์ ํ๋ฉด 8.0 ์ดํ์ ์ฝ๋ ์ด์ ์ general_ci ๋ฅผ ์์์ ์ผ๋ก ์ ์ฉํ ์ ์๋ค. ์๊ตฌ์ ์ผ๋ก ํ๊ณ ์ถ๋ค๋ฉด ์ค์ ํ์ผ(my.cnf)์ ์ฝ๋ ์ด์ ์์คํ ๋ณ์๋ฅผ genenral_ci๋ก ๊ณ ์ ํ์.
๋ฌธ์์ด ๋น๊ต
utf8mb4 ๋ฌธ์ ์งํฉ์ด UCA ๋ฒ์ 9.0.0 (utf8mb4_0900_ac_ci) ์ ์ง์ํ๋ฉด์ ๋ฌธ์์ด ๋ค์ ๋ถ์ ๊ณต๋ฐฑ ๋ฌธ์๋ค์ ๋ํ ๋น๊ต ๋ฐฉ์์ด ๋ค๋ฅด๋ค.
utf8mb4 ๋ฌธ์ ์งํฉ์ ์ฌ์ฉํ ๊ฒฝ์ฐ, information_schmea DB์ COLLATIONS ๋ทฐ์์ PAD_ATTRIBUTE ์นผ๋ผ์ ๊ฐ์ด "PAD SPACE" ์ธ์ง "NO PAD" ์ธ์ง ์๋ ์ฟผ๋ฆฌ๋ฅผ ์คํํ์ฌ ํ์ธํ ์ ์๋ค.
> SELECT collation_name, pad_attribute
FROM information_schema.COLLATIONS
WHERE collation_name LIKE 'utf8mb4%';
๊ฐ์ด "PAD SPACE" ๋ผ๋ฉด ๋น๊ต ๋์ ๋ฌธ์์ด์ ๊ธธ์ด๊ฐ ๊ฐ์์ง๋๋ก ๋ฌธ์์ด ๋ค์ ๊ณต๋ฐฑ์ ์ถ๊ฐํด์ ๋น๊ต๋ฅผ ์ํํ๊ณ , "NO PAD" ๋ผ๋ฉด ๊ณต๋ฐฑ์ ์ถ๊ฐํ์ง ์๊ณ ๋น๊ต๋ฅผ ์ํํ๋ค. uft8mb4 ์ ๊ธฐ๋ณธ ์ฝ๋ ์ด์ ์ธ uft8mb4_0900_ai_ci ๋ "NO PAD" ์ด๋ค.
15.2 ์ซ์
์ ์ ํ์ ์๊ฐ
- TINYINT(1 ๋ฐ์ดํธ), SMALLINT(2๋ฐ์ดํธ), MEDIUMINT(3๋ฐ์ดํธ), INT(4๋ฐ์ดํธ), BIGINT(8๋ฐ์ดํธ) ๊ฐ ์๋ค.
- AUTO_INCREMENT ์นผ๋ผ๊ณผ ๊ฐ์ด ์์๊ฐ ๋ ์ ์๋ ๊ฐ์ ์ ์ฅํ ๋, UNSIGNED ์ต์ ์ ๋ช ์ํ๋ฉด ๋ ํฐ ๊ฐ์ ์ ์ฅํ ์ ์๋ค. ๋ช ์ํ์ง ์์ผ๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก ์์์ ์์๋ฅผ ์ ์ฅํ๋ SIGNED ๊ฐ ๋๋ค.
๋ถ๋ ์์์
๋๋ฑ ๋น๊ต๊ฐ ๋ถ๊ฐ๋ฅํ๋ค. ์ ๋ฐ๋๋ฅผ ๋ช ์ํ์ง ์์ผ๋ฉด 4๋ฐ์ดํธ๋ฅผ ์ฌ์ฉํด ์ ํจ ์๋ฆฟ์๋ฅผ 8๊ฐ๊น์ง ์ ์งํ๋ค.
DECIMAL
- ์์์ ์ดํ์ ๊ฐ๊น์ง ์ ํํ๊ฒ ๊ด๋ฆฌํ๋ค.
- ์ญ์ง ํ๊ธฐ๋ฒ์ ์ฌ์ฉํ๋ DECIMAL ํ์ ์ ์ด์ง ํ๊ธฐ๋ฒ์ ์ฌ์ฉํ๋ INTEGER ๋ฐ ๋ค๋ฅธ INTํ์ ๋ณด๋ค ์ ์ฅ ๊ณต๊ฐ์ 2๋ฐฐ ์ด์ ํ์๋ก ํ๋ค.
- DECIMAL ํ์ ์ 65์๋ฆฌ ์ซ์๊น์ง ํํ๊ฐ๋ฅํด์ BIGINT ๋ก๋ ์ ์ฅํ ์ ์๋ ๊ฐ์ ์ ์ฅํ ์ ์๋ค.
- DECIMAL(20, 5) ๋ผ๊ณ ์ ์ํ๋ฉด ์ ์๋ถ๋ฅผ 15์๋ฆฌ, ์์๋ถ๋ฅผ 5์๋ฆฌ ๊น์ง ์ ์ฅํ์ง๋ง DECIMAL(20) ์ ์ ์๋ถ๋ง 20์๋ฆฌ๊น์ง ์ ์ฅํ๋ค.
15.3 ๋ ์ง์ ์๊ฐ
๋ ์ง์ ์๊ฐ ํ์ ์๊ฐ
- YEAR, DATE, TIME, DATETIME, TIMESTAMP ๊ฐ ์๋ค.
- DATETIME(6) ์์ 6์ ๋ฐ๋ฆฌ์ด ๋จ์ ์๋ฆฟ์ ์ด๋ค. ๋ง์ฝ, DATETIME() ๋ก ๋ ์ง,์๊ฐ์ ๊ฐ์ ธ์ค๋ฉด ๋ฐ๋ฆฌ์ด ๋จ์๋ 0์ผ๋ก ๋ฐํ๋๋ค.
DATETIME ๊ณผ TIMESTAMP ์ ์ฐจ์ด
- DATETIME ๊ณผ DATE ํ์ ์ DBMS ์ปค๋ฅ์ ์ ํ์์กด๊ณผ ๊ด๊ณ์์ด ์ ๋ ฅ๋ ๊ฐ์ ๊ทธ๋๋ก ์ ์ฅํ๊ณ ์กฐํํ๋ค.
- TIMESTAMP ๋ ํญ์ UTC ํ์์กด์ผ๋ก ์ ์ฅ๋์, ํ์์กด์ด ๋ฌ๋ผ์ง๋ฉด ๊ฐ์ด ์๋์ผ๋ก ๋ณด์ ๋๋ค.
์์ฉ ํ๋ก๊ทธ๋จ๊ณผ MySQL ์๋ฒ์ ํ์์กด ๊ด๊ณ
JDBC ๋๋ผ์ด๋ฒ๋ ๋ ์ง ๋ฐ ์๊ฐ ์ ๋ณด๋ฅผ MySQL ํ์์กด์์ JVM์ ํ์์กด์ผ๋ก ๋ณํํด์ ์ถ๋ ฅํ๋ค.
์ฆ, ORM ์ฝ๋ ๋ด๋ถ์ ์ผ๋ก ๊ฐ์ ์๋์ผ๋ก ํ์นํด์ ์์ฉ ํ๋ก๊ทธ๋จ ์ฝ๋๋ฅผ ๋ฐํํ๊ธฐ ๋๋ฌธ์ ORM ์ด ์ด๋ค JDBC API ๋ฅผ ์ด์ฉํ๋์ง, ํ์์กด ๋ณํ์ด ๊ธฐ๋ํ๋ ๋๋ก ์๋ ๋ณํํ๋์ง ํ ์คํธ ํด๋ด์ผ ํ๋ค.
MySQL ์๋ฒ์ ํ์์กด ๋ณ์๋ system_time_zone ๊ณผ time_zone ์ด ์๋ค.
- system_time_zone ์ OS ์ ํ์์กด์ ๊ทธ๋๋ก ์์๋ฐ๋๋ค
- time_zone ์ MySQL ์๋ฒ๋ก ์ฐ๊ฒฐํ๋ ๋ชจ๋ ํด๋ผ์ด์ธํธ ์ปค๋ฅ์ ์ ๊ธฐ๋ณธ ํ์์กด์ด๋ค.
MySQL ์๋ฒ์ ์๊ฐ ๊ด๋ จ ์ฒ๋ฆฌ๋ time_zone ๋ณ์์ ํ์์กด์ ์ํฅ์ ๋ฐ๊ณ , ๋ง์ฝ time_zone ๋ณ์์ ๊ฐ์ด SYSTEM ์ผ๋ก ์ค์ ๋ผ ์๋ค๋ฉด system_time_zone ์ ์ํฅ์ ๋ฐ๋๋ค.
MySQL 5.6 ๋ฒ์ ๋ถํฐ๋ DATETIME ๊ณผ TIMESTAMP ํ์ ์ time_zone ๋ณ์์ ํ์์กด์ผ๋ก ์ ์ฅํ ์ง, UTC ๋ก ์ ์ฅํ ์ง์ ์ฐจ์ด๋ง ๋จ๊ณ ๋ชจ๋ ๊ฒ์ด ๊ฐ์์ก๋ค.
15.4 ENUM
ENUM ํ์ ์ ํน์ง
- MySQL ์๋ฒ๊ฐ ์ค์ ๋ก ๊ฐ์ ๋์คํฌ๋ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ ๋๋ ์ฌ์ฉ์๋ก๋ถํฐ ์์ฒญ๋ ๋ฌธ์์ด์ด ์๋ ๊ทธ ๊ฐ์ ๋งคํ๋ ์ ์ซ๊ฐ์ ์ฌ์ฉํ๋ค.(ENUM์ ์ ์ ํ์ ์ด๋ค)
- ENUM ํ์ ์ ์ฌ์ฉํ ์ ์๋ ์ต๋ ์์ดํ ๊ฐ์๋ 65,535๊ฐ์ด๋ฉฐ, ์์ดํ ๊ฐ์๊ฐ 255๊ฐ ๋ฏธ๋ง์ด๋ฉด ENUM ํ์ ์ ์ ์ฅ ๊ณต๊ฐ์ด 1๋ฐ์ดํธ์ด๊ณ , ๊ทธ ์ด์์ธ ๊ฒฝ์ฐ 2๋ฐ์ดํธ๊น์ง ์ฌ์ฉํ๋ค.
ENUM ํ์ ์ ์ฅ์
- ENUMํ์ ์ ์ ์ฅํด์ผ ํ๋ ์์ดํ ๊ฐ(๋ฌธ์์ด)์ด ๊ธธ๋ฉด ๊ธธ์๋ก ์ ์ฅ ๊ณต๊ฐ์ ๋ ๋ง์ด ์ ์ฝํ ์ ์๋ค.
- ์ด๋ ์ธ๋ฑ์ค ํ์ด์ง ๋ฐ ๋์คํฌ ํฌ๊ธฐ์๋ ์ํฅ์ ์ฃผ์ด ๋ช GB ๋ฅผ ์๋ ์ ์๋ค.
ENUM ํ์ ์ ๋จ์
- ์นผ๋ผ์ ์ ์ฅ๋๋ ๋ฌธ์์ด ๊ฐ์ด ํ ์ด๋ธ์ ๊ตฌ์กฐ(๋ฉํ ์ ๋ณด)๊ฐ ๋๋ฉด์ ๊ธฐ์กด ENUM ํ์ ์ ์๋ก์ด ์์ดํ ์ ์ถ๊ฐํ๋ค๋ฉด ํ ์ด๋ธ์ ๊ตฌ์กฐ๋ฅผ ๋ณ๊ฒฝํด์ผ ํ๋ค.
- 5.6๋ฒ์ ๋ถํฐ๋ ENUM ํ์ ๋ง์ง๋ง์ ์๋ก์ด ์์ดํ ์ ์ถ๊ฐํ๋ค๋ฉด ๋ฉํ๋ฐ์ดํฐ ๋ณ๊ฒฝ๋ง์ผ๋ก ์๋ฃ๋์ง๋ง, ๊ธฐ์กด ENUMํ์ ์ ์์ดํ ๋ค์ด ์์๊ฐ ๋ณ๊ฒฝ๋๊ฑฐ๋ ์ค๊ฐ์ ์๋ก์ด ์์ดํ ์ด ์ถ๊ฐ๋๋ฉด ์ฝ๊ธฐ ์ ๊ธ๊น์ง ํ์ํ๋ค.
ENUM ํ์ ์ ์ ๋ ฌ
ENUMํ์ ์ ๋ฌธ์์ด ํ์ ์ด ์๋ ์ ์ ํ์ ์ ์นผ๋ผ์ด๊ธฐ ๋๋ฌธ์ ์ ๋ ฌ์ ํ ์ด๋ธ์ด ์์ฑ๋ ๋์ ENUM ํ์ ์ ๋ฌธ์์ด ๊ฐ์ผ๋ก ์ก๋ ฌ๋๋ค.
15.5 TEXT ์ BLOB
๊ณตํต์
- MySQL ์ ๋๋์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ํ์ ์ ์ฌ์ฉ
์ฐจ์ด์
- TEXT ๋ ๋ฌธ์์ด์ ์ ์ฅํ๋ ๋์ฉ๋ ์นผ๋ผ์ด๋ผ์ ๋ฌธ์ ์งํฉ์ด๋ ์ฝ๋ ์ด์ ์ ๊ฐ์ง.
- BLOB ๋ ์ด์ง ๋ฐ์ดํฐ ํ์ ์ด๋ผ์ ๋ณ๋์ ๋ฌธ์ ์งํฉ์ด๋ ์ฝ๋ ์ด์ ์ ๊ฐ์ง์ง ์๋๋ค.
๊ทธ๋์, ์นผ๋ผ ํ๋์ ์ ์ฅ๋๋ ๋ฌธ์์ด์ด ์ด์ง ๊ฐ์ ๊ธธ์ด๊ฐ ์์ธกํ ์ ์์ด ํด ๋ ๋ ํ์ ์ ์ฌ์ฉํ๋ค.
TEXT ์ BLOB ๋ ์ ์ฅ ๊ฐ๋ฅํ ์ต๋ ๊ธธ์ด์ ๋ฐ๋ผ์ 4๊ฐ์ง ํ์ ์ผ๋ก ๊ตฌ๋ถ๋๋ค.
๋ฐ์ดํฐ ํ์ | ํ์ ์ ์ฅ ๊ณต๊ฐ (L = ์ ์ฅํ๊ณ ์ ํ๋ ๋ฐ์ดํฐ ๋ฐ์ดํธ ์) |
์ ์ฅ ๊ฐ๋ฅํ ์ต๋ ๋ฐ์ดํธ ์ |
TINYTEXT, TINYBLOB | L + 1 ๋ฐ์ดํธ | 2์ 8์น - 1 (255) |
TEXT, BLOB | L + 2 ๋ฐ์ดํธ | 2์ 16์น - 1 (65,535) |
MEDIUMTEXT, MEDIUMBLOB | L + 3 ๋ฐ์ดํธ | 2์ 24์น - 1 (16,777,215) |
LONGTEXT, LONGBLOB | L + 4 ๋ฐ์ดํธ | 2์ 32์น - 1 (4,294,967,295) |
TEXT ์ BLOB ์ด ๋์คํฌ์ ์ ์ฅ๋๋ ๋ฐฉ์
MySQL์ ํ๋์ ๋ ์ฝ๋ ํฌ๊ธฐ๊ฐ ํ์ด์ง ๋จ์๋ฅผ ๋๊ธฐ์ง ์๊ฒ ์ ์ฅํ๋ ค๊ณ ํ๋ฉฐ, ๋ง์ฝ ์ด ๋ ํ์ ์ ์ํด ๋ ์ฝ๋ ํฌ๊ธฐ๊ฐ ํ์ด์ง ๋จ์๋ฅผ ๋์ด๊ฐ๋ค๋ฉด ์ธ๋ถํ์ด์ง์ ํด๋น ํ์ ์ ์ ์ฅํ๊ณ , ์ค์ ๋ ์ฝ๋์ ์นผ๋ผ์ ์ธ๋ถํ์ด์ง์ ์ฐธ์กฐ๊ฐ์ ๊ฐ์ง๊ณ ์๊ฒ ๋๋ค.
15.6 ๊ณต๊ฐ ๋ฐ์ดํฐ ํ์
์๊ฐ
- MySQL ์๋ฒ๋ OpenGIS ์์ ์ ์ํ๋ ํ์ค์ ์ค์
- OpenGIS ์์ ์ ๊ณตํ๋ WKT(Well Known Text) ๋๋ WKB(Well Known Binary) ๋ฅผ ์ด์ฉํด ๊ณต๊ฐ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌ
ํ์ ์ข ๋ฅ
- POINT - ํ๋์ ์ ์ ๋ณด
- LINESTRING - ํ๋์ ๋ผ์ธ
- POLYGON - ํ๋์ ๋ค๊ฐํ
- GEOMETRY - POINT, LINESTRING, POLYGON ์ ์ํผํ์ ์ผ๋ก 3๊ฐ์ ํ์ ๋ชจ๋ ์ ์ฅ ๊ฐ๋ฅ
- MULTIPOINT - ์ฌ๋ฌ ๊ฐ์ POINT ์ ์ฅ
- MULTILINESTRING - ์ฌ๋ฌ ๊ฐ์ LINESTRING ์ ์ฅ
- MULTIPOLYGON - ์ฌ๋ฌ ๊ฐ์ POLYGON ์ ์ฅ
- GEOMETRYCOLLECTION - MULTIPOINT ~ MULTIPOLYGON ์ ์ํผํ์ ์ผ๋ก 3๊ฐ์ ํ์ ๋ชจ๋ ์ ์ฅ ๊ฐ๋ฅ
ํน์ง
- ๊ณต๊ฐ๋ฐ์ดํฐ ํ์ ์ BLOB ๊ฐ์ฒด๋ก ๊ด๋ฆฌ๋๋ค.
- BLOB ํ์ ์ ์ค์ ์ ์ฅํ๊ณ ์๋ ๋ฐ์ดํฐ๊ฐ ํฌ์ง ์๋ค๋ฉด MySQL ์๋ฒ๋ ๊ณต๊ฐ ๋ฐ์ดํฐ ์นผ๋ผ์ ๋ณ๋์ ์ธ๋ถ ํ์ด์ง(Off-page)๋ก ์ ์ฅํ์ง ์์์ ์ฑ๋ฅ์ ๊ฑฑ์ ํ์ง ์์๋ ๋๋ค.
- POINT ๊ฐ์ฒด ์์ฑ ์์ : ST_PointFromText('POINT(x, y)') → SRID ๊ฐ 0์ธ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค.
์ฐธ๊ณ : Real MySQL 8.0
'์คํฐ๋ > Real MySQL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
MySQL ์์ง ์ํคํ ์ฒ & InnoDB ์คํ ๋ฆฌ์ง ์์ง ์ํคํ ์ฒ ์ ๋ฆฌ (4.1 ~ 4.2) (2) | 2024.10.14 |
---|---|
B-Tree ์ธ๋ฑ์ค ์ ๋ฆฌ (8.1 ~ 8.3.5) (2) | 2024.10.07 |