লারাভেল মাইগ্রেশন ত্রুটি: সিনট্যাক্স ত্রুটি বা অ্যাক্সেস লঙ্ঘন: 1071 নির্দিষ্ট কীটি খুব দীর্ঘ ছিল; সর্বাধিক কী দৈর্ঘ্য 767 বাইট


177

লারাভেল 5.4 এর সাথে মাইগ্রেশন ত্রুটি php artisan make:auth

[আলোকসজ্জা \ ডাটাবেস \ ক্যোরিএক্সেপশন] এসকিউএলসেট [42000]: সিনট্যাক্স ত্রুটি বা অ্যাক্সেস লঙ্ঘন: 1071 নির্দিষ্ট কীটি খুব দীর্ঘ ছিল; সর্বাধিক কী দৈর্ঘ্য 767 বাইট (এসকিউএল: টেবিল পরিবর্তন usersকরুন এবং অনন্য users_email_unique( email) যুক্ত করুন

[PDOException] এসকিউএলসেট [42000]: সিনট্যাক্স ত্রুটি বা অ্যাক্সেস লঙ্ঘন: 1071 নির্দিষ্ট কীটি খুব দীর্ঘ ছিল; সর্বাধিক কী দৈর্ঘ্য 767 বাইট


3
আপনার প্রশ্নের উত্তর একটি উত্তরে দেওয়া উচিত। প্রশ্নে নেই। stackoverflow.com/help/self-answer
ভোরাল করতে পারেন

@ ক্যান-ভ্যুরাল পরামর্শের জন্য ধন্যবাদ, আমি করেছি।
absiddiqueLive

উত্তর:


283

অফিসিয়াল ডকুমেন্টেশন অনুসারে , আপনি এটি বেশ সহজেই সমাধান করতে পারেন।

নিম্নলিখিত দুটি লাইন কোড অ্যাপ্লিকেশনসপ্রোভাইডার.এফপি (/ অ্যাপ্লিকেশন / প্রবর্তক / অ্যাপ্লিকেশন / সার্ভিসপ্রোভাইডার.এফপি) এ যুক্ত করুন

use Illuminate\Database\Schema\Builder; // Import Builder where defaultStringLength method is defined

function boot()
{
    Builder::defaultStringLength(191); // Update defaultStringLength
}

মাইএসকিউএল সর্বদা একটি ইউটিএফ 8 ক্ষেত্রের জন্য সর্বোচ্চ পরিমাণ সংরক্ষণ করে যা 4 বাইট যার সাথে আপনার ডিফল্ট অক্ষর সেট utf8mb4 ক্লিক করুন utf8mb4_unicode_ci; আপনি 767 সর্বোচ্চ কী দৈর্ঘ্যের সীমা ছাড়িয়ে গেছেন। @ স্কাইজড দ্বারা


3
এই সমাধান সম্পর্কে সতর্কতা অবলম্বন করুন। যদি আপনি উদাহরণস্বরূপ ইমেল ক্ষেত্রগুলি সূচক করেন তবে সঞ্চিত ইমেলগুলিতে কেবল সর্বোচ্চ 191 অক্ষর থাকতে পারে। এটি সরকারী আরএফসি রাজ্যের তুলনায় কম।
শক_গোন_ওয়াল্ড


এটি কাজ করছে এবং এটি একটি বৈধ সমাধান, তবে আমি কেবল উল্লেখ করতে চেয়েছিলাম যে এই পদ্ধতির সাহায্যে সম্ভাব্য সমস্যা রয়েছে।
শক_গোন_ওয়াল্ড

আমি আশা করি এই সমাধানটি ভবিষ্যতে আমাকে পাছায় কামড়ানোর জন্য আসে না, তবে আপাতত, এটি কাজ করে। আমি কীভাবে ইমেলগুলি সূচী করি সে সম্পর্কে আমাকে যত্নবান হতে হবে।
deusofnull

4
কেন ঠিক 191 টি অক্ষর @absiddiqueLive
সিউডোএজ

121

কেন জানি উপরের সমাধান এবং সরকারী সমাধান যা যুক্ত করছে

Schema::defaultStringLength(191);

মধ্যে AppServiceProviderআমার জন্য কাজ করে নি। ফোল্ডারে database.phpফাইল সম্পাদনা করার জন্য যা কাজ করেছিল config। শুধু সম্পাদনা করুন

'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',

প্রতি

'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',

এবং এটি কাজ করা উচিত, যদিও আপনি ইমোজি এর মতো বর্ধিত মাল্টিবাইট অক্ষর সংরক্ষণ করতে পারবেন না

আমি এটি লারাভেল 5.7 দিয়ে করেছি। আশা করি এটা সাহায্য করবে.


5
এই অক্ষর সেটটি ব্যবহার করা আপনাকে কেবল স্ট্যান্ডার্ড ASCII সংরক্ষণ করার অনুমতি দেয় এবং আরবি, হিব্রু, বেশিরভাগ ইউরোপীয় স্ক্রিপ্ট এবং অবশ্যই ইমোজিগুলির মতো বিশেষ অক্ষরগুলিকে মাল্টিবাইট নয়। এছাড়াও দেখুন স্ট্যাকওভারফ্লো.com
জেফ

7
আমি মনে করি আপনি use Illuminate\Support\Facades\Schema;শীর্ষে এই অংশটি মিস করেছেন ।
পিম্পেস

@ কোশিকদাস আপনি লারাভেলের কোন সংস্করণ ব্যবহার করছেন?
পিম্পেস

এখন আমি 6.0 এ আছি। আমি মনে করি আমি সম্ভবত এটি 5.7 বা 5.6 দিয়ে শুরু করেছিলাম।
কাউশিক দাস

2
utf8mb4কোলেশন একটি কারণ জন্য আছে, আমি যদি আপনি করতে পারেন এটি ব্যবহার সুপারিশ।
শিখর

85

এটি আমার পক্ষে quickestসমাধান হওয়ায় আমি এই উত্তরটি এখানে যুক্ত করছি । কেবলমাত্র ডিফল্ট ডাটাবেস ইঞ্জিনটি 'InnoDB'চালু করুন

/config/database.php

'mysql' => [
    ...,
    ...,
    'engine' => 'InnoDB',
 ]

তারপরে php artisan config:cacheকনফিগারেশন ক্যাশে সাফ ও রিফ্রেশ করতে চালান


1
এটি এই প্রশ্নের সরকারী উত্তর / সমাধান হওয়া উচিত ... ধন্যবাদ
সিয়ামসুল আজ্রিয়েন

1
প্রকৃত সমাধান অন্যান্যের সমাধান নীচে উপস্থিত হয়
লুইস কুনহা

3
তবে এর পেছনে কি যুক্তি রয়েছে
জুলফিকার তারিক

1
এটাই সঠিক সমাধান। তবে কেন এটি ডিফল্ট ইনস্টলেশনতে অন্তর্ভুক্ত করা হয়নি।
অঙ্কিত চৌহান

38

এর মধ্যে AppServiceProvider.php, আপনি এই কোডটি ফাইলের শীর্ষে অন্তর্ভুক্ত করেন।

use Illuminate\Support\Facades\Schema;

public function boot()
{
Schema::defaultStringLength(191);
}

ধন্যবাদ আমাকে সাহায্য করেছে
দ্য ডেড ম্যান

24

লারাভেল 5.4 এ ডাটাবেস সংস্করণ দ্বারা এই সমস্যাটি সৃষ্টি হয়েছে।

দস্তাবেজ অনুসারে (মধ্যেIndex Lengths & MySQL / MariaDB বিভাগে):

লারাভেল utf8mb4ডিফল্টরূপে নির্ধারিত অক্ষরটি ব্যবহার করে , যা ডাটাবেসে "ইমোজিস" সংরক্ষণের জন্য সমর্থন অন্তর্ভুক্ত করে। আপনি যদি মাইএসকিউএলের একটি সংস্করণ 5.7.7 রিলিজের চেয়ে পুরানো বা 10.2.2 রিলিজের চেয়ে পুরানো মারিয়াডিবি থেকে চালাচ্ছেন তবে মাইএসকিউএলের জন্য সূচী তৈরি করতে আপনাকে মাইগ্রেশন দ্বারা উত্পন্ন ডিফল্ট স্ট্রিং দৈর্ঘ্যটি ম্যানুয়ালি কনফিগার করতে হবে। আপনি নিজের মধ্যে Schema::defaultStringLengthপদ্ধতিটি কল করে এটি কনফিগার করতে পারেন AppServiceProvider

অন্য কথায়, এ <ROOT>/app/Providers/AppServiceProvider.php:

// Import Schema
use Illuminate\Support\Facades\Schema;
// ...

class AppServiceProvider extends ServiceProvider
{

public function boot()
{
    // Add the following line
    Schema::defaultStringLength(191);
}

// ...

}

তবে অন্য উত্তরের মন্তব্য যেমন বলে:

এই সমাধান সম্পর্কে সতর্কতা অবলম্বন করুন। যদি আপনি উদাহরণস্বরূপ ইমেল ক্ষেত্রগুলি সূচক করেন তবে সঞ্চিত ইমেলগুলিতে কেবল সর্বোচ্চ 191 অক্ষর থাকতে পারে। এটি সরকারী আরএফসি রাজ্যের তুলনায় কম।

সুতরাং ডকুমেন্টেশন আরও একটি সমাধান প্রস্তাব করে:

বিকল্পভাবে, আপনি innodb_large_prefixআপনার ডাটাবেসের জন্য বিকল্পটি সক্ষম করতে পারেন । এই বিকল্পটি কীভাবে সঠিকভাবে সক্ষম করতে হবে তার নির্দেশাবলীর জন্য আপনার ডাটাবেসের ডকুমেন্টেশন দেখুন to


16

যে কেউ পরিবর্তন করতে চান না তার জন্য AppServiceProvider.php। (আমার মতে, এটি পরিবর্তন করা খারাপ ধারণাAppServiceProvider.php কেবলমাত্র অভিবাসনের জন্য )

আপনি database/migrations/নীচের হিসাবে মাইগ্রেশন ফাইলে ডেটা দৈর্ঘ্য আবার যোগ করতে পারেন :

create_users_table.php

$table->string('name',64);
$table->string('email',128)->unique();

create_password_resets_table.php

$table->string('email',128)->index();

ইমেলগুলি 255 (ইশ) অক্ষর পর্যন্ত হতে পারে এটি একটি সমস্যা হতে পারে
হাফ ক্রেজেড

আপনি ঠিক @HalfCrazed, কিন্তু আমি এই উত্তর সুপারিশ stackoverflow.com/questions/1297272
helloroy

আমার সমস্যাটি ঠিক এই সমাধান দ্বারা সমাধানযোগ্য ছিল। আমার ক্ষেত্রগুলি ইমেল ছিল না।
থারাকা দেবিন্দা

11

কমান্ডটি ব্যবহার করার সময় ল্যারাভেলটিতে কাজ করার সময় আপনি যদি এই ত্রুটির মুখোমুখি হন: php artisan migrate তবে আপনি কেবল ফাইলটিতে 2 টি লাইন যুক্ত করুন: অ্যাপ্লিকেশন-> সরবরাহকারী-> অ্যাপসোর্সোপ্রাইভাইডার.এফপি

  1. use Schema;
  2. Schema::defaultStringLength(191);

দয়া করে এই চিত্রটি পরীক্ষা করুন । তারপর php artisan migrateআবার কমান্ড চালান ।


1
এটি 'স্কিমা ব্যবহার;' যুক্ত করা খুব গুরুত্বপূর্ণ। সুতরাং এটি সেরা উত্তর
hxwtch

আপনি এটি দ্বিতীয় লাইনের আগে একটি পশ্চাৎপদ স্ল্যাশ '\' যোগ করে এক লাইনেও এটি করতে পারেন\Schema::defaultStringLength(191);
তাহির আফ্রিদি

10

আমি আমার জন্য কাজ করে এমন দুটি সলিউশন যুক্ত করছি ।

1 ম একাকীকরণটি হ'ল :

  1. ওপেন database.php ফাইল insde কনফিগ Dir / ফোল্ডার।
  2. সম্পাদনা 'engine' => null,করার জন্য'engine' => 'InnoDB',

    এটি আমার পক্ষে কাজ করেছে।

দ্বিতীয় সমাধান

  1. ওপেন database.php ফাইল insde কনফিগ Dir / ফোল্ডার।
    2. সম্পাদনা
    'charset' => 'utf8mb4', 'collation' => 'utf8mb4_unicode_ci',
    করার

    'charset' => 'utf8', 'collation' => 'utf8_unicode_ci',


গুডলাক


10

অ্যাপ্লিকেশন / সরবরাহকারী / অ্যাপসোর্সোপারওয়াইডার.এফপি এই লাইনগুলি আপডেট করুন এবং sertোকান

use Illuminate\Support\Facades\Schema;  // add this line at top of file

public function boot()
{
    Schema::defaultStringLength(191); // add this line in boot method
}

8

আমি এই সমস্যাটি সমাধান করেছি এবং আমার ডাটাবেস ('চরসেট' => 'utf8') এবং ('কোলেশন' => 'utf8_general_ci') পছন্দ করতে আমার কনফিগার-> ডাটাবেস.এফপি ফাইলটি সম্পাদনা করেছি , সুতরাং আমার সমস্যাটি কোড হিসাবে সমাধান করা হয়েছে অনুসরণ করুন:

'mysql' => [
        'driver' => 'mysql',
        'host' => env('DB_HOST', '127.0.0.1'),
        'port' => env('DB_PORT', '3306'),
        'database' => env('DB_DATABASE', 'forge'),
        'username' => env('DB_USERNAME', 'forge'),
        'password' => env('DB_PASSWORD', ''),
        'unix_socket' => env('DB_SOCKET', ''),
        'charset' => 'utf8',
        'collation' => 'utf8_general_ci',
        'prefix' => '',
        'strict' => true,
        'engine' => null,
    ],

8

আমি এই ত্রুটির জন্য দুটি সমাধান খুঁজে পেয়েছি

বিকল্প 1:

আপনার ব্যবহারকারী খুলুনডাটাবেস / মাইগ্রেশনগুলিতে এবং পাসওয়ার্ড_সেটেট টেবিলটি ফোল্ডারে

এবং কেবল ইমেলের দৈর্ঘ্য পরিবর্তন করুন:

$table->string('email',191)->unique();

বিকল্প 2:

আপনার app/Providers/AppServiceProvider.phpফাইলটি খুলুন এবং boot()পদ্ধতির অভ্যন্তরে ডিফল্ট স্ট্রিংয়ের দৈর্ঘ্য সেট করুন:

use Illuminate\Support\Facades\Schema;

public function boot()
{
    Schema::defaultStringLength(191);
}

7

1- যান /config/database.phpএবং এই লাইনগুলি সন্ধান করুন

'mysql' => [
    ...,
    'charset' => 'utf8mb4',
    'collation' => 'utf8mb4_unicode_ci',
    ...,
    'engine' => null,
 ]

এবং এগুলিতে পরিবর্তন করুন:

'mysql' => [
    ...,
    'charset' => 'utf8',
    'collation' => 'utf8_unicode_ci',
    ...,
    'engine' => 'InnoDB',
 ]

2-php artisan config:cache লারাভেলটি পুনরায় কনফিগার করতে চালান

3- আপনার ডাটাবেসে বিদ্যমান সারণীগুলি মুছুন এবং তারপরে php artisan migrateআবার চালান


1
লারাভেল ৫.৮ এর জন্য এটি সেরা উত্তর। তবে ইতিমধ্যে তৈরি টেবিলগুলি মুছুন
ম্যাগিজ ড্যানিয়েল

তবে ডকুমেন্টেশন অনুসারে "utf8" অবহেলিত utf8 মোডটি ব্যবহার করবে যদিও?
NoBugs


5

দৈর্ঘ্যের কোনও সীমা নির্ধারণের পরিবর্তে আমি নিম্নলিখিতগুলি প্রস্তাব করব, যা আমার পক্ষে কাজ করেছে।

ইনসাইড:

কনফিগ / database.php

mysql এর জন্য এই লাইনটি প্রতিস্থাপন করুন:

'engine' => 'InnoDB ROW_FORMAT=DYNAMIC',

সঙ্গে:

'engine' => null,

4

এটি ঠিক করার জন্য মাইগ্রেশন গাইডে বর্ণিত হিসাবে , আপনাকে যা করতে হবে তা হ'ল আপনার app/Providers/AppServiceProvider.phpফাইলটি সম্পাদনা করতে হবে এবং বুট পদ্ধতির অভ্যন্তরে একটি ডিফল্ট স্ট্রিং দৈর্ঘ্য সেট করতে হবে:

use Illuminate\Support\Facades\Schema;

public function boot()
{
    Schema::defaultStringLength(191);
}

দ্রষ্টব্য: প্রথমে আপনাকে ব্যবহারকারীর টেবিল, পাসওয়ার্ড_সেটস টেবিলটি ডাটাবেস থেকে মুছতে হবে এবং মাইগ্রেশন সারণী থেকে ব্যবহারকারী এবং পাসওয়ার্ড_সেটস এন্ট্রি মুছতে হবে ।

আপনার সমস্ত অসামান্য স্থানান্তর চালানোর জন্য, migrateআর্টিসান কমান্ডটি কার্যকর করুন :

php artisan migrate

এর পরে সবকিছু স্বাভাবিক হিসাবে কাজ করা উচিত।


4

ইতিমধ্যে উল্লিখিত হিসাবে আমরা অ্যাপ্লিকেশন / সরবরাহকারীগুলিতে AppServiceProvider.php এ যুক্ত করি

use Illuminate\Support\Facades\Schema;  // add this

/**
 * Bootstrap any application services.
 *
 * @return void
 */
public function boot()
{
    Schema::defaultStringLength(191); // also this line
}

আপনি নীচের লিঙ্কে আরও বিশদ দেখতে পাবেন ("সূচকের দৈর্ঘ্য এবং মাইএসকিউএল / মারিয়াডিবি" অনুসন্ধান করুন) https://laravel.com/docs/5.5/migration

তবে যা আমি প্রকাশিত তা নয়! উপরের কাজটি করার পরেও আপনি সম্ভবত আরও একটি ত্রুটি পেতে পারেন (এটি হ'ল যখন আপনি php artisan migrateকমান্ডটি চালাবেন এবং দৈর্ঘ্যের সমস্যার কারণে অপারেশনটি সম্ভবত মাঝখানে আটকে থাকবে solution সমাধানটি নীচে রয়েছে , এবং ব্যবহারকারী সারণীটি সম্ভবত তৈরি হয়েছে বিশ্রাম ছাড়াই বা পুরোপুরি সঠিকভাবে নয়) আমাদের ফিরে যেতে হবে । ডিফল্ট রোল ব্যাক কাজ করবে না। কারণ মাইগ্রেশন অপারেশন সমাপ্তি পছন্দ করে না। আপনাকে ডাটাবেসে নতুন তৈরি টেবিলগুলি ম্যানুয়ালি মুছে ফেলতে হবে।

আমরা নীচের মতো টিঙ্কার ব্যবহার করে এটি করতে পারি:

L:\todos> php artisan tinker

Psy Shell v0.8.15 (PHP 7.1.10  cli) by Justin Hileman

>>> Schema::drop('users')

=> null

আমি নিজেই ব্যবহারকারীদের সারণিতে সমস্যা ছিল।

তার পরে আপনি যেতে ভাল

php artisan migrate:rollback

php artisan migrate


4

সমাধান কোন এক বলে যে হয় মাইএসকিউএল v5.5 এবং পরে InnoDB যা এই সমস্যা নেই কিন্তু অনেক ক্ষেত্রে আমার মত কিছু পুরাতন মাইএসকিউএল স্টার কনফিগারেশন ফাইল যা পুরাতন ব্যবহার করছে না ডিফল্ট স্টোরেজ ইঞ্জিন MYISAM নিচের মত স্টোরেজ ইঞ্জিন।

default-storage-engine=MYISAM

যা এই সমস্ত সমস্যা তৈরি করছে এবং সমাধানটি হ'ল মাইএসকিএল-র আইএনই কনফিগারেশন ফাইলটিতে একবার এবং সকলের জন্য অস্থায়ী হ্যাক না করে ডিফল্ট-স্টোরেজ-ইঞ্জিনকে ইনোডিবি -তে পরিবর্তন করা ।

default-storage-engine=InnoDB

আর তুমি হও মাইএসকিউএল v5.5 বা পরে তারপর InnoDB ডিফল্ট ইঞ্জিন তাই আপনি এটি স্পষ্টভাবে উপরে মত সেট করতে, শুধু অপসারণ দরকার নেই default-storage-engine=MYISAMএটি আপনার থেকে অস্তিত্ব iniফাইল এবং আপনি যেতে ভাল।


ধন্যবাদ! লারাভেল and এবং মাইএসকিএল ৫..6 এর সাথে কাজ করার জন্য আমাকে স্ট্রিং দৈর্ঘ্য, চরসেট এবং কোলেশন পরিবর্তনের সাথে একযোগে এই পরামর্শটি ব্যবহার করতে হয়েছিল। আশা করি এটি ভবিষ্যতে অন্যদের সহায়তা করবে।
ক্যাস্পার উইলকস

@ ক্যাস্পার উইলকস আপনাকে সেই স্ট্রিং দৈর্ঘ্য, চরসেট স্টাফগুলির কোনও কাজ করতে হবে না। আপনার মাইএসকিএল সিস্টেম ভেরিয়েবলটি পরীক্ষা করুন show global variables like 'innodb_large_prefix';এটি চালু হওয়া উচিত । যদি এটি বন্ধ থাকে তবে আপনি কীভাবে এটি চালু করবেন এই উত্তরটি পরীক্ষা করতে পারেন । এবং এখানে dev.mysql.com এ ইনেডোব_লাজ_প্রিফিক্স সম্পর্কে আরও তথ্য রয়েছে।
আলী এ। ঝিলন

3

আপনি যদি অ্যাপসোসভারপ্রোভাইডার পরিবর্তন করতে চান তবে আপনাকে মাইগ্রেশনে ইমেল ক্ষেত্রের দৈর্ঘ্য নির্ধারণ করতে হবে। কেবল কোডের প্রথম লাইনটিকে দ্বিতীয় লাইনে প্রতিস্থাপন করুন।

create_users_table

$table->string('email')->unique();
$table->string('email', 50)->unique();

create_password_resets_table

$table->string('email')->index();
$table->string('email', 50)->index();

সাফল্যের সাথে পরিবর্তনের পরে আপনি মাইগ্রেশন চালাতে পারেন।
দ্রষ্টব্য: প্রথমে আপনাকে ব্যবহারকারীর টেবিল , পাসওয়ার্ড_সেটস টেবিলটি ডাটাবেস থেকে মুছতে হবে এবং মাইগ্রেশন টেবিল থেকে ব্যবহারকারী এবং পাসওয়ার্ড_সেটস এন্ট্রি মুছতে হবে।


3

Schema::defaultStringLength(191);ডিফল্টরূপে সমস্ত স্ট্রিংয়ের দৈর্ঘ্য 191 সংজ্ঞায়িত করবে যা আপনার ডাটাবেসটিকে নষ্ট করতে পারে। আপনি অবশ্যই এই পথে যাবেন না।

ডাটাবেস স্থানান্তর শ্রেণীর যে কোনও নির্দিষ্ট কলামের দৈর্ঘ্য কেবল সংজ্ঞায়িত করুন। উদাহরণস্বরূপ, আমি CreateUsersTableক্লাসে "নাম", "ব্যবহারকারীর নাম" এবং "ইমেল" নীচের মত সংজ্ঞায়িত করছি :

public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name', 191);
            $table->string('username', 30)->unique();
            $table->string('email', 191)->unique();
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();
        });
    }

