如何在mysql中使innoDB表中varchar字段总长度超过65535,是否可以修改某个mysql的配置参数。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在mysql中使innoDB表中varchar字段总长度超过65535,是否可以修改某个mysql的配置参数。相关的知识,希望对你有一定的参考价值。

参考技术A 来迟了,已经被别人回答了 参考技术B yes 参考技术C 使用longtext或mediumtext类型

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

【中文标题】如何在mysql(laravel)中使varchar可为空且唯一【英文标题】:how to make a varchar nullable and unique together in mysql (laravel) 【发布时间】:2013-06-18 23:01:36 【问题描述】:

我可以将 MySQL 列设为可空且唯一吗?如果用户想要提供,我有一个存储用户 Email_id 的表,否则它将是(null)。我读到其他一些问题,我可以使用默认 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) 

现在的问题是如何处理唯一且可以一起为空的 varchar 字段。

【问题讨论】:

【参考方案1】:

我们只是在必须插入 null 时犯了一个错误。如果是 null,我们必须像这样声明 null:

if(empty($request->email_id))
    $user->email_id = NULL;

不要使用“NULL”,这将被视为字符串。

【讨论】:

【参考方案2】:

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

您正在尝试添加 empty 字符串。您使列可为空唯一。这意味着你正在尝试一些你不应该做的事情。您可以发送多个 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;
    

【讨论】:

以上是关于如何在mysql中使innoDB表中varchar字段总长度超过65535,是否可以修改某个mysql的配置参数。的主要内容,如果未能解决你的问题,请参考以下文章

MySQL的varchar水真的太深了,你真的会用吗?

MySQL的varchar水真的太深了——InnoDB记录存储结构

MySQL的varchar水真的太深了——InnoDB记录存储结构

MySQL的varchar水真的太深了——InnoDB记录存储结构

MySQL - InnoDB 索引 varchar 或索引多个 varchar

如何在 oracle 中使可空列不为空