๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์Šคํ„ฐ๋””/Real MySQL

MySQL ์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž… ์ •๋ฆฌ (15.1 ~ 15.6)

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