web-dev-qa-db-fra.com

changement mysql innodb_large_prefix

Je viens d'installer Debian 8.3 sur un VM et d'installer xampp après ce Tutorial . Tout fonctionne, jusqu'à ce que j'essaye de créer une nouvelle table:

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

J'ai eu l'erreur: #1709 - Index column size too large. The maximum column size is 767 bytes. Ensuite, j'ai découvert que cela venait du prefix limitation qui est limité à 767Byte dans Innodb et que je peux corriger cela en définissant innodb_large_prefix dans le fichier my.cnf. Mais je ne trouve pas le fichier, il ne se trouve pas sous /etc/ et il n’ya pas de dossier /etc/mysql/-, le seul my.cnf que j’ai trouvé se trouve dans /opt/lampp/etc/. Cependant, après avoir ajouté le innodb_large_prefix=1 au fichier et relancé lampp. J'ai toujours la même erreur. Qu'ai-je fait de mal? 

edit: SELECT version() renvoie 5.6.14, donc innodb_large_prefix devrait être pris en charge.

edit2: Je sais que je peux contourner ce problème en ne définissant qu'une partie de la clé comme index pour obtenir une valeur inférieure à 767 octets. Mais je veux savoir ici comment configurer correctement le mysql. 

4
yangsunny

Entre 5.6.3 et 5.7.7 (c'est-à-dire si vous utilisez MySQL 5.6 ou MariaDB 10.0), vous devez suivre 4 étapes

  • SET GLOBAL innodb_file_format = Barracuda;
  • SET GLOBAL innodb_file_per_table = ON;
  • ROW_FORMAT = DYNAMIC; - ou COMPRESSED (continue à la fin de CREATE)
  • innodb_large_prefix = 1

Remarque

SELECT * FROM information_schema.INNODB_SYS_TABLESPACES;

fournira le file_format et row_format. Certaines autres tables I_S fournissent des indices sur file_per_table.

9
Rick James

J'utilise Mysql 5.6.17 avec WAMP Server J'ai résolu le problème en modifiant le fichier my.ini Recherchez la catégorie [mysqld].

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

N'oubliez pas de sauvegarder les modifications et de redémarrer tous les services.

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

Allez sur votre xampp et ajoutez cette requête:

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