🦭 DATA_TYPES

λ‚˜λ‚˜'s BrainΒ·2024λ…„ 7μ›” 9일

MariaDB

λͺ©λ‘ 보기
11/15
post-thumbnail

πŸ“ DATA TYPES

πŸ’‘ MySQL은 μ—¬λŸ¬ κ°€μ§€ 데이터 μœ ν˜•μ„ 지원(λ¬Έμžμ—΄, 숫자, λ‚ μ§œ, μ‹œκ°„)ν•œλ‹€.
μ μ ˆν•œ 데이터 μœ ν˜•μ„ μ •μ˜ν•˜λ©΄ 데이터 μ €μž₯ 곡간을 효율적으둜 μ‚¬μš©ν•˜κ³  데이터 μž…λ ₯의 μœ νš¨μ„± 검사에도 도움이 λœλ‹€.

πŸ”– 데이터 ν˜•μ‹μ˜ μ’…λ₯˜

βœ… 숫자 데이터 ν˜•μ‹

- μ •μˆ˜ λ˜λŠ” μ‹€μˆ˜ λ“±μ˜ 숫자λ₯Ό ν‘œν˜„ν•œλ‹€.
- FLOATμ΄λ‚˜ DOUBLEν˜•μ€ 큰 λ²”μœ„μ˜ 숫자λ₯Ό μ €μž₯ν•  수 μžˆμ§€λ§Œ μ •ν™•ν•˜μ§€ μ•Šμ€ κ·Όμ‚¬μΉ˜λ₯Ό μ €μž₯ν•œλ‹€. λ”°λΌμ„œ μ‹€μˆ˜ ν˜•μ„ μ €μž₯ν•˜κ³  싢어도 DECIMAL을 μ‚¬μš©ν•˜λŠ” 것이 λ°”λžŒμ§ν•˜λ‹€.

데이터 ν˜•μ‹λ°”μ΄νŠΈ 수숫자 λ²”μœ„μ„€λͺ…
BIT(N)N/B1~64Bit ν‘œν˜„, b'0000'ν˜•μ‹μœΌλ‘œ ν‘œν˜„
TINYINT1-128 ~ 127μ •μˆ˜
SMALLINT2-32,768 ~ 32,767μ •μˆ˜
MEDIUMINT3-8,388,608 ~ 8,388,607μ •μˆ˜
INT INTEGER4μ•½-21μ–΅ ~ +21μ–΅μ •μˆ˜
BIGINT8μ•½ -900κ²½ ~ +900κ²½μ •μˆ˜
FLOAT43.40E+38 ~ -1.17E-38μ†Œμˆ˜μ  μ•„λž˜ 7μžλ¦¬κΉŒμ§€ ν‘œν˜„
DOUBLE8-1.22E-308 ~ 1.79E+308μ†Œμˆ˜μ  μ•„λž˜ 15μžλ¦¬κΉŒμ§€ ν‘œν˜„
DECIMAL(m,[d]) NUMBER(m,[d])5~17-10^38+1 ~ 10^38-1전체 자릿수(m)와 μ†Œμˆ˜μ  μ΄ν•˜ 자릿수(d)λ₯Ό κ°€μ§„

βœ… 문자 데이터 ν˜•μ‹

- CHARλŠ” 고정길이 λ¬Έμžν˜•μœΌλ‘œ μžλ¦Ώμˆ˜κ°€ λΆˆλ³€μ΄λ‹€.
- VARCHARλŠ” 가변길이 λ¬Έμžν˜•μœΌλ‘œ μžλ¦Ώμˆ˜κ°€ 가변이닀.
(큰 자릿수λ₯Ό 섀정해도 μ €μž₯ν•  곡간을 효율적으둜 μ‚¬μš©ν•  수 μžˆλ‹€.)
- CHAR ν˜•μ‹μœΌλ‘œ μ„€μ •ν•˜λŠ” 것이 INSERT/UPDATE μ‹œμ— 일반적으둜 더 쒋은 μ„±λŠ₯을 λ°œνœ˜ν•œλ‹€.
- λŒ€μš©λŸ‰ λ°μ΄ν„°λŠ” TEXTκ³„μ—΄μ˜ 데이터 ν˜•μ‹μœΌλ‘œ μ €μž₯ν•œλ‹€.
- BLOB(Binary Large Object)은 사진 파일, λ™μ˜μƒ 파일, λ¬Έμ„œ 파일 λ“±μ˜ λŒ€μš©λŸ‰ 이진 데이터λ₯Ό μ €μž₯ν•œλ‹€.
- ENUM은 μ—΄κ±°ν˜• 데이터λ₯Ό μ‚¬μš©(μš”μΌμ΄λ‚˜ μΉ΄ν…Œκ³ λ¦¬ λ“±) μ‹œ ν™œμš©λ˜λŠ” 방식이닀.
- SET은 μ΅œλŒ€ 64개λ₯Ό μ€€λΉ„ν•œ 후에 2κ°œμ”© μ„ΈνŠΈλ‘œ 데이터λ₯Ό μ €μž₯ν•˜λŠ” 방식을 μ‚¬μš© μ‹œ ν™œμš©λ˜λŠ” 방식이닀.
- LONGTEXTλŠ” λŒ€μš©λŸ‰ λ¬Έμ„œ 데이터, LONGBLOB은 λ™μ˜μƒ 파일과 같은 큰 λ°”μ΄λ„ˆλ¦¬ 파일 μ €μž₯ μ‹œμ— ν™œμš©ν•  수 μžˆλ‹€.

