728x90
ROUND(컬럼 / 1000.0) AS 별칭
MySQL에서 위 쿼리 조회결과가 컬럼 타입은 INT였고 컬럼값에 예시로 2200 이 들어간다면 결과는 2인데
자바에서 object가 Integer로 되어있지않고, 타입이 BigDecimal로 되어있어서 계속 의아 해서 찾아본 내용입니다.
1.부동 소수점 연산: 1000.0은 부동 소수점 숫자입니다. INT 타입의 컬럼을 1000.0으로 나누면, MySQL은 이 연산을 부동 소수점으로 처리합니다. 예를 들어, 2200 / 1000.0의 결과는 2.2가 됩니다. 이 과정에서 소수점이 포함된 결과가 생성됩니다.
2.ROUND 함수의 동작: ROUND() 함수는 입력된 숫자를 지정된 자릿수까지 반올림하지만, 입력된 숫자의 데이터 타입을 변경하지는 않습니다. 즉, 부동소수점 숫자로 입력된 값은 부동소수점 형태로 반올림된 결과를 반환합니다.
ROUND(2.2)는 2가 되지만, MySQL은 여전히 이 연산을 부동 소수점으로 처리합니다.
3.JDBC 드라이버의 반환 타입: MySQL의 JDBC 드라이버는 SQL 쿼리의 결과를 Java 데이터 타입으로 변환할 때, 소수점이 포함될 가능성이 있는 결과를 BigDecimal로 변환합니다. 이는 SQL의 DECIMAL, FLOAT, DOUBLE 타입과의 매핑을 고려한 것입니다. 따라서, MySQL에서 소수점 연산을 수행한 결과는 Java에서 BigDecimal로 안전하게 반환됩니다.
아래는 MySQL 데이터타입 Java 데이터타입 비교 표입니다.
TINYINT | Integer |
BIT | Boolean |
BOOL/BOOLEAN (TINYINT(1)) | Integer |
SMALLINT | Unsigned 상관없이 Integer |
MEDIUMINT | Integer, Unsinged라면 Long |
INT | Integer, Unsigned라면 Long |
BIGINT | Long, Unsigned라면 java.math.BigInteger |
FLOAT | Float |
DOUBLE | Double |
DECIMAL | java.math.BigDecimal |
DATE | java.sql.Date |
DATETIME | java.sql.Timestamp |
TIMESTAMP | java.sql.Timestamp |
TIME | java.sql.Timestamp |
YEAR | yearsIsDateType이 설정됐다면 java.sql.Date, 아니라면 Short |
CHAR | 컬럼이 Binary로 설정되지 않았다면 String, 돼 있다면 byte[] |
VARCHAR | CHAR와 동일 |
BINARY | byte[] |
VARBINARY | byte[] |
TINYBLOB | byte[] |
TINYTEXT | String |
BLOB | byte[] |
TEXT | String |
MEDIUMBLOB | byte[] |
MEDIUMTEXT | String |
LONGBLOB | byte[] |
LONGTEXT | String |
ENUM | String |
SET | String |
728x90
'STUDY > JAVA' 카테고리의 다른 글
[JAVA] Date Calender SimpleDateFormat 과 java.time 패키지 (0) | 2025.01.16 |
---|---|
[JAVA] java.nio 패키지 총정리 (1) | 2024.12.30 |
[Java] 파일 읽고 쓸 때 UTF-8 인코딩 처리 방법 정리 (1) | 2024.11.08 |
[Java] Javadoc 활용한 자바 주석 처리 (0) | 2024.10.30 |
[Java] 바이트 크기를 사람이 읽기 편한 형식으로 변환 (kb, mb, gb ...) (0) | 2024.10.14 |