1
私は古いMySQL/Spring/EclipselinkプロジェクトをMariaDBに移植し始めました。しかし、私はそれが正しい/管理する方法がわからない、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)
は、私は、これは文字エンコーディングに関係していることを理解する:私は次のように示すことができるテーブルの作成で問題が発生したのですか?
完全な255バイトのマルチバイト文字に対して一意制約が必要で、InnoDBストレージエンジンを使用している場合は、** 'innodb_large_prefix' **を有効にすることを検討してください。参照:https://mariadb.com/kb/en/library/xtradbinnodb-server-system-variables/#innodb_large_prefix – spencer7593
私はそれが問題を引き起こす固有の制約ではないと思います。もし私が2つのvarchar(255)(キーではない)、エラーが発生しますか? – skyman
問題は、UNICODE(最大4バイト)を処理するためには、実際に大きくなる必要のあるINDEXであり、限界を超えます。したがって、 'PRIMARY KEY'は' UNIQUE INDEX'を作成しようとし、スペース問題のために失敗します。 :-(何度も噛まれた –