데이터 ν˜•μ‹λ°μ΄ν„° ν˜•μ‹λ°”μ΄νŠΈ μˆ˜μ„€λͺ…
CHAR(n)1 ~ 255고정길이 λ¬Έμžν˜• n을 1λΆ€ν„° 255κΉŒμ§€ μ§€μ • κ·Έλƒ₯ CHAR만 μ“°λ©΄ CHAR(1)κ³Ό 동일
VARCHAR(n)1 ~ 65535가변길이 λ¬Έμžν˜•
n을 μ‚¬μš©ν•˜λ©΄ 1λΆ€ν„° 65535κΉŒμ§€ μ§€μ •
BINARY(n)1 ~ 255κ³ μ •κΈΈμ΄μ˜ 이진 데이터 κ°’
VARBINARY(n)1 ~ 255κ°€λ³€κΈΈμ΄μ˜ 이진 데이터 κ°’
TEXTTINYTEXT1 ~ 255255 크기의 TEXT 데이터 κ°’
TEXTTEXT1 ~ 65535N 크기의 TEXT 데이터 κ°’
TEXTMEDIUMTEXT1 ~ 1677721516777215 크기의 TEXT 데이터 κ°’
TEXTLONGTEXT1 ~ 4294967295μ΅œλŒ€ 4GB 크기의 TEXT 데이터 κ°’
BLOBTINYBLOB1 ~ 255255 크기의 BLOB 데이터 κ°’
BLOBBLOB1 ~ 65535N 크기의 BLOB 데이터 κ°’
BLOBMEDIUMBLOB1 ~ 1677721516777215 크기의 BLOB 데이터 κ°’
BLOBLONGBLOB1 ~ 4294967295μ΅œλŒ€ 4GB 크기의 BLOB 데이터 κ°’
ENUM(κ°’λ“€...)1 λ˜λŠ” 2μ΅œλŒ€ 65535개의 μ—΄κ±°ν˜• 데이터 κ°’
SET(κ°’λ“€...)1, 2, 3, 4, 8μ΅œλŒ€ 64개의 μ„œλ‘œ λ‹€λ₯Έ 데이터 κ°’

βœ… λ‚ μ§œμ™€ μ‹œκ°„ 데이터 ν˜•μ‹

데이터 ν˜•μ‹λ°”μ΄νŠΈ μˆ˜μ„€λͺ…
DATE3λ‚ μ§œλŠ” 1001-01-01 ~ 9999-12-31 κΉŒμ§€ μ €μž₯되며 λ‚ μ§œ ν˜•μ‹λ§Œ μ‚¬μš©
'YYYY-MM-DD' ν˜•μ‹μœΌλ‘œ μ‚¬μš©λ¨
TIME3-838:59:59.000000 ~ 838:59:59.000000 κΉŒμ§€ μ €μž₯되며
'HH:MM:SS' ν˜•μ‹μœΌλ‘œ μ‚¬μš©
DATETIME8λ‚ μ§œλŠ” 1001-01-01 00:00:00 ~ 9999-12-31 23:59:59 κΉŒμ§€ μ €μž₯되며 ν˜•μ‹μ€
'YYYY-MM-DD HH:MM:SS' ν˜•μ‹μœΌλ‘œ μ‚¬μš©
TIMESTAMP4λ‚ μ§œλŠ” 1001-01-01 00:00:00 ~ 9999-12-31 23:59:59 κΉŒμ§€ μ €μž₯되며 ν˜•μ‹μ€ 'YYYY-MM-DD HH:MM:SS' ν˜•μ‹μœΌλ‘œ μ‚¬μš©
time_zone μ‹œμŠ€ν…œ λ³€μˆ˜μ™€ 관련이 있고 UTC μ‹œκ°„λŒ€ λ³€ν™˜ν•˜μ—¬ μ €μž₯
YEAR1 (tiny_int?)1901 ~ 2155κΉŒμ§€ μ €μž₯
'YYYY' ν˜•μ‹μœΌλ‘œ μ‚¬μš©

