8722 sujets

Développement web côté serveur, CMS

Bonjour à tous,

j'essaie de m'intéresser un peu à Laravel et j'ai déjà un problème:

Laravel possède un système de migration pour créer les tables dans la base de données.

lorsque je veux réaliser une migration (avec php artisan), il me sort cette erreur...

upload/1697371613-40948-laravel-bug.jpg

après une petite recherche sur internet on trouve une parade:

1- il faut une version mysql > 5.7.7 (j'avais une 5.7.36)
2- ou alors il faut rajouter la ligne Schema::defaultStringLength(191); dans la fonction boot du fichier AppServiceProvider.php

la solution 2 marche mais elle bride les champs string à 191 caractères et d'abord pourquoi cette valeur de 191?

J'ai quand même décidé d'upgrader ma version de Wampserver vers mysql version 8.0.34 et PHP 8.2.11 (8.1.0 avant) et l'erreur se produit toujours.

Est ce lié à mon projet?

Ce système de migration est il réellement utile? est-on obligé de l'utiliser et ne vaut il pas mieux créer ses tables à la main?
Salut,

je ne fais pas de laravel mais j'ai déjà eu un problème dans le genre, du coup de mes vagues souvenirs, je ne me souviens plus exactement si c'était lié à mysql (MAJ devrait résoudre le problème), au moteur mysql (mysam ou innodb) ou à l'encodage en bdd (charset/collation).

En très gros de ce que j'ai cru comprendre à l'époque, c'était qu'il y avait une valeur max (lié a mysql ou au moteur ?) et qu'en fonction de l'encodage, les caractères prennent plus ou moins de place et explose (ou non) cette valeur max. En imposant une taille plus courte de string tu n'explose plus cette valeur et ça roule.

En calcul d'exemple avec des valeurs au pif pour essayer de clarifier un peu l'explication : si la valeur max est de 3072 bits (i.e 3*1024), et qu'un caractère tiens sur 8 bits tu pouvais stocker 384 lettres.
En changeant d'encodage les caractères occupent désormais 16 bits , tu ne peux plus stocker que 192 lettres..


Je ne me souviens plus de la solution qu'on avait retenu au final par contre Smiley sweatdrop (peut être partir sur du postgres qui avait une limite plus haute à l'époque Smiley lol )