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.
通过查阅发现导致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个字符,但仍然存在一些差异:
VARCHAR中的VAR表示您可以将最大大小设置为1到65,535之间的任何值。 TEXT字段的最大固定大小为65,535个字符。
VARCHAR可以是索引的一部分,而TEXT字段要求您指定前缀长度,该长度可以是索引的一部分。
VARCHAR与表内联存储(至少对于MyISAM存储引擎而言),因此在大小合理时可能会更快。当然,快得多少取决于您的数据和硬件。同时,TEXT存储在表外,该表具有指向实际存储位置的指针。
排序使用TEXT列将需要使用基于磁盘的临时表作为MEMORY(HEAP)存储引擎。
TEXT类型
如果您需要TEXT类型,请知道实际上有三种口味;除了
TEXT最多可存储65,535个字符
MEDIUMTEXT最多可存储16 MB的字符串
LONGTEXT 最多可存储4 GB的字符串!不用说,除非您有大量的存储空间,否则应避免使用这些较大的类型。
Data Type | Storage Required |
---|---|
TINYTEXT | L + 1 bytes, where L < 2**8 |
TEXT | L + 2 bytes, where L < 2**16 |
MEDIUMTEXT | L + 3 bytes, where L < 2**24 |
LONGTEXT | L + 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) | |
TimeStamp | yyyymmddhhmmss | |
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