1
এটি আমার পক্ষে সবচেয়ে বেশি পছন্দনীয় কারণ আমি কোনও লারাভেল কোর কোডগুলি টুইট করতে চাই না।
Okiemute ওমুটা

2

এটি সাধারণ কারণ লারাভেল 5.4 ডিফল্ট ডাটাবেস চর্যাটারটিকে utf8mb4 তে সেট করেছে। আপনার যা করতে হবে তা হ'ল: ক্লাস ঘোষণার আগে এই কোডটি রেখে আপনার অ্যাপ্লিকেশন \ সরবরাহকারী idersএফপি সম্পাদনা করুন

use Illuminate\Support\Facades\Schema;

এছাড়াও, এটি 'বুট' ফাংশনে যুক্ত করুন Schema::defaultStringLength(191);


2

আপনার কাছে ইতিমধ্যে আপনার ডেটাবেসগুলিতে নির্ধারিত কোনও ডেটা নীচে করুন:

  1. অ্যাপ্লিকেশন / সরবরাহকারী / অ্যাপসোসভারপ্রোভাইড.এফপি এ যান এবং যুক্ত করুন

আলোকসজ্জা \ সহায়তা \ পরিষেবাপ্রভাইডার ব্যবহার করুন;

এবং পদ্ধতির ভিতরে বুট ();

