기초공부 - (10) Innodb_large_prefix
2024. 3. 25. 21:26ㆍMySQL/Class
반응형
# innodb_large_prefix는 인덱스를 생성할 수 있는 최대 크기 입니다.
설정값을 ON으로 하였을 경우 인덱스의 최대 크기는 3072 byte, OFF일 경우 767 byte의 값을 갖게 됩니다.
예를 들자면 a_col varchar(255) 라는 컬럼이 있다고 가정한다면, 아래와 같이 최대 크기의 byte를 저장할 수가 있습니다.
utf8일 경우 : 255 * 3byte = 765 byte utf8mb4일 경우 : 255 * 4byte = 1020 byte |
- varchar(255) 라는 의미는 Oracle에서는 255 byte이지만, MySQL에서는 글자길이라서 byte로 변환 한 것입니다.
만약 innodb_large_prefix 의 설정값이 OFF라면 utf8mb4 캐릭터셋으로 255글자의 컬럼은 인덱스가 만들어질 수가 없습니다.
즉, innodb_large_prefix 의 설정값에 따라 최대 3072 byte 또는 767 byte가 넘어서는 컬럼이 있다면, 인덱스는 만들수가 없습니다.
그렇다면 어떤 에러가 발생되는지 확인 해 보겠습니다.
- 아래 내용은 innodb_large_prefix가 OFF 일 때 컬럼 길이에 따라서 인덱스를 만들수 있는지 테스트를 해 본 것 입니다.
MySQL> show variablies like 'innodb_large_prefix';
+----------------------+-------+
| Variable_name | Value |
+----------------------+-------+
| innodb_large__prefix | OFF |
+----------------------+-------+
MySQL> show variablies like 'char%';
+------------------------+---------+
| Variable_name | Value |
+------------------------+---------+
| character_set_client | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_server | utf8mb4 |
.
.
+------------------------+---------+
MySQL> create table prefix_test( a int, b varchar(193), unique key(b));
ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes
Query OK, 0 rows affected (0.01 sec)
MySQL> create table prefix_test( a int, b varchar(191), unique key(b));
Query OK, 0 rows affected (0.01 sec)
MySQL>
# 이 파라미터는 MySQL 5.7.7, MariaDB 10.2 에서 deprecated 되었습니다.
반응형
'MySQL > Class' 카테고리의 다른 글
M2(Mac)용 VMWare로 가상화 만들기 - (7) mysqldump upgrade (0) | 2024.04.01 |
---|---|
ERROR - (1) [MY-010914] Aborted connection (0) | 2024.03.27 |
기초공부 - (9) event (0) | 2024.03.18 |
기초공부 - (8) 테이블 복구 (0) | 2024.03.10 |
HA 구성 - (6) MHA : FailOver (0) | 2024.03.05 |