MYSQL 5.5에서 utf8mb4 사용시 index size 문제

부득이하게 mysql 5.7에서 mysql 5.5로 이전해야할일이 생겼는데

 

mysqldump후 복원을 하려니깐 다음과 같은 오류가 발생하더라고요

 

ERROR 1709 (HY000): Index column size too large. The maximum column size is 767 bytes. 

 

찾아보니 utf8mb4 를 사용할때 varchar(255)를 사용하면 데이터 범위를 초과해서 그렇더라고요

 

CREATE TABLE `users` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `builds_platform_unique` (`platform`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

 

이런식의 테이블이었거든요

 

 

다행히 innodb 설정을 바꿔서 가능한것 같더라고요

 

 

 

my.cnf에서 아래와 같이 설정을 변경하여 재실행합니다

[mysqld]
innodb_file_format=barracuda
innodb_file_per_table=1
innodb_large_prefix=1

그렇다면 아래와 같이 설정된값을 확인하실수 있어요


mysql> show variables like 'innodb_lar%';


+---------------------+-------+
| Variable_name       | Value |
+---------------------+-------+
| innodb_large_prefix | ON    |
+---------------------+-------+

 

mysql> show variables like 'innodb_file%';


+--------------------------+-----------+
| Variable_name            | Value     |
+--------------------------+-----------+
| innodb_file_format       | Barracuda |
| innodb_file_format_check | ON        |
| innodb_file_format_max   | Barracuda |
| innodb_file_per_table    | ON        |
+--------------------------+-----------+

 

그리고 한가지를 더 해주셔야 되는데요

 

테이블 생성 구문에 ROW_FORMAT=DYNAMIC 또는 ROW_FORMAT=COMPRESSED 추가해주셔야해요

 

CREATE TABLE `users` ( 
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, 
  `name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, 
  `created_at` timestamp NULL DEFAULT NULL, 
  `updated_at` timestamp NULL DEFAULT NULL, 
  PRIMARY KEY (`id`), 
  UNIQUE KEY `builds_platform_unique` (`platform`) 
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; 

 

이렇게 해서 다행히 이전을 완료하였습니다

Tag : ,

| 1 | ··· | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | ··· | 1806 |