mysql - Laravel 迁移中的回滚 UUID 类型
问题描述
我正在使用 Ramsey\Uuid 包切换到 UUID 主键,效果很好。到目前为止遇到的唯一问题是当我运行 php artisan migrate:rollback 将其更改回原始主键 ID 时:
Illuminate\Database\QueryException : SQLSTATE[42000]: 语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以在第 1 行的“CHARACTER SET utf8mb4 NOT NULL COLLATE
utf8mb4_unicode_ci
”附近使用正确的语法(SQL:ALTER TABLE model_has_roles CHANGE model_id model_id BIGINT UNSIGNED AUTO_INCREMENT CHARACTER SET utf 8mb4 NOT NULL COLLATEutf8mb4_unicode_ci
)
我的代码:
public function up()
{
if(!Type::hasType('uuid')) {
Type::addType('uuid', 'Ramsey\Uuid\Doctrine\UuidType');
}
Schema::table('model_has_roles', function (Blueprint $table) {
$table->uuid('model_id')->change();
});
}
public function down()
{
Schema::table('model_has_roles', function (Blueprint $table) {
$table->bigIncrements('model_id')->change();
});
}
我究竟做错了什么?
解决方案
您似乎遇到了这个问题:https ://github.com/doctrine/dbal/issues/3714
共识是添加->charset(null)
到您的列定义是在短期内解决问题的最佳方法。
尝试
public function down()
{
Schema::table('model_has_roles', function (Blueprint $table) {
$table->bigIncrements('model_id')->charset(null)->change();
});
}
推荐阅读
- python-3.x - 在方法python类中调用函数
- c++ - OpenGL 在 Z 缓冲区和深度测试方面遇到问题
- python - 将 LXML 与 Html、Requests 和 ETree 一起使用,除了文本之外,它还提供了所有 HTML 标签,我不知道为什么
- keras - 在 fit_generator 中, training_generator 受 validation_generator 影响
- web-services - 如果我和互联网之间有两个路由器,我还可以进行端口转发以公开我的本地网站吗?
- php - PHP 警告:非法字符串偏移 'all'
- ibm-watson - Watson Unity SDK 突然停止工作
- nlp - 创建词嵌入而不在存储库中保留 fastText Vector 文件
- python - 如果发现一次错误,则跳过循环内的部分代码
- python - 获取硒python的页数