Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 SET 값에 '+0'을 더하면 무엇이 될까? — SET 타입의 정수 변환 원리

MySQL에서 SET 타입 컬럼에 '+0'을 더하면 해당 SET 값이 정수(비트마스크 값)로 변환됩니다. SET 타입은 내부적으로 각 멤버를 비트(bit)로 관리하기 때문인데, 이를 숫자로 확인할 수 있는 아주 유용한 방법입니다.

예제 테이블 생성

먼저 예제로 사용할 테이블을 만들어 보겠습니다.

mysql> create table SetZeroDemo
    -> (
    -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> TechnicalSkills set('C','Spring Framework /Hibernate','Python','Django Framework','Core Java') NOT NULL
    -> );
Query OK, 0 rows affected (0.56 sec)

데이터 삽입

INSERT 문을 사용해 몇 개의 레코드를 추가합니다.

mysql> insert into SetZeroDemo(TechnicalSkills)
-> values('C,Spring Framework /Hibernate,Python,Django Framework,Core Java');
Query OK, 1 row affected (0.20 sec)

저장된 데이터 확인

SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.

mysql> select *from SetZeroDemo;

실행 결과는 다음과 같습니다.

+----+-----------------------------------------------------------------+
| Id | TechnicalSkills                                                 |
+----+-----------------------------------------------------------------+
| 1  | C,Spring Framework /Hibernate,Python,Django Framework,Core Java |
+----+-----------------------------------------------------------------+
1 row in set (0.00 sec)

SET 값에 '+0' 적용하기

이제 SET 컬럼에 '+0'을 더하는 쿼리를 실행해 보겠습니다.

mysql> select TechnicalSkills+0 from SetZeroDemo;

결과는 다음과 같습니다.

+-------------------+
| TechnicalSkills+0 |
+-------------------+
| 31                |
+-------------------+
1 row in set (0.00 sec)

왜 결과가 31일까?

MySQL의 SET 타입은 각 멤버를 왼쪽부터 오른쪽까지 비트 자릿수(2의 거듭제곱)에 매핑합니다. 위 테이블에는 5개의 기술이 정의되어 있으므로, 각 멤버는 20부터 24까지의 값을 가집니다.

모든 멤버가 선택되었기 때문에 각 비트 값을 모두 더하면 다음과 같이 계산됩니다.

=20+21+22+23+24
=1+2+4+8+16
=15+16
=31

즉, TechnicalSkills+0은 SET 문자열을 내부 비트 표현값인 31로 변환한 것입니다. 이처럼 '+0' 연산은 SET 값이 실제로 어떤 멤버들이 선택되었는지를 숫자로 빠르게 확인하고 싶을 때 유용하게 활용할 수 있습니다.