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)
我知道这与字符编码有关,但我不知道如何管理/纠正它?
新的默认值CHARACTER SET是utf8mb4. 它正在抱怨UNIQUE:
Attribute VARCHAR(255) NOT NULL UNIQUE\nRun 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. \nRun Code Online (Sandbox Code Playgroud)\n\n或者...保留 5.6/5.5/10.1,但执行 4 个步骤将限制提高到 3072 字节:
\n\nSET 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)\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
1614 次 |
| 最近记录: |