স্কিমা :: defaultStringLength (191);

  1. এখন আপনার ডাটাবেসে রেকর্ডগুলি মুছুন, প্রাক্তনের জন্য ব্যবহারকারীর টেবিল।

  2. নিম্নলিখিত চালান

পিএইচপি কারিগর কনফিগারেশন: ক্যাশে

পিএইচপি কারিগর মাইগ্রেশন


এটি কাজ করেছে তবে যুক্ত করার দরকার use Illuminate\Support\Facades\Schema; use Illuminate\Support\ServiceProvider;ইতিমধ্যে আছে। আশা করি আপনি এটি সংশোধন করেছেন
জিমিশ গামিত

2

এইগুলি ঠিক করার জন্য মাইগ্রেশন গাইডে বর্ণিত হিসাবে আপনাকে যা করতে হবে তা হ'ল আপনার অ্যাপসোসেসপ্রোভিডার.এফপি ফাইলটি সম্পাদনা করা এবং বুট পদ্ধতির অভ্যন্তরে একটি ডিফল্ট স্ট্রিং দৈর্ঘ্য সেট করা:

//edit your AppServiceProvider.php file contains in providers folder
use Illuminate\Support\Facades\Schema;

public function boot()
{
    Schema::defaultStringLength(191);
}

আশা করি এটি আপনাকে সহায়তা করবে।


