• home > DB > mysql >

    mysql类型: text/longtext/varchar区别:Data too long for column

    Author:zhoulujun Date:

    The “Data too long for column” error occurs when you insert more data for a column that does not have the capability to store that data 还是因为类型问题

    类型问题

    The “Data too long for column” error occurs when you insert more data for a column that does not have the capability to store that data.

    通过查阅发现导致1406的错误原因有很多,而我的错误原因在于数据信息过长超过了原本分配数据库对应字段的空间最大值,通过增加分配的字段空间就解决了。 例如:我给varchar(5) 存入 “88888888” 这样是不可以的,应该分配字段更大的空间 如varchar(300)

    1.检查数据库中该字段的长度是否太小(如果字段类型是字符串类型(varchar,char)),太小只要增大这个字段的长度即可,但是mysql一张表的varchar总长度不能超过65535,如果超过需要对表进行压缩。

    2.如果字段类型是text,则检查数据库innodb_file_format 格式

    mysql> show variables like ‘%format%’;

    ±-------------------------±------------------+

    | Variable_name | Value |

    ±-------------------------±------------------+

    | binlog_format | STATEMENT |

    | date_format | %Y-%m-%d |

    | datetime_format | %Y-%m-%d %H:%i:%s |

    | default_week_format | 0 |

    | innodb_file_format | Barracuda |

    | innodb_file_format_check | ON |

    | innodb_file_format_max | Antelope |

    | time_format | %H:%i:%s |

    ±-------------------------±------------------+

    VARCHAR和TEXT之间的一些区别

    VARCHAR和TEXT两种数据类型共享的最大长度为65,535个字,但仍然存在一些差异:

    1. VARCHAR中的VAR表示您可以将最大大小设置为1到65,535之间的任何值TEXT字段的最大固定大小为65,535个字符

    2. VARCHAR可以是索引的一部分,而TEXT字段要求您指定前缀长度,该长度可以是索引的一部分。

    3. VARCHAR与表内联存储(至少对于MyISAM存储引擎而言),因此在大小合理时可能会更快。当然,快得多少取决于您的数据和硬件。同时,TEXT存储在表外,该表具有指向实际存储位置的指针。

    4. 排序使用TEXT列将需要使用基于磁盘的临时表作为MEMORY(HEAP)存储引擎。

    TEXT类型

    如果您需要TEXT类型,请知道实际上有三种口味;除了

    • TEXT最多可存储65,535个字符

    • MEDIUMTEXT最多可存储16 MB的字符串

    • LONGTEXT 最多可存储4 GB的字符串!不用说,除非您有大量的存储空间,否则应避免使用这些较大的类型。

    Data TypeStorage Required
    TINYTEXTL + 1 bytes, where L < 2**8
    TEXTL + 2 bytes, where L < 2**16
    MEDIUMTEXTL + 3 bytes, where L < 2**24
    LONGTEXTL + 4 bytes, where L < 2**32

    如果需要查询看,PS: 由于varchar查询速度更快, 能用varchar的时候就不用text。但是对于CMD文章系统,富文本内容肯定用text

    字符串类型

    类型范围说明
    Char(N) [ binary]N=1~255 个字节
    binary :分辨大小写
    固定长度std_name cahr(32) not null
    VarChar(N) [binary]N=1~255 个字节
    binary :分辨大小写
    可变长度std_address varchar(256)
    TinyBlob最大长度255个字节(2^8-1)

    Blob (Binary large objects)储存二进位资料,且有分大小写

    memo text not null
    TinyText最大长度255个字节(2^8-1)
    Blob最大长度65535个字节(2^16-1)
     Text最大长度65535个字节(2^16-1)
    MediumBlob最大长度 16777215 个字节(2^24-1)
    MediumText最大长度 16777215 个字节(2^24-1
    LongBlob最大长度4294967295个字节 (2^32-1)
    LongText最大长度4294967295个字节 (2^32-1)
    Enum集合最大数目为65535列举(Enumeration),Enum单选、Set复选sex enum(1,0)
    habby set(‘玩电玩’,'睡觉’,'看电影’,'听音乐’)
    Set集合最大数目为64

    数字/数值类型


    类型范围说明例如
    TinyInt[M] [UNSIGNED]-128~127
    UNSIGNED : 0~255

    num tinyint unsigned
    SmallInt[M] [UNSIGNED]-32768~32767
    UNSIGNED :0~ 65535


    MediumInt[M] [UNSIGNED]-8388608~8388607
    UNSIGNED :0~16777215


    Int[M] [UNSIGNED]-2^31~2^31-1
    UNSIGNED : 0~2^32


    BigInt[M] [UNSIGNED]-2^63~2^63-1
    UNSIGNED : 0~2^64


    Float [(M,D)]

    -3.4E+38~3.4E+38( 约 )

    注: M 为长度, D 为小数,Float 4 bytes,Double 8 bytes
    Double [(M,D)]-1.79E+308~1.79E+308( 约 )
    Decimal [(M,D)]

    日期时间类型


    类型范围说明
    Date日期(yyyy-mm-dd)
    Time时间(hh:mm:ss)
    DateTime日期与时间組合(yyyy-mm-dd hh:mm:ss)
    TimeStampyyyymmddhhmmss
    Year

    年份yyyy



    参考内容:

    https://www.tutorialspoint.com/what-is-the-mysql-error-data-too-long-for-column

    https://www.navicat.com.cn/company/aboutus/blog/360-在-mysql-中的-varchar-和-text-之间的选择

    为什么阿里巴巴不建议MySQL使用Text类型? https://segmentfault.com/a/1190000037765444



    转载本站文章《mysql类型: text/longtext/varchar区别:Data too long for column》,
    请注明出处:https://www.zhoulujun.cn/html/DB/mysql/2022_0618_8848.html