php - 如何在 mysql (laravel) 中使 varchar 可以为空且唯一

标签 php mysql schema laravel

我可以让一个 MySQL 列既可以为 null 又可以唯一吗?如果用户想要提供,我有一个存储用户 Email_id 的表,否则它将是(空)。我在其他一些问题中读到,我可以使用默认 NULL 创建一个唯一字段。但是我在创建表时遇到了这个错误

#1067 - Invalid default value for 'email' (i make it only for test purpose)

主表是用 larave schema builder 类生成的

$table->text('email')->nullable()->unique(); (no default added)

在数据库中

+--------------+------------------+------+-----+---------+----------------+
| Field        | Type             | Null | Key | Default | Extra          |
+--------------+------------------+------+-----+---------+----------------+ 
| email_id     | varchar(200)     | YES  | UNI | NULL    |                |

现在错误是

Duplicate entry '' for key 'users_email_id_unique' (when inserting email with empty string) 

现在的问题是如何处理一个既唯一又可以为 null 的 varchar 字段。

最佳答案

我知道这是一个老问题,这是给有同样问题的其他人的。

您正在尝试添加一个 字符串。您使列可空唯一。这意味着您正在尝试不应该做的事情。您可以发送多个 null 值,但不能发送多个 empty 字符串。 MySQL 将 empty 视为一个值。

或者你可以写一个mutator在你的模式中

public function setEmailAttribute($value) {
    if ( empty($value) ) { // will check for empty string
    $this->attributes['email'] = NULL;
    } else {
        $this->attributes['email'] = $value;
    }
}

关于php - 如何在 mysql (laravel) 中使 varchar 可以为空且唯一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17241586/

相关文章:

php - 如何启用 php curl 扩展

mysql - 如何在不连接到数据库的情况下检查用户和密码是否有效

php - 如何查找数组或 mySQL 表中丢失的数据?

mysql - 是否可以从数据库创建 ruby​​-on-rails 迁移?

delphi - BDE 对 .sch 模式文件使用什么标准?

php - PHP 与 MYSQL 的并发

php - October CMS 创建多选表单字段

php - SELECT DISTINCT 名称但返回所有数据

schema - 将新模式发布到 SOLR

php - 回显日期时间本地格式的问题