2

আমি শুধু নিম্নলিখিত পংক্তিটি সংশোধন করেছেন usersএবংpassword_resets মাইগ্রেশন ফাইলটিতে ।

পুরাতন: $table->string('email')->unique();

নতুন: $table->string('email', 128)->unique();


1

আপনার কোডে কোনও পরিবর্তন এড়ানোর জন্য , কেবল আপনার মাইএসকিউএল সার্ভারকে কমপক্ষে 5.7.7 এ আপডেট করুন

আরও তথ্যের জন্য এটি উল্লেখ করুন: https://laravel-news.com/laravel-5-4-key-too-long-error


না, 18.04-তে 10.1.41 মারিয়্যাডবিতেও এই ত্রুটি রয়েছে।
NoBugs

1

আমি মনে করি স্ট্রিংলিংটকে 191 এ বাধ্য করা সত্যিই খারাপ ধারণা। তাই আমি কী চলছে তা বুঝতে তদন্ত করে দেখি।

আমি লক্ষ্য করেছি যে এই বার্তার ত্রুটি:

এসকিউএলসেট [42000]: সিনট্যাক্স ত্রুটি বা অ্যাক্সেস লঙ্ঘন: 1071 নির্দিষ্ট কীটি খুব দীর্ঘ ছিল; সর্বাধিক কী দৈর্ঘ্য 767 বাইট

