programing

MariaDB 문자 인코딩

newsource 2023. 1. 20. 16:13

MariaDB 문자 인코딩

저는 오래된 MySQL/Spring/Eclipselink 프로젝트를 MariaDB에 이식하기 시작했습니다.다음과 같이 나타낼 수 있는 테이블 작성에 문제가 발생했습니다.

MariaDB [spasm]> CREATE TABLE Configuration (ID BIGINT NOT NULL, Attribute VARCHAR(190) NOT NULL UNIQUE, Value VARCHAR(255) NOT NULL, PRIMARY KEY (ID));
Query OK, 0 rows affected (0.07 sec)

MariaDB [spasm]> drop table Configuration;
Query OK, 0 rows affected (0.06 sec)

MariaDB [spasm]> CREATE TABLE Configuration (ID BIGINT NOT NULL, Attribute VARCHAR(255) NOT NULL UNIQUE, Value VARCHAR(255) NOT NULL, PRIMARY KEY (ID));
ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes
MariaDB [spasm]> 

MariaDB [spasm]> show variables like '%char%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8mb4                    |
| character_set_connection | utf8mb4                    |
| character_set_database   | utf8mb4                    |
| character_set_filesystem | binary                     |
| character_set_results    | utf8mb4                    |
| character_set_server     | utf8mb4                    |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

문자 인코딩과 관련된 것은 알고 있습니다만, 어떻게 관리/수정해야 할지 모르겠습니다.

새로운 디폴트CHARACTER SETutf8mb4에 대해 불평하고 있습니다.UNIQUE인덱스:

Attribute VARCHAR(255) NOT NULL UNIQUE

CARTER SET utf8mb4를 사용하려고 하기 때문에 한계에 도달한 경우.다음으로 다음 중 하나(각각 단점이 있음)를 실행하여 오류를 방지합니다.

⚈  Upgrade to 5.7.7 (MariaDB 10.2.2?) for 3072 byte limit -- your cloud may not provide this; 
⚈  Change 255 to 191 on the VARCHAR -- you lose any values longer than 191 characters (unlikely?); 
⚈  ALTER .. CONVERT TO utf8 -- you lose Emoji and some of Chinese; 
⚈  Use a "prefix" index -- you lose some of the performance benefits. 

또는... 5.6/5.5/10.1을 유지하되 4단계를 수행하여 제한을 3072바이트로 높입니다.

SET GLOBAL innodb_file_format=Barracuda;
SET GLOBAL innodb_file_per_table=1;
SET GLOBAL innodb_large_prefix=1;
logout & login (to get the global values);
ALTER TABLE tbl ROW_FORMAT=DYNAMIC;  -- (or COMPRESSED)

언급URL : https://stackoverflow.com/questions/46614894/mariadb-character-encoding