๋ฐ์ด๋๋ฆฌ ์ ๋ ฅ ๋ฐ ์ถ๋ ฅยถ
Snowflake๋ 16์ง์, base64 ๋ฐ UTF-8์ 3๊ฐ์ง ๋ฐ์ด๋๋ฆฌ ํ์ ๋๋ ์ธ์ฝ๋ฉ ๋ฐฉ์์ ์ง์ํฉ๋๋ค.
์ง์๋๋ ๋ฐ์ด๋๋ฆฌ ํ์์ ๊ฐ์ยถ
์ด ์น์ ์์๋ ์ง์๋๋ ์ด์ง ํ์์ ๋ํด ์ค๋ช ํฉ๋๋ค.
16์ง์(๊ธฐ๋ณธ๊ฐ)ยถ
โ16์ง์โ ํ์์ด๋ 16์ง์ ๋๋ base 16 ์ฒด๊ณ๋ฅผ ์๋ฏธํฉ๋๋ค. ์ด ํ์์์ ๊ฐ ๋ฐ์ดํธ๋ 2๊ฐ ๋ฌธ์(0
~ 9
์ฌ์ด์ ์ซ์ ๋ฐ A
~ F
์ฌ์ด์ ๋ฌธ์)๋ก ํํ๋ฉ๋๋ค. 16์ง์๋ฅผ ์ฌ์ฉํ๋ฉด ๋ค์ ๋ณํ์ ์ํํ ์ ์์ต๋๋ค.
From |
~ |
์ฐธ๊ณ |
---|---|---|
๋ฐ์ด๋๋ฆฌ |
String |
16์ง์์์๋ ๋๋ฌธ์๋ฅผ ์ฌ์ฉํฉ๋๋ค. |
String |
๋ฐ์ด๋๋ฆฌ |
16์ง์์์๋ ๋/์๋ฌธ์๋ฅผ ๊ตฌ๋ถํฉ๋๋ค. |
16์ง์๋ ๊ธฐ๋ณธ ๋ฐ์ด๋๋ฆฌ ํ์์ ๋๋ค.
base64ยถ
โbase64โ ํ์์ ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ(๋๋ ๋ฌธ์์ด ๋ฐ์ดํฐ)๋ฅผ ์ธ์ ๊ฐ๋ฅ ASCII ๋ฌธ์(๋ฌธ์, ์ซ์ ๋ฐ ๊ตฌ๋์ ๋๋ ์ํ ์ฐ์ฐ์)๋ก ์ธ์ฝ๋ฉํฉ๋๋ค. (base64 ์ธ์ฝ๋ฉ ๋ฐฉ์์ ๋ํ ์ ์๋ RFC4648 ์์ ์ ๊ณต๋ฉ๋๋ค.)
Base64๋ก ์ธ์ฝ๋ฉ๋ ๋ฐ์ดํฐ์ ์ด์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
Base64๋ก ์ธ์ฝ๋ฉ๋ ๋ฐ์ดํฐ๋ ์์ ASCII ํ ์คํธ์ด๋ฏ๋ก, BINARY ๋ฐ์ดํฐ๊ฐ ์๋ ASCII ๋ฌธ์ ๋ฐ์ดํฐ๋ฅผ ์ง์ํ๋ ์์คํ ์ ์ ์ฅํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์์ (๋์งํธ ์ํ)์ ํํํ๋ ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ ๋๋ ์ค๊ตญ์ด ๋ฌธ์๋ฅผ ํํํ๋ UTF ๋ฐ์ดํฐ๋ ASCII ํ ์คํธ๋ก ์ธ์ฝ๋ฉํ์ฌ ASCII ๋ฌธ์๋ง ์ง์ํ๋ ์์คํ ์ ์ ์ฅํ ์ ์์ต๋๋ค.
Base64๋ก ์ธ์ฝ๋ฉ๋ ๋ฐ์ดํฐ์๋ ์ ์ด ๋ฌธ์(์: ์ ์ก ๋ ๋ฌธ์, ํญ ๋ฌธ์)๊ฐ ํฌํจ๋์ง ์์ผ๋ฏ๋ก, base64๋ก ์ธ์ฝ๋ฉ๋ ๋ฐ์ดํฐ๋ ์ ์ด ๋ฌธ์๊ฐ ๋ฐ์ดํฐ๊ฐ ์๋ ๋ช ๋ น์ผ๋ก ํด์๋ ์ํ ์์ด ์์ ๋ฐ ์ก์ ํ ์ ์์ต๋๋ค. base64๋ก ์ธ์ฝ๋ฉ๋ ๋ฐ์ดํฐ๋ ํ ๋ฒ์ 1๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋(ํจํท์ ์ด๋ ๋ถ๋ถ์ด ๋ฐ์ดํฐ์ด๊ณ ์ด๋ ๋ถ๋ถ์ด ํค๋ ๋๋ ์ ์ด ์ ๋ณด์ธ์ง๋ฅผ ๋ํ๋ด๋ ํจํท ํค๋ ๋๋ ํ๋กํ ์ฝ์ ์ฌ์ฉํ์ง ์์) ๊ธฐ์กด ๋ชจ๋ ๋ฐ ์ ์ ํต์ ์ฅ๋น์ ํธํ๋ฉ๋๋ค.
Base64๋ก ์ธ์ฝ๋ฉ๋ ๋ฐ์ดํฐ์ ๋จ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋ฐ์ด๋๋ฆฌ์ ์ธ์ ๊ฐ๋ฅ ๋ฐ์ดํฐ ASCII ํํ ์ฌ์ด์์ ๋ฐ์ดํฐ๋ฅผ ์๋ก ๋ณํํ๊ธฐ ์ํด์๋ ๊ณ์ฐ ๋ฆฌ์์ค๊ฐ ์ฌ์ฉ๋ฉ๋๋ค.
Base64๋ก ์ธ์ฝ๋ฉ๋ ๋ฐ์ดํฐ๋ ์๋ณธ ๋ฐ์ดํฐ์ ๋นํด ์ฝ 1/3์ ์ ์ฅ์ ๊ณต๊ฐ์ ๋ ๋ง์ด ์ฐจ์งํฉ๋๋ค.
๋ค์ ์น์ ์์๋ base64 ์ธ์ฝ๋ฉ์ ๋ํ ๊ธฐ์ ์ ์ธ๋ถ ์ ๋ณด๋ฅผ ์ ๊ณตํฉ๋๋ค.
base64 ์ธ์ฝ๋ฉ ์ธ๋ถ ์ ๋ณดยถ
๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ์ 8๋นํธ ๋ฐ์ดํธ 3๊ฐ(์ด 24๋นํธ)๋ก ๊ตฌ์ฑ๋ ๊ฐ ๊ทธ๋ฃน์ด ๊ฐ 6๋นํธ์ 4๊ฐ ๊ทธ๋ฃน(24๋นํธ ์ ์ง)์ผ๋ก ์ฌ์ ๋ ฌ๋ฉ๋๋ค. 64๊ฐ์ ๊ฐ๋ฅํ 6๋นํธ ์กฐํฉ ๊ฐ๊ฐ์ ๋ค์์ 64๊ฐ ์ธ์ ๊ฐ๋ฅ ASCII ๋ฌธ์ ์ค ํ๋๋ฅผ ๋ํ๋ ๋๋ค.
๋๋ฌธ์(A~Z)
์๋ฌธ์(a~z)
์ซ์(0~9)
+
/
๋ํ, =
๋ฌธ์๊ฐ ์
๋ ฅ์ ๊ธธ์ด๊ฐ ์ ํํ 3์ ๋ฐฐ์๊ฐ ์๋ ๋ ์ฑ์ฐ๊ธฐ ๋ฌธ์๋ก ์ฌ์ฉ๋ฉ๋๋ค.
base64๋ก ์ธ์ฝ๋ฉ๋ ๋ฐ์ดํฐ์๋ ๊ณต๋ฐฑ ๋ฌธ์(์: ๋น์นธ ๋ฐ ์ค ๋ฐ๊ฟ)๊ฐ ํฌํจ๋์ง ์์ผ๋ฏ๋ก, ํ์ํ ๊ฒฝ์ฐ base64๋ก ์ธ์ฝ๋ฉ๋ ๋ฐ์ดํฐ์ ๊ณต๋ฐฑ์ ํจ๊ป ์ฌ์ฉํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ ์ก์ ๋๋ ์์ ์์ ๋ผ์ธ ๊ธธ์ด์ ์ต๋ ์ ํ์ด ์๋ ๊ฒฝ์ฐ ์ค ๋ฐ๊ฟ ๋ฌธ์๋ฅผ ์ถ๊ฐํ์ฌ ๋ฐ์ดํฐ์ ์์์ ์ ๋ฐํ์ง ์๊ณ base64๋ก ์ธ์ฝ๋ฉ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๋ณ ๋ผ์ธ์ผ๋ก ๋ถํ ํ ์ ์์ต๋๋ค. base64๋ฅผ ์ฌ์ฉํ๋ฉด ๋ค์ ๋ณํ์ ์ํํ ์ ์์ต๋๋ค.
From |
~ |
์ฐธ๊ณ |
---|---|---|
๋ฐ์ด๋๋ฆฌ |
String |
base64๋ ๊ณต๋ฐฑ ๋๋ ์ค ๋ฐ๊ฟ์ ์ฝ์ ํ์ง ์์ต๋๋ค. |
String |
๋ฐ์ด๋๋ฆฌ |
base64๋ ๋ชจ๋ ๊ณต๋ฐฑ ๋ฐ ์ค ๋ฐ๊ฟ์ ๋ฌด์ํฉ๋๋ค. |
UTF-8ยถ
UTF-8 ํ์์ ์ ๋์ฝ๋์ฉ UTF-8 ๋ฌธ์ ์ธ์ฝ๋ฉ์ ์๋ฏธํฉ๋๋ค.
UTF-8์ ํ ์คํธ์์ ๋ฐ์ด๋๋ฆฌ๋ก์ ์ธ์ฝ๋ฉ์์ ์ฌ์ฉ๋ฉ๋๋ค. ๊ฐ๋ฅํ ๋ชจ๋ BINARY ๊ฐ์ ์ ํจํ UTF-8 ๋ฌธ์์ด๋ก ๋ณํํ ์ ์๋ ๊ฒ์ ์๋๋ฏ๋ก ์ด์ง์์ ํ ์คํธ๋ก์ ์ธ์ฝ๋ฉ์์๋ UTF-8์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ด ํ์์ ๊ธฐ๋ณธ ๋ฐ์ดํฐ๋ฅผ ํ ๊ฐ์ง ํ์ ๋๋ ๋ค๋ฅธ ํ์ ์ผ๋ก ์ฌํด์ํ๊ธฐ ์ํด ๋ฐ์ด๋๋ฆฌ์ ๋ฌธ์์ด ์ฌ์ด์์ ์ผ๋์ผ ๋ณํ์ ์ํํ ๋ ์ค์ ์ธ์ฝ๋ฉ ๋ฐ ๋์ฝ๋ฉ๋ณด๋ค ํธ๋ฆฌํฉ๋๋ค.
๋ฐ์ด๋๋ฆฌ ๊ฐ์ ๋ํ ์ธ์ ๋งค๊ฐ ๋ณ์ยถ
๋ฐ์ด๋๋ฆฌ ๊ฐ์ Snowflake์ ์ก์์ ํ๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ ์ธ์ ๋งค๊ฐ ๋ณ์ 2๊ฐ๋ก ๊ฒฐ์ ๋ฉ๋๋ค.
BINARY_INPUT_FORMAT: VARCHAR ์์ BINARY ๋ก ๋ณํํ๋ ํจ์์ ๋ํ VARCHAR ์ ๋ ฅ์ ํ์์ ์ง์ ํฉ๋๋ค. ์ฉ๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
1๊ฐ์ ์ธ์๊ฐ ์ฌ์ฉ๋๋ TO_BINARY ๋ฒ์ ์์ BINARY๋ก ๋ณํํฉ๋๋ค.
Snowflake๋ก ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํฉ๋๋ค(ํ์ผ ํ์ ์ต์ ์ด ์ง์ ๋์ง ์์ ๊ฒฝ์ฐ, ์์ธํ ๋ด์ฉ์ ์๋ ์ฐธ์กฐ).
๋งค๊ฐ ๋ณ์๋
HEX
,BASE64
๋๋UTF-8
(๋๋UTF8
)๋ก ์ค์ ํ ์ ์์ต๋๋ค. ๋งค๊ฐ ๋ณ์ ๊ฐ์์๋ ๋/์๋ฌธ์๊ฐ ๊ตฌ๋ถ๋ฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ์HEX
์ ๋๋ค.BINARY_OUTPUT_FORMAT: BINARY ์์ VARCHAR ๋ก ๋ณํํ๋ ํจ์์์ ์ ๊ณต๋๋ VARCHAR ์ถ๋ ฅ์ ํ์์ ์ง์ ํฉ๋๋ค. ์ฉ๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
1๊ฐ์ ์ธ์๊ฐ ์ฌ์ฉ๋๋ TO_CHAR , TO_VARCHAR ๋ฒ์ ์์ VARCHAR๋ก ๋ณํํฉ๋๋ค.
Snowflake์์ ๋ฐ์ดํฐ๋ฅผ ์ธ๋ก๋ํฉ๋๋ค(ํ์ผ ํ์ ์ต์ ์ด ์ง์ ๋์ง ์์ ๊ฒฝ์ฐ, ์์ธํ ๋ด์ฉ์ ์๋ ์ฐธ์กฐ).
์ด์ง์์ varchar๋ก์ ๋ณํ์ด ๋ช ์์ ์ผ๋ก ํธ์ถ๋์ง ์์ ๊ฒฝ์ฐ ์ฌ๋์ด ์ฝ์ ์ ์๋ ํ์(์: Snowflake ์น ์ธํฐํ์ด์ค์์)์ผ๋ก ์ด์ง ๋ฐ์ดํฐ๋ฅผ ํ์ํฉ๋๋ค.
๋งค๊ฐ ๋ณ์๋
HEX
๋๋BASE64
๋ก ์ค์ ํ ์ ์์ต๋๋ค. ๋งค๊ฐ ๋ณ์ ๊ฐ์์๋ ๋/์๋ฌธ์๊ฐ ๊ตฌ๋ถ๋ฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ์HEX
์ ๋๋ค.์ฐธ๊ณ
UTF-8 ํ์์ ๊ฒฝ์ฐ ์ด์ง์์ ๋ฌธ์์ด๋ก์ ๋ณํ์ด ์คํจํ ์ ์์ผ๋ฏ๋ก, BINARY_OUTPUT_FORMAT ์
UTF-8
์ผ๋ก ์ค์ ํ ์ ์์ต๋๋ค. ์ด๋ฌํ ์ํฉ์์ UTF-8๋ฅผ ์ฌ์ฉํ์ฌ ๋ณํํ๋ ค๋ฉด, 2๊ฐ์ ์ธ์๊ฐ ์ฌ์ฉ๋๋ TO_CHAR , TO_VARCHAR ๋ฒ์ ์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
๋งค๊ฐ ๋ณ์๋ ๊ณ์ , ์ฌ์ฉ์ ๋ฐ ์ธ์ ์์ค์์ ์ค์ ํ ์ ์์ต๋๋ค. ํ์ฌ ์ธ์ ์ ๋ชจ๋ ์์ ์ ์ ์ฉ๋๋ ํ์ฌ ๋งค๊ฐ ๋ณ์๋ฅผ ํ์ธํ๋ ค๋ฉด SHOW PARAMETERS ๋ช ๋ น์ ์คํํฉ๋๋ค.
๋ฐ์ด๋๋ฆฌ ๊ฐ์ ๋ก๋/์ธ๋ก๋ํ๊ธฐ ์ํ ํ์ผ ํ์ ์ต์ ยถ
๋ฐ์ด๋๋ฆฌ ์ ๋ ฅ ๋ฐ ์ถ๋ ฅ ์ธ์ ๋งค๊ฐ ๋ณ์์ ๋ณ๋๋ก, Snowflake๋ BINARY_FORMAT ํ์ผ ํ์ ์ต์ ์ ์ ๊ณตํ๋ฉฐ, ์ด ์ต์ ์ ์ฌ์ฉํ๋ฉด Snowflake ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํ๊ฑฐ๋ ๋ฐ์ดํฐ๋ฅผ ์ธ๋ก๋ํ ๋ ๋ฐ์ด๋๋ฆฌ ํ์์ ๋ช ์์ ์ผ๋ก ์ ์ดํ ์ ์์ต๋๋ค.
์ด ์ต์
์ HEX
, BASE64
๋๋ UTF-8
(๊ฐ์ ๋/์๋ฌธ์ ๊ตฌ๋ถ)๋ก ์ค์ ํ ์ ์์ต๋๋ค. ์ด ์ต์
์ ๋ฐ์ดํฐ ๋ก๋ฉ ๋ฐ ์ธ๋ก๋ฉ ๋ชจ๋์ ์ํฅ์ ๋ฏธ์น๋ฉฐ, ๋ค๋ฅธ ํ์ผ ํ์ ์ต์
๊ณผ ์ ์ฌํ๊ฒ ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ์ง์ ์ด ๊ฐ๋ฅํฉ๋๋ค.
๋ช ๋ช ๋ ํ์ผ ํ์, ์ด๋ฆ์ด ์ง์ ๋ ์คํ ์ด์ง ๋๋ COPY ๋ช ๋ น์์ ์ง์ ์ฐธ์กฐ ๊ฐ๋ฅ.
์ด๋ฆ์ด ์ง์ ๋ ์คํ ์ด์ง, COPY ๋ช ๋ น์์ ์ง์ ์ฐธ์กฐ ๊ฐ๋ฅ.
COPY ๋ช ๋ น์์ ์ง์ .
๋ฐ์ดํฐ ๋ก๋ฉยถ
๋ฐ์ดํฐ ๋ก๋ฉ์์ ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ, BINARY_FORMAT์ ์คํ ์ด์ง๋ ๋ฐ์ดํฐ ํ์ผ์์ ๋ฐ์ด๋๋ฆฌ ๊ฐ์ ํ์์ ์ง์ ํฉ๋๋ค. ์ด ์ต์ ์ ์ธ์ ์ BINARY_INPUT_FORMAT ๋งค๊ฐ ๋ณ์์ ์ค์ ๋ ๋ชจ๋ ๊ฐ์ ์ฌ์ ์ ํฉ๋๋ค(๋ฐ์ด๋๋ฆฌ ๊ฐ์ ๋ํ ์ธ์ ๋งค๊ฐ ๋ณ์ ์ฐธ์กฐ).
์ด ์ต์
์ด HEX
๋๋ BASE64
๋ก ์ค์ ๋ ๊ฒฝ์ฐ ์คํ
์ด์ง๋ ๋ฐ์ดํฐ ํ์ผ์ ๋ฌธ์์ด์ด ์ ํจํ 16์ง์ ๋๋ base64๊ฐ ์๋๋ฉด ๋ฐ์ดํฐ ๋ก๋ฉ์ด ์คํจํ๊ฒ ๋ฉ๋๋ค. ์ด ๊ฒฝ์ฐ Snowflake๋ ์ค๋ฅ๋ฅผ ๋ฐํํ๊ณ ON_ERROR ๋ณต์ฌ ์ต์
์ ์ง์ ๋ ๋์์ด ์ํ๋ฉ๋๋ค.
๋ฐ์ดํฐ ์ธ๋ก๋ฉยถ
๋ฐ์ดํฐ ์ธ๋ก๋์์ ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ, BINARY_FORMAT ์ต์ ์ ์ง์ ๋ ์คํ ์ด์ง์ ํ์ผ๋ก ์ธ๋ก๋๋ ๋ฐ์ด๋๋ฆฌ ๊ฐ์ ์ ์ฉ๋๋ ํ์์ ์ง์ ํฉ๋๋ค. ์ด ์ต์ ์ ์ธ์ ์ BINARY_OUTPUT_FORMAT ๋งค๊ฐ ๋ณ์์ ์ค์ ๋ ๋ชจ๋ ๊ฐ์ ์ฌ์ ์ ํฉ๋๋ค(๋ฐ์ด๋๋ฆฌ ๊ฐ์ ๋ํ ์ธ์ ๋งค๊ฐ ๋ณ์ ์ฐธ์กฐ).
์ต์
์ด UTF-8
๋ก ์ค์ ๋ ๊ฒฝ์ฐ ํ
์ด๋ธ์ ์ด์ง ๊ฐ์ ์๋ชป๋ UTF-8 ์ด ํฌํจ๋์ด ์์ผ๋ฉด ๋ฐ์ดํฐ ์ธ๋ก๋ฉ์ด ์คํจํฉ๋๋ค. ์ด๋ฌํ ๊ฒฝ์ฐ Snowflake๋ ์ค๋ฅ๋ฅผ ๋ฐํํฉ๋๋ค.
์์ ์ ๋ ฅ/์ถ๋ ฅยถ
โ๋ณด๋ ๊ฒ๊ณผ ์ถ๋ ฅ์ด ์ผ์นํ์ง ์๋ ๊ฒฝ์ฐ๊ฐ ์์ผ๋ฏ๋กโ BINARY ์ ๋ ฅ/์ถ๋ ฅ์ ํผ๋์ค๋ฌ์ธ ์ ์์ต๋๋ค.
๋ค์ ์๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
CREATE OR REPLACE TABLE binary_table (v VARCHAR, b BINARY);
INSERT INTO binary_table (v, b)
SELECT 'AB', TO_BINARY('AB');
SELECT v, b FROM binary_table;
+----+----+
| V | B |
|----+----|
| AB | AB |
+----+----+
v
(VARCHAR) ์ด๊ณผ b
์ด์ ์ถ๋ ฅ์ ๋์ผํด ๋ณด์
๋๋ค. ๊ทธ๋ฌ๋ b
์ด์ ๊ฐ์ ์ด์ง๋ก ๋ณํ๋์์ต๋๋ค. b
์ด์ ๊ฐ์ด ๋ณ๊ฒฝ๋์ง ์์ ๊ฒ์ฒ๋ผ ๋ณด์ด๋ ์ด์ ๋ ๋ฌด์์ผ๊น์?
์ ๋ต์ TO_BINARY ์ ์ธ์๋ 16์ง์ ์ซ์ ์ํ์ค(๋ฐ์ดํ๋ก ๋ฌถ์ฌ ๋ฌธ์์ด์ฒ๋ผ ๋ณด์ด์ง๋ง)๋ก ์ฒ๋ฆฌ๋๋ฉฐ, ์ค์ ๋ก๋ ํ์๋๋ 2๊ฐ ๋ฌธ์๊ฐ 2๋ฐ์ดํธ์ ๋ฌธ์์ด ๋ฐ์ดํฐ๊ฐ ์๋ 1๋ฐ์ดํธ์ ์ด์ง ๋ฐ์ดํฐ๋ฅผ ๋ํ๋ด๋ 16์ง์ ์ซ์ ์์ผ๋ก ํด์๋์ด ํ์๋๊ธฐ ๋๋ฌธ์
๋๋ค. (์
๋ ฅ โ๋ฌธ์์ดโ์ 16์ง์ ์ด์ธ์ ๋ฌธ์๊ฐ ํฌํจ๋ ๊ฒฝ์ฐ์๋ ์ด ์์
์ด ์ฒ๋ฆฌ๋์ง ์์์ ๊ฒ์ด๋ฉฐ, "String '...' isn't a legal hex-encoded string"
์ ์ ์ฌํ ์ค๋ฅ ๋ฉ์์ง๊ฐ ๊ฒฐ๊ณผ๋ก ์ ๊ณต๋์์ ๊ฒ์
๋๋ค.)
๋ํ, BINARY ๋ฐ์ดํฐ๋ ํ์๋ ๋ ๊ธฐ๋ณธ์ ์ผ๋ก 16์ง์ ์ซ์์ ์ํ์ค๋ก ํ์๋ฉ๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก ๋ฐ์ดํฐ๊ฐ 16์ง์ ์ซ์(๋ฌธ์์ด ์๋)๋ก ์ ๋ ฅ๋๊ณ 16์ง์ ์ซ์๋ก ํ์๋๋ฏ๋ก ๋ณ๊ฒฝ๋์ง ์์ ๊ฒ์ฒ๋ผ ๋ณด์ ๋๋ค.
์ฌ์ค, 2๋ฌธ์ ๋ฌธ์์ด AB
๋ฅผ ์ ์ฅํ๋ ๊ฒ์ด ๋ชฉ์ ์ด์๋ค๋ฉด ์ด ์ฝ๋๋ ์๋ชป๋ ๊ฒ์
๋๋ค. ์ฌ๋ฐ๋ฅธ ์ฝ๋๋ HEX_ENCODE ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌธ์์ด์ 16์ง์ ์ซ์ ์ํ์ค๋ก ๋ณํ(๋๋ ๋ค๋ฅธ โ์ธ์ฝ๋ฉโ ํจ์๋ฅผ ์ฌ์ฉํ์ฌ base64์ ๊ฐ์ ๋ค๋ฅธ ํ์์ผ๋ก ๋ณํ)ํ ํ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ฒ์
๋๋ค. ๊ทธ๋ฌํ ์๋ ์๋์์ ์ ๊ณต๋ฉ๋๋ค.
16์ง์(โHEXโ) ํ์์ ์ยถ
BINARY ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅํ๋ ํ ๊ฐ์ง ๋ฐฉ๋ฒ์ ๋ค์ ์์ ์ ๊ฐ์ด 16์ง์ ๋ฌธ์์ด๋ก ์ธ์ฝ๋ฉํ๋ ๊ฒ์ ๋๋ค.
BINARY์ด์ ์ฌ์ฉํ์ฌ ํ ์ด๋ธ์ ์์ฑํฉ๋๋ค.
CREATE OR REPLACE TABLE demo_binary_hex (b BINARY);
TO_BINARY ํจ์๋ฅผ ์ฌ์ฉํ์ฌ โ์ผ๋ฐโ ๋ฌธ์์ด์ ์ฝ์ ํ๊ณ ์ ํจํ BINARY ๊ฐ์ผ๋ก ๋ณํํ๋ฉด ์คํจํ๊ฒ ๋ฉ๋๋ค.
INSERT INTO demo_binary_hex (b) SELECT TO_BINARY('HELP', 'HEX');
์ค๋ฅ ๋ฉ์์ง๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
100115 (22000): The following string is not a legal hex-encoded value: 'HELP'
์ด๋ฒ์๋ ์ ๋ ฅ์ 16์ง์ ์ซ์์ ๋ฌธ์์ด๋ก ๋ช ์์ ์ผ๋ก ๋ณํํ ํ ์ฝ์ ํฉ๋๋ค(์ฑ๊ณตํจ).
INSERT INTO demo_binary_hex (b) SELECT TO_BINARY(HEX_ENCODE('HELP'), 'HEX');
์ด์ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํฉ๋๋ค.
SELECT TO_VARCHAR(b), HEX_DECODE_STRING(TO_VARCHAR(b)) FROM demo_binary_hex;
+---------------+----------------------------------+
| TO_VARCHAR(B) | HEX_DECODE_STRING(TO_VARCHAR(B)) |
|---------------+----------------------------------|
| 48454C50 | HELP |
+---------------+----------------------------------+
๋ณด์๋ค์ํผ, ๊ธฐ๋ณธ์ ์ผ๋ก ์ถ๋ ฅ์ 16์ง์๋ก ํ์๋ฉ๋๋ค. ์๋ณธ ๋ฌธ์์ด์ ๋ค์ ๊ฐ์ ธ์ค๋ ค๋ฉด, HEX_DECODE_STRING ํจ์(๋ฌธ์์ด์ ์ธ์ฝ๋ฉํ๊ธฐ ์ํด ์ด์ ์ ์ฌ์ฉํ HEX_ENCODE ํจ์์ ๋ฐ๋)๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๋ค์ ์ฟผ๋ฆฌ๋ ๋ด๋ถ์์์ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ์ ์์ธํ๊ฒ ๋ณด์ฌ์ค๋๋ค.
SELECT 'HELP',
HEX_ENCODE('HELP'),
b,
HEX_DECODE_STRING(HEX_ENCODE('HELP')),
TO_VARCHAR(b),
HEX_DECODE_STRING(TO_VARCHAR(b))
FROM demo_binary_hex;
+--------+--------------------+----------+---------------------------------------+---------------+----------------------------------+
| 'HELP' | HEX_ENCODE('HELP') | B | HEX_DECODE_STRING(HEX_ENCODE('HELP')) | TO_VARCHAR(B) | HEX_DECODE_STRING(TO_VARCHAR(B)) |
|--------+--------------------+----------+---------------------------------------+---------------+----------------------------------|
| HELP | 48454C50 | 48454C50 | HELP | 48454C50 | HELP |
+--------+--------------------+----------+---------------------------------------+---------------+----------------------------------+
BASE64 ํ์์ ์ยถ
์ด ์น์ ์ ์ฝ๊ธฐ ์ ์ 16์ง์(โHEXโ) ํ์์ ์ ์น์ ์ ์ฝ์ด๋ณด์ญ์์ค. ๊ธฐ๋ณธ ๊ฐ๋ ์ ์ ์ฌํ์ง๋ง, 16์ง์(โHEXโ) ํ์์ ์ ์น์ ์์๋ ๋ ์์ธํ ์ค๋ช ์ด ์ ๊ณต๋ฉ๋๋ค.
BINARY์ด์ ์ฌ์ฉํ์ฌ ํ ์ด๋ธ์ ์์ฑํฉ๋๋ค.
CREATE OR REPLACE TABLE demo_binary_base64 (b BINARY);
ํ์ ์ฝ์ ํฉ๋๋ค.
INSERT INTO demo_binary_base64 (b) SELECT TO_BINARY(BASE64_ENCODE('HELP'), 'BASE64');
ํด๋น ํ์ ๊ฒ์ํฉ๋๋ค.
SELECT 'HELP',
BASE64_ENCODE('HELP'),
BASE64_DECODE_STRING(BASE64_ENCODE('HELP')),
TO_VARCHAR(b, 'BASE64'),
BASE64_DECODE_STRING(TO_VARCHAR(b, 'BASE64'))
FROM demo_binary_base64;
+--------+-----------------------+---------------------------------------------+-------------------------+-----------------------------------------------+
| 'HELP' | BASE64_ENCODE('HELP') | BASE64_DECODE_STRING(BASE64_ENCODE('HELP')) | TO_VARCHAR(B, 'BASE64') | BASE64_DECODE_STRING(TO_VARCHAR(B, 'BASE64')) |
|--------+-----------------------+---------------------------------------------+-------------------------+-----------------------------------------------|
| HELP | SEVMUA== | HELP | SEVMUA== | HELP |
+--------+-----------------------+---------------------------------------------+-------------------------+-----------------------------------------------+
UTF-8 ํ์์ ์ยถ
BINARY์ด์ ์ฌ์ฉํ์ฌ ํ ์ด๋ธ์ ์์ฑํฉ๋๋ค.
CREATE OR REPLACE TABLE demo_binary_utf8 (b BINARY);
ํ์ ์ฝ์ ํฉ๋๋ค.
INSERT INTO demo_binary_utf8 (b) SELECT TO_BINARY('HELP', 'UTF-8');
ํด๋น ํ์ ๊ฒ์ํฉ๋๋ค.
SELECT 'HELP',
TO_VARCHAR(b, 'UTF-8')
FROM demo_binary_utf8;
+--------+------------------------+
| 'HELP' | TO_VARCHAR(B, 'UTF-8') |
|--------+------------------------|
| HELP | HELP |
+--------+------------------------+