错误代码:1406。列
的数据太长CREATE TABLE `TEST`
(
`idTEST` INT NOT NULL ,
`TESTcol` VARCHAR(45) NULL ,
PRIMARY KEY (`idTEST`)
);
现在Insert
有些值
INSERT INTO TEST
VALUES
(
1,
'Vikas'
)
select
SELECT * FROM TEST;
插入超过length
INSERT INTO TEST
VALUES
(
2,
'Vikas Kumar Gupta Kratika Shukla Kritika Shukla'
)
如果我们select
length
SELECT LENGTH('Vikas Kumar Gupta Kratika Shukla Kritika Shukla')
'47'
它显示错误消息
错误代码:1406。列
的数据太长但我的期望是,我想在表格中插入至少前45个字符
如果问题不明确,请告诉我。
我知道这个错误的原因。我试图插入超过数据类型长度的值。
我想在MySQL中使用解决方案,因为MS SQL
可以实现。所以我希望它也可以在 MySQL 。
答案 0 :(得分:56)
MySQL将截断超出指定列宽的任何插入值。
要做到这一点没有错误,请尝试将SQL mode
切换为不使用STRICT
。
更改模式
这可以通过两种方式完成:
my.ini
(Windows)或my.cnf
(Unix)文件,然后查找“sql-mode”文本。查找
代码:
# 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= '';
答案 1 :(得分:1)
我认为关闭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)
);
答案 2 :(得分:1)
这最近发生在我身上。 我已完全迁移到MySQL 5.7,所有内容均处于默认配置。
以前所有的答案都已经清楚了,我只想添加一些内容。
此1406错误也可能发生在您的函数/过程中,不仅发生在表的列长上。
对于我来说,我已经使用IN参数varchar(16)触发了哪个调用过程,但是接收到32个长度值。
我希望这可以帮助遇到类似问题的人。
答案 3 :(得分:0)
这是我对ubuntu使用的步骤。它将允许您从输入中插入超过45个字符,但是MySQL会将文本切割为45个字符以插入数据库。
运行命令
sudo nano /etc/mysql/my.cnf
然后粘贴此代码
[mysqld] sql-mode =“ NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION”
重启MySQL
sudo服务mysql重新启动;
答案 4 :(得分:0)
除了上面给出的答案外,我只想补充一下,导入带有不正确的行终止字符的数据时也会发生此错误。
例如,我在Windows中以csv格式保存转储文件。然后在导入
LOAD DATA INFILE '/path_to_csv_folder/db.csv' INTO TABLE table1
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
ESCAPED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES;
在我使用\ n时,Windows将行尾保存为\ r \ n(即CF LF)。我疯了,为什么phpMyAdmin能够导入文件而我却不能。仅当我在notepadd ++中打开文件并看到文件结尾时,我才意识到mysql无法找到任何以行结尾的符号(而且我猜想它会将所有行都视为该字段的输入;使它抱怨)。
从\ n到\ r \ n的任何情况;它像魅力一样工作。
LOAD DATA INFILE '/path_to_csv_folder/db.csv' INTO TABLE table1
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
ESCAPED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES;
答案 5 :(得分:0)
在Django中使用imagefield时遇到了相同的错误。
post_picture = models.ImageField(upload_to='home2/khamulat/mydomain.com/static/assets/images/uploads/blog/%Y/%m/%d', height_field=None, default=None, width_field=None, max_length=None)
我刚刚将多余的代码删除了,如 post_picture = models.ImageField(upload_to='images/uploads/blog/%Y/%m/%d', height_field=None, default=None, width_field=None, max_length=None)
所示,错误消失了
答案 6 :(得分:0)
首先使用主键集创建表结构,然后尝试上传 csv 文件后,我收到此错误。我的 CSV 文件在主键列中有信息。它是从另一个 sql server 导出的。无论我如何尝试导出和导入,它都不起作用。
我为解决这个问题所做的是将我的主键列放在我的数据库和我的 csv 中,上传,然后添加我的主键列。
答案 7 :(得分:-2)
尝试检查SQL数据库的限制。也许你超过了这一行的字段限制。
答案 8 :(得分:-2)
转到模型并检查,因为您可能截断了该特定列的多个单词,例如。 MAX_LENGTH = “150”。