Unicode(์ ๋์ฝ๋)
์ ๋์ฝ๋๋ ์ ์ธ๊ณ์ ๋ชจ๋ ๋ฌธ์, ๊ธฐํธ, ์ด๋ชจ์ง ๋ฑ์ ์ปดํจํฐ์์ ์ผ๊ด๋๊ฒ ํํํ๊ณ ๋ค๋ฃฐ ์ ์๊ฒ ๋ง๋ ๊ตญ์ ํ์ค ๊ท์ฝ ์ด๋ค.
์ธ์์ ๋ชจ๋ ๊ธ์์ ๊ณ ์ ํ ID๋ฅผ ํ๋์ฉ ๋ถ์ฌํ ๊ฑฐ๋ํ ๋ฌธ์ ๋ฐฑ๊ณผ์ฌ์ ์ด๋ผ๊ณ ๋ ๋ณผ ์ ์๋ค.
1. ํ์ ๋ฐฐ๊ฒฝ
๊ณผ๊ฑฐ์๋ ๋๋ผ ๋๋ ์์คํ
๋ง๋ค ๋ฌธ์๋ฅผ ํํํ๋ ๋ฐฉ์(์ธ์ฝ๋ฉ)์ด ์ ๊ฐ๊ฐ์ด์๋ค.
๋๋ฌธ์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ผ๋ฉด ๊ธ์๊ฐ ๊นจ์ง๋ ํ์์ด ๋น์ผ๋น์ฌํ๋ค.
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์ ์ ์ธ๊ณ์ ์ผ๋ก ์ ์ผํ ์ฝ๋ ๋ฒํธ๋ฅผ ๋ถ์ฌํ ๊ฒ์ด๋ค.
2. UTF-8
Unicode Transformasion Format-8-bit ์ ์ค ๋ง๋ก, ์ ๋์ฝ๋์ ์ฝ๋ ํฌ์ธํธ๋ฅผ ์ค์ ์ปดํจํฐ์ ๋ฐ์ดํธ ํํ๋ก ์ ์ฅํ๋ ๊ฐ์ฅ ๋์ค์ ์ธ ์ธ์ฝ๋ฉ ๋ฐฉ์์ด๋ค.
2-1. ํต์ฌ : ๊ฐ๋ณ ๊ธธ์ด ์ธ์ฝ๋ฉ
๊ฐ์ฅ ํฐ ํน์ง์, ๋ฌธ์์ ๋ถ์ฌ๋ ๋ฒ์์ ๋ฐ๋ผ ์ ์ฅ์ ์ฌ์ฉํ๋ ๋ฐ์ดํธ ์๋ฅผ ํจ์จ์ ์ผ๋ก ์กฐ์ ํ๋ ๊ฐ๋ณ ๊ธธ์ด ์ธ์ฝ๋ฉ ์ด๋ผ๋ ์ ์ด๋ค.
1๋ฐ์ดํธ : ์์ด, ์ซ์ ๋ฑ (ASCII ์ฝ๋์ ๋์ผ)
2๋ฐ์ดํธ : ์ ๋ฝ ๋ฌธ์, ์๋์ด ๋ฑ
3๋ฐ์ดํธ : ํ๊ธ, ํ์ ๋ฑ ๋๋ถ๋ถ์ ํ๋ ๋ฌธ์
4๋ฐ์ดํธ : ๊ณ ๋ ๋ฌธ์, ์ํ ๊ธฐํธ, ๋๋ถ๋ถ์ ์ด๋ชจ์ง ๋ฑ
utf8mb4_0900_ai_ci ๐ utf8mb4_general_ci
1. utf8mb4
utf8 : ๋ฌธ์๋ฅผ ์ ์ฅํ๋ ๊ธฐ๋ฐ ๊ธฐ์ ์ด, UTF-8 ์ธ์ฝ๋ฉ ๋ฐฉ์์์ ์๋ฏธํ๋ค.
mb4 : most bytes 4 ์ ์ค์๋ง๋ก, ํ๋์ ๋ฌธ์๋ฅผ ํํํ๊ธฐ ์ํด ์ต๋ 4๋ฐ์ดํธ๊น์ง ์ฌ์ฉํ ์ ์๋ค๋ ์๋ฏธ์ด๋ค.
์ด๋ฅผ Character Set ์ด๋ผ๊ณ ํ๋ค.
1-1. utf8mb4๊ฐ ํ์ํ ์ด์
๊ณผ๊ฑฐ MySQL์ utf8 ์บ๋ฆญํฐ ์
์ UTF-8 ํ์ค์ ์ผ๋ถ๋ง ๊ตฌํํ์ฌ ์ต๋ 3๋ฐ์ดํธ๊น์ง๋ง ์ง์ํ์๋ค.
๋๋ฌธ์ 4๋ฐ์ดํธ๊ฐ ํ์ํ ๋ฌธ์๋ค์ ์ ์ฅํ ์ ์์๋ค.
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์ utf8mb4๊ฐ ํ์ํ์๊ณ , ๊ทธ ๊ฒฐ๊ณผ ๋ชจ๋ ๋ฌธ์๋ฅผ ๋ฌธ์ ์์ด ์ ์ฅํ ์ ์๊ฒ ๋์๋ค.
2. 0900_ai_ci
ํ์ฌ MySQL 8.0์ ๊ธฐ๋ณธ ์ค์ ๊ฐ์ด๋ค.
0900 : ๊ธฐ๋ฐ์ด ๋๋ ์ ๋์ฝ๋ ํ์ค ๋ฒ์ ์ด 9.0.0 ์์ ์๋ฏธํ๋ค.
ai(Accent Insensitive) : ์
์ผํธ ๋ถํธ(รก, ร ๋ฑ)๋ฅผ ์๋ณธ ๋ฌธ์์ ๋์ผํ๊ฒ ์ทจ๊ธํ๋ค.
ci(Case Insensitive) : ๋์๋ฌธ์๋ฅผ ๋์ผํ๊ฒ ์ทจ๊ธํ๋ค.
์ด๋ฌํ ์ค์ ์ Collation ์ด๋ผ๊ณ ํ๋ค.
3. general_ci
๊ณผ๊ฑฐ์ ์๋๋ฅผ ์ค์ํ์ฌ ๋๋ฆฌ ์ฌ์ฉ๋์๋ Collation์ด๋ค.
general : ํน์ ์ธ์ด ๊ท์น์ ์๊ฒฉํ๊ฒ ๋ฐ๋ฅด์ง ์๋ ์ผ๋ฐ์ ์ธ(General) ****๋น๊ต ๊ท์น์ ์ฌ์ฉํ๋ค.
์ฆ, ์๋๋ฅผ ๋์ด๊ธฐ ์ํด ์ ๋ ฌ ๊ท์น์ ๋จ์ํํ ๋ฐฉ์์ด๋ค.
ex) ๋
์ผ์ด์์ ร๋ ss์ ๋์ผํ๊ฒ ์ทจ๊ธ๋์ด์ผ ํ๋, ๋ค๋ฅด๊ฒ ์ทจ๊ธ๋๋ค.
ci(Case Insensitive) : ๋์๋ฌธ์๋ฅผ ๋์ผํ๊ฒ ์ทจ๊ธํ๋ค.
4. ํต์ฌ ์ฐจ์ด์ ์์ฝ
๊ตฌ๋ถ utf8mb4_0900_ai_ci (์ต์ ํ์ค)utf8mb4_general_ci (๊ตฌ๋ฒ์ )์ ํ์ฑ ๋งค์ฐ ๋์. ๋ค๊ตญ์ด์ ํน์ ๋ฌธ์๋ฅผ ์ธ์ด ๊ท์น์ ๋ง๊ฒ ์ ํํ๊ฒ ์ ๋ ฌ. ๋ฎ์. ๋จ์ํ๋ ๊ท์น์ ์ฌ์ฉํด ํน์ ๋ฌธ์๋ ์ธ์ด์์ ์ ๋ ฌ ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์์ ๊ธฐ๋ฐ ํ์ค Unicode 9.0.0 (UCA) ๊ตฌ๋ฒ์ ์ ๋จ์ํ๋ ์ ๋์ฝ๋ ๊ท์น ์ง์ ๋ฒ์ ์
์ผํธ, ๋์๋ฌธ์, ์ด๋ชจ์ง, ํน์ ๊ธฐํธ๋ฅผ ํญ๋๊ณ ์ ํํ๊ฒ ์ฒ๋ฆฌ ๊ธฐ๋ณธ์ ์ธ ๋ฌธ์ ์ฒ๋ฆฌ์ ์ค์ ์ฑ๋ฅ ์ต์ CPU์ ์ต์ ํ๋์ด general_ci์ ์ฑ๋ฅ ์ฐจ์ด๊ฐ ๊ฑฐ์ ์์ ๊ตฌ๋ฒ์ MySQL์์๋ ์ฝ๊ฐ ๋ ๋นจ๋์ง๋ง, ์ด๋ ์ ํ์ฑ์ ํฌ์ํ ๊ฒฐ๊ณผ ๊ธฐ๋ณธ๊ฐ MySQL 8.0 ์ด์์ ๊ธฐ๋ณธ ์ ๋ ฌ ๊ท์น MySQL 8.0 ๋ฏธ๋ง ๋ฒ์ ์์ ๋๋ฆฌ ์ฌ์ฉ
utf8mb4_0900_ai_ci์ ํ๊ธ ์ฌ์ฉ์ ๋ํ ๋ฌธ์ ์
MySQL 8.0 ์ด์ ๋ฒ์ ๋ถํฐ ๊ธฐ๋ณธ ์ฝ๋ ์ด์
์ผ๋ก ์ค์ ๋ utf8mb4_0900_ai_ci ๋ ํ๊ธ์ด๋ ๋์์์ ๊ณ์ด์ ๋ฌธ์๋ฅผ ์ฌ์ฉํ๋ ๋๋ผ์์๋ ์น๋ช
์ ์ธ ๋ฌธ์ ๊ฐ ์๋ค.
ํ๊ธ์ ์์ ๋ชจ์, ์ผ๋ณธ์ด ๊ฐํ์นด๋/ํ๋ผ๊ฐ๋๋ฅผ ๊ฐ์ ๋ฌธ์์ด๋ก ์ธ์ํ์ฌ ์ฒ๋ฆฌ ํ๊ธฐ ๋๋ฌธ์ ๊ธ๋ก๋ฒ ์๋น์ค์ธ ๊ฒฝ์ฐ ์ฝ๋ ์ด์
์ค์ ์ ๋ฐ๋์ ์ฃผ์ํด์ผ ํ๋ค.
1. utf8mb4_general_ci ์์ ํ๊ธ ๋ฐ์ดํฐ๋ฅผ ์กฐ๊ฑด์ผ๋ก ๊ฒ์ํ ๊ฒฐ๊ณผ
mysql > select no , name , length ( name ), hex( name ) from test1 t1
- > where name = ' ๊ฐ๋๋ค ' ;
+ ----+-----------+--------------+--------------------+
| no | name | length ( name ) | hex( name ) |
+ ----+-----------+--------------+--------------------+
| 1 | ๊ฐ๋๋ค | 9 | EAB080EB8298EB8BA4 |
+ ----+-----------+--------------+--------------------+
1 row in set ( 0 . 00 sec)
mysql > select no , name , length ( name ), hex( name ) from test1 t1
- > where name = ' ใฑใ
๋๋ค ' ;
+ ----+--------------+--------------+--------------------------+
| no | name | length ( name ) | hex( name ) |
+ ----+--------------+--------------+--------------------------+
| 2 | ใฑใ
๋๋ค | 12 | E384B1E3858FEB8298EB8BA4 |
+ ----+--------------+--------------+--------------------------+
1 row in set ( 0 . 00 sec)
mysql > select no , name , length ( name ), hex( name ) from test1 t1
- > where name = ' ใฑใ
ใดใ
ใทใ
' ;
+ ----+--------------------+--------------+--------------------------------------+
| no | name | length ( name ) | hex( name ) |
+ ----+--------------------+--------------+--------------------------------------+
| 3 | ใฑใ
ใดใ
ใทใ
| 18 | E384B1E3858FE384B4E3858FE384B7E3858F |
+ ----+--------------------+--------------+--------------------------------------+
1 row in set ( 0 . 00 sec)
์ ํํ ๋์ผํ ๋ฌธ์์ด๋ง ์กฐํํ๋ค.
2. utf8mb4_0900_ai_ci์์ ํ๊ธ ๋ฐ์ดํฐ๋ฅผ ์กฐ๊ฑด์ผ๋ก ๊ฒ์ํ ๊ฒฐ๊ณผ
mysql > select no , name , length ( name ), hex( name ) from test2 t2
- > where name = ' ๊ฐ๋๋ค ' ;
+ ----+--------------------+--------------+--------------------------------------+
| no | name | length ( name ) | hex( name ) |
+ ----+--------------------+--------------+--------------------------------------+
| 1 | ๊ฐ๋๋ค | 9 | EAB080EB8298EB8BA4 |
| 2 | ใฑใ
๋๋ค | 12 | E384B1E3858FEB8298EB8BA4 |
| 3 | ใฑใ
ใดใ
ใทใ
| 18 | E384B1E3858FE384B4E3858FE384B7E3858F |
+ ----+--------------------+--------------+--------------------------------------+
3 rows in set ( 0 . 00 sec)
mysql > select no , name , length ( name ), hex( name ) from test2 t2
- > where name = ' ใฑใ
๋๋ค ' ;
+ ----+--------------------+--------------+--------------------------------------+
| no | name | length ( name ) | hex( name ) |
+ ----+--------------------+--------------+--------------------------------------+
| 1 | ๊ฐ๋๋ค | 9 | EAB080EB8298EB8BA4 |
| 2 | ใฑใ
๋๋ค | 12 | E384B1E3858FEB8298EB8BA4 |
| 3 | ใฑใ
ใดใ
ใทใ
| 18 | E384B1E3858FE384B4E3858FE384B7E3858F |
+ ----+--------------------+--------------+--------------------------------------+
3 rows in set ( 0 . 00 sec)
mysql > select no , name , length ( name ), hex( name ) from test2 t2
- > where name = ' ใฑใ
ใดใ
ใทใ
' ;
+ ----+--------------------+--------------+--------------------------------------+
| no | name | length ( name ) | hex( name ) |
+ ----+--------------------+--------------+--------------------------------------+
| 1 | ๊ฐ๋๋ค | 9 | EAB080EB8298EB8BA4 |
| 2 | ใฑใ
๋๋ค | 12 | E384B1E3858FEB8298EB8BA4 |
| 3 | ใฑใ
ใดใ
ใทใ
| 18 | E384B1E3858FE384B4E3858FE384B7E3858F |
+ ----+--------------------+--------------+--------------------------------------+
3 rows in set ( 0 . 00 sec)
๊ธธ์ด๋ hex ๊ฐ์ด ๋ค๋ฆ์๋, ๋ชจ๋ ๋์ผํ ๊ธ์๋ก ์ธ์ํ๊ณ ๊ฒฐ๊ณผ๊ฐ์ผ๋ก ๋ชจ๋ ๋ฐํํ๋ค.
3. ํํ ๊ณต๋ฐฑ(Trailing Spaces) ์ฒ๋ฆฌ ๋ฐฉ์์ ์ฐจ์ด
๋ ์ฝ๋ ์ด์
์ ๋ฌธ์์ด ๋์ ์๋ ๊ณต๋ฐฑ์ ์ฒ๋ฆฌํ๋ ๊ท์น์ด ๋ค๋ฅด๋ค.
utf8mb4_general_ci : ๋ฌธ์์ด ๋์ ๊ณต๋ฐฑ์ ๋ฌด์ํ๊ณ ๋น๊ตํ๋ค. (PAD SPACE ๊ท์น)
utf8mb4_0900_ai_ci : ๋ฌธ์์ด ๋์ ๊ณต๋ฐฑ์ ์๋ฏธ ์๋ ๋ค๋ฅธ ๋ฌธ์๋ก ์ธ์ํ๋ค. (NO PAD ๊ท์น)
3-1. general_ci: ๊ณต๋ฐฑ์ ๋ฌด์ํ์ฌ 2๊ฐ ๋ชจ๋ ๊ฒ์๋จ
mysql > SELECT * FROM test3 WHERE name = ' test ' ;
+ --------+
| name |
+ --------+
| test |
| test |
+ --------+
3-2. 0900_ai_ci: ๊ณต๋ฐฑ์ ์ธ์ํ์ฌ ์ ํํ 1๊ฐ๋ง ๊ฒ์๋จ
mysql > SELECT * FROM test4 WHERE name = ' test ' ;
+ ------+
| name |
+ ------+
| test |
+ ------+
๊ฒฐ๋ก : ์ํฉ๋ณ ์ถ์ฒ ์ฝ๋ ์ด์
1. utf8mb4_0900_ai_ci
๋ค์ํ ์ธ์ด์ ํ
์คํธ๋ฅผ ๋ค๋ฃจ๋ ๊ธ๋ก๋ฒ ์๋น์ค ๋๋ ์ผ๋ฐ์ ์ธ ์น ์ ํ๋ฆฌ์ผ์ด์
์ ๊ตฌ์ถํ ๋
์ธ์ดํ์ ๊ท์น์ ๋ง๋ ์ ํํ ์ ๋ ฌ์ด ์ค์ํ ๋
ex) ์ฌ์ฉ์๋ค์ด Mรผller์ Muller, cafe์ cafรฉ๋ฅผ ์
๋ ฅํ์ ๋, ์ด๋ฅผ ์ ์ฌํ ๋จ์ด๋ก ์ธ์ํ๊ณ ๊ฒ์ํ๊ฑฐ๋ ์ ๋ ฌํด์ผ ํ๋ ๊ฒฝ์ฐ
2. utf8mb4_general_ci
ํ๊ธ ๋ฐ์ดํฐ๊ฐ ์ค์ฌ์ด๋ฉฐ, ์์ฑํ ๊ธ์(๊ฐ)์ ์์ ๋ถ๋ฆฌ ๊ธ์(ใฑ+ใ
)๋ฅผ ์๋์ ์ผ๋ก ๋ค๋ฅด๊ฒ ์ทจ๊ธํ๊ณ ์ถ์ ๋
UNIQUE ํค ๋ฑ์์ ๋ ํํ๊ฐ ๋ช
ํํ ๊ตฌ๋ถ๋์ด์ผ ํ ๋
ํํ ๊ณต๋ฐฑ์ ๋ฌด์ํ๊ณ ๋น๊ตํ๊ณ ์ถ์ ๋
3. utf8mb4_bin
๋์๋ฌธ์๋ฅผ ๋ฐ๋์ ๊ตฌ๋ถํด์ผ ํ๋ ๋ฐ์ดํฐ์ผ ๋
๊ฐ์ฅ ๋น ๋ฅด๊ฒ ๋น๊ต ๋ฐ ์ ๋ ฌํ๊ณ ์ถ์ ๋
4. ์์ฝ
Collation ํต์ฌ ํน์ง ์ฃผ์ ์ฌ์ฉ ์ฌ๋ก utf8mb4_0900_ai_ci์ ํ์ฑ, ๊ตญ์ ํ์ค, ์ธ์ดํ์ ๊ท์น ๊ธ๋ก๋ฒ ์๋น์ค ๋๋ ๋๋ถ๋ถ์ ํ๋ ์น ์ ํ๋ฆฌ์ผ์ด์
(์: cafe = cafรฉ ์ฒ๋ฆฌ๊ฐ ํ์ํ ๋) utf8mb4_general_ci๋จ์/์ง๊ด์ ๋น๊ต, ํ๊ธ ์์ ๋ถ๋ฆฌ ํ๊ธ ์ค์ฌ ์๋น์ค์์ ์์ฑํ/์กฐํฉํ ๊ธ์๋ฅผ ๋ช
ํํ ๊ตฌ๋ถํ๊ณ ์ถ์ ๋ (์: ๊ฐ โ ใฑ+ใ
) utf8mb4_bin๋ฐ์ด๋๋ฆฌ(๋ฐ์ดํธ) ๊ฐ ๋น๊ต, ๋์๋ฌธ์ ๊ตฌ๋ถ API ํค, ๋น๋ฐ๋ฒํธ, ์ธ์ฆ ํ ํฐ ๋ฑ ๋์๋ฌธ์๋ฅผ ํฌํจํ ๋ชจ๋ ๋ฌธ์๋ฅผ ์ ํํ ๊ตฌ๋ถํด์ผ ํ ๋
์ฐธ๊ณ ํ ๊ธ
MySQL 8.0.1 utf8mb4_0900_ai_ci์ ํ๊ธ ์ฌ์ฉ์ ๋ํ ๋ฌธ์ ์ - RastaLion.dev