βœ… 기타 데이터 ν˜•μ‹

데이터 ν˜•μ‹λ°”μ΄νŠΈ μˆ˜μ„€λͺ…
GEOMETRYN/A곡간 데이터 ν˜•μ‹μœΌλ‘œ μ„ , 점 및 λ‹€κ°ν˜• 같은 곡간 데이터 개체λ₯Ό μ €μž₯ν•˜κ³  μ‘°μž‘
JSON8JSON λ¬Έμ„œλ₯Ό μ €μž₯

πŸ”– ν˜•λ³€ν™˜

πŸ’« SQL λ°μ΄ν„°μ˜ ν˜•λ³€ν™˜μ—λŠ” λͺ…μ‹œμ  ν˜•λ³€ν™˜κ³Ό μ•”μ‹œμ  ν˜•λ³€ν™˜μ΄ μžˆλ‹€.

βœ… λͺ…μ‹œμ  ν˜•λ³€ν™˜(Explicit Conversion)

- CAST (expression AS λ°μ΄ν„°ν˜•μ‹ [(길이)])
- CONVERT (expression, λ°μ΄ν„°ν˜•μ‹ [(길이)])
- 데이터 ν˜•μ‹μœΌλ‘œ κ°€λŠ₯ν•œ 것은 BINARY, CHAR, DATE, DATETIME, DECIMAL, JSON, SIGNED INTEGER, TIME, UNSIGNED INTEGER 등이 μžˆλ‹€.

    SELECT AVG(menu_price) FROM tbl_menu;
    SELECT CAST(AVG(menu_price) AS SIGNED INTEGER) AS '평균 메뉴 가격' FROM tbl_menu;
    SELECT CONVERT(AVG(menu_price), SIGNED INTEGER) AS '평균 메뉴 가격' FROM tbl_menu;
SELECT CAST('2023$5$30' AS DATE);
SELECT CAST('2023/5/30' AS DATE);
SELECT CAST('2023%5%30' AS DATE);
SELECT CAST('2023@5@30' AS DATE);

➑️ 메뉴 가격 κ΅¬ν•˜κΈ°

    SELECT CAST(menu_price AS CHAR(5)) FROM tbl_menu;
    SELECT CONCAT(CAST(menu_price AS CHAR(5)), '원') FROM tbl_menu;

➑️ μΉ΄ν…Œκ³ λ¦¬λ³„ 메뉴 가격 합계 κ΅¬ν•˜κΈ°

    SELECT category_code, CONCAT(CAST(SUM(menu_price) AS CHAR(10)), '원') FROM tbl_menu GROUP BY category_code;

βœ… μ•”μ‹œμ  ν˜•λ³€ν™˜(Implicit Conversion)

λ”°λ‘œ μ²˜λ¦¬ν•˜μ§€ μ•Šμ•„λ„ λ‚΄λΆ€μ μœΌλ‘œ μžλ™μœΌλ‘œ ν˜•λ³€ν™˜μ΄ 이루어진닀.

    SELECT '1' + '2';    -- 각 λ¬Έμžκ°€ μ •μˆ˜λ‘œ λ³€ν™˜λ¨
    SELECT CONCAT(menu_price, '원') FROM tbl_menu;    -- menu_priceκ°€ 문자둜 λ³€ν™˜λ¨
    SELECT 3 > 'MAY';    -- λ¬ΈμžλŠ” 0으둜 λ³€ν™˜λœλ‹€.
    SELECT 5 > '6MAY';   -- λ¬Έμžμ—μ„œ 첫번째둜 λ‚˜μ˜¨ μˆ«μžλŠ” μ •μˆ˜λ‘œ μ „ν™˜λœλ‹€.
    SELECT 5 > 'M6AY';   -- μˆ«μžκ°€ 뒀에 λ‚˜μ˜€λ©΄ 문자둜 μΈμ‹λ˜μ–΄ 0으둜 λ³€ν™˜λœλ‹€.
    SELECT '2023-5-30';  -- λ‚ μ§œν˜•μœΌλ‘œ λ°”λ€” 수 μžˆλŠ” λ¬ΈμžλŠ” DATEν˜•μœΌλ‘œ λ³€ν™˜λœλ‹€.
profile
"λ‘œμ»¬μ—μ„  λ¬Έμ œμ—†μ—ˆλŠ”λ°β€¦?"

0개의 λŒ“κΈ€