web-dev-qa-db-ja.com

mysqlの変更innodb_large_prefix

VMにdebian 8.3をセットアップし、この後にxamppをインストールしました チュートリアル 。新しいテーブルを作成するまで、すべてが機能しています:

_create table testtable
(
  id int(10) not null auto_increment,
  firstname varchar(255) collate utf8mb4_german2_ci not null,
  lastname varchar(255) collate utf8mb4_german2_ci not null,
  primary key (id),
  unique key (lastname)
)engine = innodb default charset=utf8mb4, collate=utf8mb4_german2_ci
_

私はエラーを受け取りました:_#1709 - Index column size too large. The maximum column size is 767 bytes._次に、これは_prefix limitation_がInnodbの767Byteに制限されていることがわかり、my.cnfファイルにinnodb_large_prefixを設定することでこれを修正できます。しかし、ファイルを見つけることができず、_/etc/_の下になく、_/etc/mysql/_フォルダーがないため、_my.cnf_は_/opt/lampp/etc/_にしかありませんが、追加した後_innodb_large_prefix=1_をファイルに追加し、lamppを再起動しました。同じエラーが発生します。何を間違えたのですか?

editSELECT version()は_5.6.14_を返すため、_innodb_large_prefix_をサポートする必要があります。

edit2:キーの一部のみをインデックスとして設定し、767Byte未満になるようにすることで、これを回避できます。しかし、mysqlを正しく構成する方法をここで知りたいです。

7
yangsunny

5.6.3と5.7.7の間(つまり、MySQL 5.6またはMariaDB 10.0を実行している場合)には、4つのステップがあります。

  • SET GLOBAL innodb_file_format = Barracuda;
  • SET GLOBAL innodb_file_per_table = ON;
  • ROW_FORMAT = DYNAMIC; -またはCOMPRESSED(CREATEの最後に移動)
  • innodb_large_prefix = 1

SELECT * FROM information_schema.INNODB_SYS_TABLESPACES;

file_formatとrow_formatを提供します。他のいくつかのI_Sテーブルは、file_per_tableの手がかりを提供します。

13
Rick James

Mysql 5.6.17とWAMPサーバーを使用していますmy.iniファイルを編集して問題を解決しましたカテゴリ[mysqld]を見つけて、次の手順を追加します

[mysqld]
innodb_file_format = Barracuda
innodb_large_prefix = 1
innodb_file_per_table = ON

変更を保存してすべてのサービスを再起動することを忘れないでください。

8

Xamppに移動して、次のクエリを追加します。

`mysql>` set global innodb_file_format = `BARRACUDA`;
`mysql>` set global innodb_large_prefix = `ON`;
3
Robert Hilson

永続的な解決策として、pliasはmariadb My.INIファイルに以下を追加します-

## Innodb settings to bypass error of max size 737
innodb-file-format=barracuda
innodb-file-per-table=ON
innodb-large-prefix=ON
## Above 3 didnot work so i added below
innodb_default_row_format = 'DYNAMIC'

10.1.38を使用していました

3
Techifylogic
mysql> set global innodb_file_format = `BARRACUDA`;
mysql> set global innodb_large_prefix = `ON`;
2
Arsath