MySQL에서 데이터 타입을 BigInt로 변환하는 방법
MySQL에서 문자열이나 다른 진법의 숫자 값을 BigInt 형태로 변환하려면 CAST 연산자와 CONV() 함수를 함께 사용해야 합니다.
CONV() 함수는 하나의 진법 체계를 다른 진법 체계로 변환할 때 사용합니다. 예를 들어, 16진수(hexadecimal)를 10진수(decimal)로 바꾸려면 첫 번째 인수에 16, 두 번째 인수에 10을 지정하면 됩니다.
기본 문법
변환 시 사용하는 기본적인 문법은 다음과 같습니다.
SELECT CAST(CONV('yourColumnName',16,10) AS UNSIGNED INTEGER) as anyAliasName FROM yourTableName;예제 테이블 생성
문법을 실제로 이해하기 위해 먼저 테이블을 생성해 보겠습니다. 테이블 생성 쿼리는 다음과 같습니다.
mysql> create table castTypeToBigIntDemo
-> (
-> Id int NOT NULL AUTO_INCREMENT,
-> Value varchar(100),
-> PRIMARY KEY(Id)
-> );
Query OK, 0 rows affected (1.19 sec)샘플 데이터 삽입
INSERT 명령을 사용해 16진수 형태의 문자열 데이터를 여러 개 입력합니다.
mysql> insert into castTypeToBigIntDemo(Value) values('AB5');
Query OK, 1 row affected (0.13 sec)
mysql> insert into castTypeToBigIntDemo(Value) values('55244A5562C5566354');
Query OK, 1 row affected (0.15 sec)
mysql> insert into castTypeToBigIntDemo(Value) values('4546575765ABD78');
Query OK, 1 row affected (0.15 sec)
mysql> insert into castTypeToBigIntDemo(Value) values('5979787DEFAB');
Query OK, 1 row affected (0.19 sec)
mysql> insert into castTypeToBigIntDemo(Value) values('86868686856ABD');
Query OK, 1 row affected (0.17 sec)저장된 데이터 확인
SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select *from castTypeToBigIntDemo;
실행 결과는 다음과 같습니다.
+----+--------------------+ | Id | Value | +----+--------------------+ | 1 | AB5 | | 2 | 55244A5562C5566354 | | 3 | 4546575765ABD78 | | 4 | 5979787DEFAB | | 5 | 86868686856ABD | +----+--------------------+ 5 rows in set (0.00 sec)
CAST와 CONV()로 BigInt 변환 실행
이제 Value 컬럼의 16진수 문자열을 부호 없는 정수(BigInt)로 변환하는 쿼리를 실행합니다.
mysql> SELECT CAST(CONV(Value,16,10) AS UNSIGNED INTEGER) as BigNumber from castTypeToBigIntDemo;
실행 결과는 다음과 같습니다.
+----------------------+ | BigNumber | +----------------------+ | 2741 | | 18446744073709551615 | | 311985829366644088 | | 98378247434155 | | 37865559219858109 | +----------------------+ 5 rows in set, 1 warning (0.00 sec)
주의 사항: 오버플로우 경고
결과에 1 warning이 표시된 것에 주목할 필요가 있습니다. 두 번째 행의 값 '55244A5562C5566354'는 17자리 16진수로, MySQL의 최대 부호 없는 정수 범위(2^64 − 1 = 18,446,744,073,709,551,615)를 초과합니다. 따라서 CONV() 함수는 해당 값을 최대값인 18446744073709551615로 잘라내어 반환하고 경고를 발생시킵니다.
따라서 실무에서는 변환 대상 값이 BigInt 범위 내에 있는지 반드시 확인한 후 변환 작업을 수행하는 것이 안전합니다.