N바이트 길이의 고정 문자열입니다(문자 수나 코드 포인트 수 기준이 아님).
FixedString 타입의 컬럼을 선언하려면 다음 구문을 사용합니다:
N은 자연수입니다.
FixedString 타입은 데이터 길이가 정확히 N바이트일 때 효율적입니다. 그 외의 경우에는 오히려 효율이 떨어질 가능성이 높습니다.
FixedString 타입이 지정된 컬럼에 효율적으로 저장할 수 있는 값의 예시는 다음과 같습니다.
- IP 주소의 이진 표현 (
FixedString(16)은 IPv6에 사용). - 언어 코드 (ru_RU, en_US … ).
- 통화 코드 (USD, RUB … ).
- 해시의 이진 표현 (
FixedString(16)은 MD5에,FixedString(32)는 SHA256에 사용).
- 문자열이
N바이트보다 적으면 null byte를 추가해 문자열을 채웁니다. - 문자열이
N바이트보다 많으면Too large value for FixedString(N)예외를 발생시킵니다.
FixedString(2) 컬럼 하나만 있는 테이블을 살펴보겠습니다.
FixedString(N) 값의 길이는 고정되어 있다는 점에 유의하십시오. length 함수는 FixedString(N) 값이 null byte로만 채워져 있어도 N을 반환하지만, 이 경우 empty 함수는 1을 반환합니다.
WHERE 절로 데이터를 조회할 때는 조건을 어떻게 지정하느냐에 따라 결과가 달라집니다.
- 동등 연산자
=,==또는equals함수를 사용하면 ClickHouse는\0문자를 고려하지 않습니다. 즉, 쿼리SELECT * FROM FixedStringTable WHERE name = 'a';와SELECT * FROM FixedStringTable WHERE name = 'a\0';는 동일한 결과를 반환합니다. LIKE절을 사용하면 ClickHouse는\0문자를 고려합니다. 따라서 필터 조건에\0문자를 명시적으로 지정해야 할 수 있습니다.