SQLite 报错 Cannot add a NOT NULL column with default value NULL
我需要给 Laravel 默认的 users
加几个字段:
public function up()
{
Schema::table('users', function (Blueprint $table) {
$table->string('phone')->unique()->comment('电话');
$table->string('company_name')->nullable()->comment('公司名称');
$table->string('company_title')->nullable()->comment('公司职位');
$table->string('recommender_phone')->nullable()->comment('推荐人手机号');
});}
在本地 php artisan migrate
成功了,但是在服务器上却报错了:
xcy@iZuf6bmn9ma9a7kv0cbvwtZ:/var/www/example.com$ php artisan migrate
APPLICATION IN PRODUCTION.
Do you really wish to run this command? (yes/no) [no]
❯ yes
INFO Running migrations.
2022_09_26_121246_add_fields_to_users_table ............................................................................................. 2ms FAIL
In Connection.php line 759:
SQLSTATE[HY000]: General error: 1 Cannot add a NOT NULL column with default value NULL (SQL: alter table "users" add column "phone" varchar not null)
In Connection.php line 538:
SQLSTATE[HY000]: General error: 1 Cannot add a NOT NULL column with default value NULL
我在本地和服务器上都用的是 SQLite,本地用的是 3.38.5,线上用的是 3.31.1:
# 本地
➜ php -i | grep -i sqlite
PDO drivers => dblib, mysql, odbc, pgsql, sqlite
pdo_sqlite
PDO Driver for SQLite 3.x => enabled
SQLite Library => 3.38.5
sqlite3
SQLite3 support => enabled
SQLite Library => 3.38.5
sqlite3.defensive => On => On
sqlite3.extension_dir => no value => no value
# 线上
xcy@iZuf6bmn9ma9a7kv0cbvwtZ:/var/www/example.com$ php -i | grep -i sqlite
/etc/php/8.1/cli/conf.d/20-pdo_sqlite.ini,
/etc/php/8.1/cli/conf.d/20-sqlite3.ini,
PDO drivers => sqlite
pdo_sqlite
PDO Driver for SQLite 3.x => enabled
SQLite Library => 3.31.1
sqlite3
SQLite3 support => enabled
SQLite Library => 3.31.1
sqlite3.defensive => On => On
sqlite3.extension_dir => no value => no valu
我的问题是:
- 这是我代码的问题,还是 SQLite 的 Bug?
- 较新版本的 SQLite 修复了上面的 Bug 吗?
- 现在怎么解决线上的这个问题呢?
参考网上答案,用了这样一个 work-around,不报错了,但是看起来不大对头,电话号码在 Laravel 代码里有专门的 validation 规则