আমি আমার মাইএসকিউএল সংস্করণ আপডেট করার পরে দেখাতে শুরু করেছি। সুতরাং আমি পিএইচপিএমআইএডমিনের সাথে টেবিলগুলি পরীক্ষা করেছি এবং আমি লক্ষ্য করেছি যে তৈরি করা সমস্ত নতুন টেবিলগুলি পুরানোগুলির জন্য utf8_unicode_ci এর পরিবর্তে utf8mb4_unicode_ci কোলেশন সহ ছিল ।

আমার মতবাদ কনফিগারেশন ফাইলে, আমি লক্ষ্য করেছি যে চরসেটটি utf8mb4 তে সেট করা হয়েছিল, তবে আমার সমস্ত পূর্ববর্তী টেবিলগুলি utf8 এ তৈরি হয়েছিল, তাই আমার ধারণা এটি এটি আপডেটের যাদু যা এটি utf8mb4 এ কাজ শুরু করে work

এখন সহজ ফিক্সটি হল আপনার ওআরএম কনফিগারেশন ফাইলে লাইন চরসেটটি পরিবর্তন করা। তারপরে আপনি যদি ডিভ মোডে থাকেন তবে utf8mb4_unicode_ci ব্যবহার করে টেবিলগুলি ড্রপ করতে বা অক্ষরগুলি না ফেলে দিতে পারলে চরসেটটি ঠিক করুন।

