我编写了一个MySQL脚本来为假设的医院记录创建数据库并用数据填充它.其中一个表Department有一个名为Description的列,它被声明为varchar(200)类型.当为描述执行INSERT命令时,我得到一个错误1406 : __CODE__. 我插入的所有字符串都少于150个字符.
这是宣言:
__CODE__
这是插入命令:
从外表看,这应该是有效的.有人有见识吗?__CODE__
Ale*_*kin 56
将列类型更改为 LONGTEXT
Cla*_*ira 44
将旧数据库迁移到新版本时,我遇到了类似的问题.
切换MySQL模式不使用STRICT.
SET @@global.sql_mode= 'NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
Run Code Online (Sandbox Code Playgroud)
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
事实证明,通常情况下,这是我的一个愚蠢的错误.我测试这个的方式,在将数据类型从varchar(50)更改为varchar(200)之后,我没有重建Department表.我只是重新运行insert命令,仍将列作为varchar(50).
对我来说,我将列类型定义为 BIT(例如“布尔值”)
当我尝试通过 UI(工作台)设置列值“1”时,出现“数据对于列来说太长”错误。
事实证明,有一种特殊的语法用于设置 BIT 值,即:
b'1'
Run Code Online (Sandbox Code Playgroud)
在 mysql 中,如果您采取,VARCHAR则将其更改为TEXTbcoz,其大小为 65,535,如果您已经可以TEXT进行更改,则LONGTEXT仅当您需要更多时65,535。
总大小LONGTEXT是4,294,967,295字符