我尝试更改Laravel-5中mysql数据库的编码,我尝试过迁移,遵循此示例:https://slashdot.io/blog/adding-emoji-support-to-your-blog-948181198 - 但是,没有任何更新和charset /编码保持原样。
是否可以通过迁移执行此操作?或者我是否必须编写单独的脚本?
迁移(完整性)
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
DB::raw('ALTER TABLE homestead.survey_responses CONVERT TO CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci');
DB::raw('REPAIR TABLE homestead.survey_responses');
DB::raw('OPTIMIZE TABLE homestead.survey_responses');
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
DB::raw('ALTER TABLE homestead.survey_responses CONVERT TO CHARACTER SET = utf8 COLLATE utf8_unicode_ci');
DB::raw('REPAIR TABLE homestead.survey_responses');
DB::raw('OPTIMIZE TABLE homestead.survey_responses');
}
上述迁移运行没有错误,但遗憾的是什么也没做。
答案 0 :(得分:8)
这里大死灵。
Laravel 7开箱即用,具有更改表上的字符集和排序规则的功能。我需要这个用于收银员/条带。
The documentation向您展示如何进行here
Schema::create('users', function (Blueprint $table) {
....
$table->charset = 'utf8mb4';
$table->collation = 'utf8mb4_bin';
});
修改
或者,对我来说,更好的解决方案是更改单个列的排序规则。
$table->string('name')->collation('utf8mb4_bin');
答案 1 :(得分:5)
使用通常在迁移类中使用的 Schema / Blueprint 类是不可能的。但是你仍然可以使用 DB facade运行你需要的任何SQL - 在你的情况下:
use Illuminate\Database\Migrations\Migration;
use Illuminate\Support\Facades\DB;
class ChangeCharsetAndCollation Migration
{
public function up()
{
DB::statement('ALTER DATABASE database CHARACTER SET new_charset COLLATE new_collation');
}
public function down()
{
DB::statement('ALTER DATABASE database CHARACTER SET old_charset COLLATE old_collation');
}
}
只需将数据库, old_charset , old_collation , new_charset , new_collation 替换为所需的值,并确保您的用户有权运行此类查询。