সিমফোনির জন্য 4

চরসেট পরিবর্তন করুন : utf8mb4 থেকে চারসেট : utf8 ইন কনফিগারেশন / প্যাকেজ / doctrine.yaml

এখন আমার মতবাদ মাইগ্রেশন আবার ঠিক ঠিক কাজ করছে।


1

প্রস্তাবিত সমাধানটি সক্ষম করা innodb_large_prefix মাইএসকিউএলের বিকল্প যাতে আপনি পরবর্তী সমস্যাগুলির মধ্যে না পড়েন into এবং কীভাবে এটি করা যায় তা এখানে:

my.iniমাইএসকিউএল কনফিগারেশন ফাইলটি খুলুন এবং লাইনের নীচে নীচের লাইনগুলি যুক্ত করুন [mysqld]

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

এর পরে, আপনার পরিবর্তনগুলি সংরক্ষণ করুন এবং আপনার মাইএসকিউএল পরিষেবাটি পুনরায় চালু করুন।

রোলব্যাক আপনার যদি প্রয়োজন হয় এবং তারপরে আপনার মাইগ্রেশনটি আবার চালান।


আপনার সমস্যাটি এখনও অব্যাহত থাকলে আপনার ডাটাবেস কনফিগারেশন ফাইলটিতে গিয়ে সেট করুন

