MariaDB 字符编码

sky*_*man 2 mysql spring eclipselink 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)
Run Code Online (Sandbox Code Playgroud)

我知道这与字符编码有关,但我不知道如何管理/纠正它?

Ric*_*mes 5

新的默认值CHARACTER SETutf8mb4. 它正在抱怨UNIQUE

\n\n
Attribute VARCHAR(255) NOT NULL UNIQUE\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果您由于尝试使用字符集 utf8mb4 而达到限制。然后执行以下操作之一(每个操作都有缺点)以避免错误:

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

或者...保留 5.6/5.5/10.1,但执行 4 个步骤将限制提高到 3072 字节:

\n\n
SET GLOBAL innodb_file_format=Barracuda;\nSET GLOBAL innodb_file_per_table=1;\nSET GLOBAL innodb_large_prefix=1;\nlogout & login (to get the global values);\nALTER TABLE tbl ROW_FORMAT=DYNAMIC;  -- (or COMPRESSED)\n
Run Code Online (Sandbox Code Playgroud)\n