SQL-[ERR]1406,[ERR]1118报错解析及解决方法

1.[ERR]1406报错解析

    通过Navicat Premium将Excel文件导入MySQL数据库时出现报错“[ERR]1406 – Data too long for column ‘AB’ at row 1”。意思是导入的数据过长,超出了数据库为其设定的范围。

图1 报错界面—[ERR]1406

    查看Excel中‘AB’字段报错的那一条记录发现数据长度为808字符。

图2 ‘AB’列Excel数据

    在Navicat中点击“上一步”返回至数据空间设定界面,发现在数据导入时Navicat默认将数据空间设定为varchar类型数据,长度为255字节。记录的数据长度确实超出了设定值的大小。

图3 数据空间设定界面默认状态

2.[ERR]1118报错解析

    修改varchar数据类型的长度,使其满足需求,结果出现报错[ERR]1118-Cannot create table,varchar类型数据长度不得超过了65535字节。

图4 报错界面—[ERR]1118

    查阅资料得,varchar 保存时用一个字节或两个字节长的前缀+数据。故varchar 的最大长度应为65532=65535-1-2(字节),utf-8下为21844=65532/3(字符)。如图5所示,varchar类型数据设定21845字符保存时报错。

图5 单字段报错界面

    值得注意的是,当全字段varchar数据的长度超过21844字符(utf-8下)时仍会报错,所以varchar的字符限制是对全字段而言的!

图6 全字段报错界面

3.解决方法

    故对于大文本数据,解决方法是将部分字段的数据类型从varchar调整为text,如果数据超过了64K则可以选择存储空间更大的数据类型longtext或者midiumtext,具体可参考图8。

图7 调整部分字段的数据类型
图8 串数据类型

注:对于5.0版本以上的MySQL,varchar数据类型的存储上限已经更改为65535字节。

    最后成功导入。

图9 数据成功导入界面

注:虽然设定text数据类型解决了大文本的存储问题,但也降低了查询速度,故在条件允许的情况下优先使用varchar数据类型。


如果这篇文章对您有帮助的话,麻烦点个赞再走吧~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容