'engine' => null, প্রতি 'engine' => 'innodb row_format=dynamic'

আশা করি এটা সাহায্য করবে!


1

প্রথমে লোকালহোস্টে ডাটাবেসের সমস্ত টেবিল মুছুন

ফাইল কনফিগারেশন / ডাটাবেস.ফ্যাপে লারাভেল ডিফল্ট ডাটাবেস (utf8mb4) বৈশিষ্ট্যগুলিতে পরিবর্তন করুন:

'চরসেট' => 'utf8', 'কোলেশন' => 'utf8_unicode_ci',

তারপরে আমার স্থানীয় ডাটাবেস বৈশিষ্ট্যগুলি utf8_unicode_ci পরিবর্তন করা। পিএইচপি কারিগর মাইগ্রেশন এটা ঠিক আছে।


0

অন্য যে কেউ এতে প্রবেশ করতে পারে, তাদের জন্য আমার সমস্যাটি ছিল আমি টাইপ stringকরার জন্য একটি কলাম তৈরি করছিলাম এবং এটি তৈরি করার চেষ্টা করছিলাম ->unsigned()যখন এটি ইন্টিজার হিসাবে বোঝানো হয়েছিল।


0

এখানে যে কাজটি করা হয়েছে তার মূল নামটি (একটি সংক্ষিপ্ত) সহ একটি দ্বিতীয় পরম পাস হয়েছিল:

$table->string('my_field_name')->unique(null,'key_name');

0

আমি এই ত্রুটিটি পাচ্ছিলাম যদিও আমার কাছে ইতিমধ্যে ছিল (আসলে কারণ ইতিমধ্যে আমার ছিল) স্কিমা :: ডিফল্টস্ট্রিংলংথ (১৯১); আমার AppServiceProvider.php ফাইলে।

কারণটি হ'ল আমি আমার মাইগ্রেশনগুলির মধ্যে একটিতে একটি স্ট্রিং মান 191 এর চেয়ে বেশি একটি মানটিতে সেট করার চেষ্টা করছিলাম:

Schema::create('order_items', function (Blueprint $table) {
    $table->primary(['order_id', 'product_id', 'attributes']);
    $table->unsignedBigInteger('order_id');
    $table->unsignedBigInteger('product_id');
    $table->string('attributes', 1000); // This line right here
    $table->timestamps();
});

1000 সরানো বা এটি 191 এ সেট করা আমার সমস্যা সমাধান করেছে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.