当前位置: 首页 > 知识库问答 >
问题:

错误代码: 1406年。数据对于列来说太长 - MySQL

夏侯渊
2023-03-14

错误代码:1406。数据对于列来说太长了

CREATE  TABLE `TEST` 
(

  `idTEST` INT NOT NULL ,

  `TESTcol` VARCHAR(45) NULL ,

  PRIMARY KEY (`idTEST`) 
);

现在插入一些值

INSERT INTO TEST
VALUES
(
    1,
    'Vikas'
)

select 

SELECT * FROM TEST;

插入超过长度的记录

INSERT INTO TEST
VALUES
(
    2,
    'Vikas Kumar Gupta Kratika Shukla Kritika Shukla'
)

如果我们选择长度

SELECT LENGTH('Vikas Kumar Gupta Kratika Shukla Kritika Shukla')

 '47'

它显示了错误信息

错误代码:1406。数据对于列来说太长了

但我的期望是,我想在表中插入至少前45个字符

如果问题不清楚,请告诉我。

我知道此错误的原因。我正在尝试插入超过数据类型长度的值。

我想要MySQL中的解决方案,因为它可以在MSSQL中使用。所以我希望它也能在MySQL中使用。

共有3个答案

杨凯旋
2023-03-14

我认为关闭STRICT模式不是一个好的选择,因为应用程序可能会开始丢失用户输入的数据。

如果您从应用程序接收到TESTcol的值,您可以添加模型验证,就像在Rails中一样

validates :TESTcol, length: { maximum: 45 }

如果您使用脚本中SQL值进行操作,您可以使用SUBSTRING命令截断字符串

INSERT INTO TEST
VALUES
(
    1,
    SUBSTRING('Vikas Kumar Gupta Kratika Shukla Kritika Shukla', 0, 45)
);
梁丘柏
2023-03-14

最近我也遇到了这种情况。我完全迁移到了MySQL 5.7,一切都是默认配置。

所有之前的答案都已经很清楚了,我只想补充一些东西。

此 1406 错误也可能发生在您的函数/过程中,而不仅仅是表的列长度。

在我的例子中,我用参数varchar(16)触发了哪个调用过程,但是收到了32个长度值。

我希望这能帮助有类似问题的人。

郁烨
2023-03-14

MySQL将截断任何超过指定列宽的插入值。

要做到这一点没有错误,请尝试将SQL模式切换为不使用严格

参考手册

要更改模式

这可以通过两种方式完成:

  1. 打开您的my。ini(Windows)或my。MySQL安装目录中的cnf(Unix)文件,并查找文本“sqlmode”

查找:

代码:

# Set the SQL mode to strict 
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

替换为:

代码:

# Set the SQL mode to strict 
sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

或者

代码:

SET @@global.sql_mode= '';
 类似资料:
  • 问题内容: 错误代码:1406。数据对于列而言太长 现在一些值 插入记录超过 如果我们的 它显示错误信息 错误代码:1406。数据对于列而言太长 但是我的期望是,我想在表中至少插入前45个字符 如果问题不清楚,请告诉我。 我知道此错误的原因。我正在尝试插入比数据类型长度更多的值。 我想要MySQL中的解决方案,因为它可能在中。所以我希望它也会出现在 MySQL中 。 问题答案: MySQL将截断任

  • 从我的应用程序注册表单中,我试图将复选框值插入到mysql表中,但它抛出错误1406 Data对于列来说太长了。复选框的值为 0 或 1。而我的表结构是,创建表测试(checkbox_response位(1))... 我经历了一些事情,找到了解决这个问题的方法。解决方案是,我刚刚更改了sql模式SET@@global。sql_mode=“”…正确插入后。 虽然“我的数据类型大小”适合复选框值,但为

  • 我在持久化LocalDate字段[在列中使用VARCHAR(20)类型]时收到以下错误: 字段定义如下: 我使用的是spring data starter(1.5.9版本)。它在内部使用hibernate 5.0.12。 根据博文https://www.thoughts-on-java.org/hibernate-5-date-and-time/ Hibernate 5,支持Java 8特性(Da

  • 我有我的班级电影: 和我的控制器方法: 我得到一个错误: Servlet.service()的servlet[springDispatcher]在上下文与路径[/web编程]抛出异常[请求处理失败;嵌套异常org.springframework.dao.DataIntegrityViolationException:无法执行语句;SQL[n/a];嵌套异常是org.hibernate.except

  • 我正在将.csv导入Mysql,如下所示: …引发以下错误: "对于第63行的“注释”列,数据太长" 我看着第63行。csv,而“评论”的长度为115。 create语句似乎没问题(带有): 在将其标记为副本之前,请注意: 这个StackOverflow解决方案显然不适合:我已经将< code >字符集utf8添加到< code>LOAD DATA sql中。 另一个StackOverflow解决

  • 问题内容: 我的一个实体拥有一个名为的属性。JPA 2-Hibernate会为我生成模式,在我的情况下,RDBMS是MySQL。 被创建为一列,这是正确的。 用户开始创建记录,并且所有记录都能完美运行,但是随后一些用户收到了臭名昭著的错误。 该字段没有足够的空间容纳用户的机器记录!好,没问题 让我们更改架构! 因此,我打开实体类并将属性更改为: 顺便说一句,我声明: 重新启动应用程序后,我很高兴H