在laravel迁移中,更改数据库列的排序规则不起作用

时间:2017-10-05 14:17:19

标签: php mysql laravel laravel-5

我想更改“about_me”列中“users”列的排序规则。为此,我使用下面的代码。我只是将排序规则更改为utf8mb4_unicode_ci,但代码无效。

 public function up()
    {
        if (Schema::hasColumn("users", "about_me")) {
            Schema::table("users", function(Blueprint $table) {
                $table->collation = 'utf8mb4_unicode_ci';
                $table->charset = 'utf8mb4';
            });
        }
 }

我已经在/config/database.php中更改了,这有助于我将数据保存在db中但是在获取数据库之后,我发现特殊符号没有显示,当我将该列的排序更改为utf8mb4_unicode_ci然后它工作得很好。但我想在迁移中实现它。当前代码无效,我需要正确的代码才能正常运行。

2 个答案:

答案 0 :(得分:8)

Laravel支持为MySQL修改每列的归类。对于表格范围的修改,您需要编写原始查询。

public function up()
{

    DB::statement("ALTER TABLE users CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci");
}

答案 1 :(得分:0)

在现代 Laravel 中,可以在表或列上设置字符集和排序规则。

https://laravel.com/docs/8.x/migrations#database-connection-table-options

    // You can change table.
    Schema::table('users`', function (Blueprint $table) {
        $table->charset = 'utf8mb4';
        $table->collation = 'utf8mb4_unicode_ci';
    });

    // You can change on a field of a table.
    Schema::table('users', function (Blueprint $table) {
        $table->string('about_me')->charset('utf8mb4')->collation('utf8mb4_unicode_ci')->change();
    });