Maison >développement back-end >tutoriel php >Résolution de l'erreur SQLSTATE[ dans les migrations Laravel : problème de longueur de clé
Si vous travaillez avec Laravel et rencontrez la redoutable erreur SQLSTATE[42000] lors des migrations, vous n'êtes pas seul. Cette erreur survient généralement en raison d'un problème de longueur de clé lors de l'utilisation de MySQL comme base de données. Dans ce blog, nous approfondirons l'erreur et fournirons une solution claire, étape par étape.
Lors de l'exécution de migrations, vous pouvez voir une erreur comme celle-ci :
SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 1000 bytes
Par exemple, la commande de migration suivante échoue :
php artisan migrate
? Détails de l'erreur
Cela se produit lorsque Laravel tente de créer un index unique sur une colonne, telle que l'e-mail, dans la table des utilisateurs. La longueur de chaîne par défaut de 255 caractères dépasse la longueur de clé maximale autorisée par votre configuration MySQL, en particulier lorsque vous utilisez le jeu de caractères utf8mb4 (qui prend en charge les emojis).
Pour résoudre ce problème, vous pouvez spécifier le jeu de caractères et le classement de vos tables dans les fichiers de migration. Voici comment procéder :
Étape 1 : Ouvrez le fichier de migration
Localisez le fichier de migration à l'origine du problème, par exemple :
base de données/migrations/0000_00_00_000000_create_users_table.php
Étape 2 : Ajouter un jeu de caractères et un classement
Modifiez la méthode up() dans le fichier de migration pour inclure les propriétés charset et collation :
Schema::create('users', function (Blueprint $table) { $table->id(); $table->string('name'); $table->string('email')->unique(); $table->string('password'); $table->timestamps(); // Add charset and collation $table->charset = 'utf8'; $table->collation = 'utf8_unicode_ci'; });
⁉️ Pourquoi ça marche
En définissant le jeu de caractères sur utf8 et le classement sur utf8_unicode_ci, vous réduisez la longueur maximale d'octets par caractère, évitant ainsi le problème de longueur de clé. Cette solution échange la prise en charge de certains caractères multi-octets (comme les emojis) contre la compatibilité.
Si vous souhaitez vous assurer que ce problème ne se produit pas dans d'autres migrations, vous pouvez définir une longueur de chaîne par défaut dans AppServiceProvider :
Étape 1 : ouvrez AppServiceProvider
Accédez à app/Providers/AppServiceProvider.php.
Étape 2 : Mettre à jour la méthode de démarrage
Ajoutez le code suivant à la méthode de démarrage :
use Illuminate\Support\Facades\Schema; public function boot() { Schema::defaultStringLength(191); // Shorten the default string length }
Cette approche réduit la longueur de la chaîne pour toutes les migrations dans le monde.
L'erreur SQLSTATE[42000] lors des migrations peut être une pierre d'achoppement, mais avec ces correctifs, vous pouvez la résoudre rapidement et continuer à créer votre application Laravel. Que vous choisissiez d'ajuster des migrations spécifiques ou de définir une longueur de chaîne globale par défaut, vous disposerez désormais des outils nécessaires pour gérer ce problème efficacement.
Avez-vous rencontré des erreurs similaires lors du développement de Laravel ? Comment les avez-vous résolus ? Partagez vos expériences dans les commentaires ci-dessous !
Bon codage ! ?
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!