phpmysqllaravel

Laravel Schema Builder | Unique, Case Sensitive Column


I'm using Laravel's schema builder with mysql to make a unique column. But when I use the unique method it is case insensitive. I need it to be case sensitive. How can I do that?

Schema:

Schema::create('item', function (Blueprint $table) {
    $table->increments('id');
    $table->string('key')->unique();
    $table->timestamps();
});

First entry into database:

$i = new Item;
$i->key = "Random_Key";
$i->save();

Second entry into database (returns duplicate entry error):

$i = new Item;
$i->key = "random_key";
$i->save();

Solution

  • You need to use character sets and collations for specifying case sensitive columns in mySQL

    Laravel has the collate and charset column modifiers in mySQL for this purpose

    So, you may use something like: $table->string('key')->charset('utf8')->collate('utf8_cs')->unique()

    As the OP stated, here's what worked for him:

    $cs = $table->string('key')->unique();

    $cs->collation = 'utf8_bin';