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.
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
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.
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.
mysql> set global innodb_file_format = `BARRACUDA`;
mysql> set global innodb_large_prefix = `ON`;
Allez sur votre xampp et ajoutez cette requête:
`mysql>` set global innodb_file_format = `BARRACUDA`;
`mysql>` set global innodb_large_prefix = `ON`;