"数据太长了" - 为什么?

Ben*_* C. 57 mysql sql

我编写了一个MySQL脚本来为假设的医院记录创建数据库并用数据填充它.其中一个表Department有一个名为Description的列,它被声明为varchar(200)类型.当为描述执行INSERT命令时,我得到一个错误1406 : __CODE__. 我插入的所有字符串都少于150个字符.

这是宣言:
__CODE__


这是插入命令: 从外表看,这应该是有效的.有人有见识吗?
__CODE__

Ale*_*kin 56

将列类型更改为 LONGTEXT

  • 应该是正确的答案 - 而是通过禁用严格,而不是修复原因来掩盖问题 (2认同)
  • 附加信息:如果要在数据库中存储的文本长度超过 65535 个字符,则必须选择 MEDIUMTEXT 或 LONGTEXT,但要小心:MEDIUMTEXT 存储的字符串最多为 16 MB,LONGTEXT 最多为 4 GB。;) (2认同)

Cla*_*ira 44

将旧数据库迁移到新版本时,我遇到了类似的问题.

切换MySQL模式不使用STRICT.

SET @@global.sql_mode= 'NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
Run Code Online (Sandbox Code Playgroud)

错误代码:1406.列的数据太长 - MySQL


STT*_*LCU 18

无论列数或单个列长度如何,都可以在mysql表的单行中存储多少数据.

如官方文件中所述

最大行大小限制列的数量(可能是大小),因为所有列的总长度不能超过此大小.例如,utf8字符每个字符最多需要三个字节,因此对于CHAR(255)CHARACTER SET utf8列,服务器必须为每个值分配255×3 = 765个字节.因此,一个表不能包含超过65,535/765 = 85个这样的列.

可变长度列的存储包括长度字节,其根据行大小进行评估.例如,VARCHAR(255)CHARACTER SET utf8列需要两个字节来存储值的长度,因此每个值最多可占用767个字节.

在这里您可以找到INNODB TABLES LIMITATIONS


Ben*_* C. 9

事实证明,通常情况下,这是我的一个愚蠢的错误.我测试这个的方式,在将数据类型从varchar(50)更改为varchar(200)之后,我没有重建Department表.我只是重新运行insert命令,仍将列作为varchar(50).


小智 8

Varchar有自己的极限.也许尝试将数据类型更改为文本.


Ill*_*dan 8

对我来说,我将列类型定义为 BIT(例如“布尔值”)

当我尝试通过 UI(工作台)设置列值“1”时,出现“数据对于列来说太长”错误。

事实证明,有一种特殊的语法用于设置 BIT 值,即:

b'1'
Run Code Online (Sandbox Code Playgroud)


Kri*_*gid 6

在 mysql 中,如果您采取,VARCHAR则将其更改为TEXTbcoz,其大小为 65,535,如果您已经可以TEXT进行更改,则LONGTEXT仅当您需要更多时65,535。

总大小LONGTEXT是4,294,967,295字符