我使用的mysql2库与NodeJS。我在本地机器和服务器上有相同的代码和数据库结构。当我上传一张照片到“照片”表时,在我的本地机器上,它工作正常。当我使用服务器时,我得到以下错误:
{错误:数据太长,列'照片'在第1行Packet.as错误(/srv/project/server/node_modules/mysql2/lib/数据包/packet.js:716: 13)在查询。Command.execute(/srv/project/server/node_modules/mysql2/lib/命令/command.js:28: 22)在Connection.handle包(/srv/project/server/node_modules/mysql2/lib/connection.js:502: 28)在PacketParser.on包(/srv/project/server/node_modules/mysql2/lib/connection.js:81: 16)在PacketParser.execute开始(/srv/project/server/node_modules/mysql2/lib/packet_parser.js:77: 14)在Socket.(/srv/project/server/node_modules/mysql2/lib/connection.js:89: 29)在Socket.emit(events.js:182: 13)at addChunk(_stream_readable.js:283: 12)at readableaddChunk(_stream_readable.js:264: 11)at Socket.eadable.push(_stream_readable.js:219: 10)代码:'ER_DATA_TOO_LONG',errno: 1406,sqlState:'22001',sqlMessage:'数据太长,列\'照片\'在第1行'}
到底是怎么回事?
您可能在服务器上启用了严格模式,而不是在本地MySQL实例上。
这样检查:
mysql> SELECT @@sql_mode;
+-------------------------------------------------------------------------------------------------------------------------------------------+
| @@sql_mode |
+-------------------------------------------------------------------------------------------------------------------------------------------+
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+-------------------------------------------------------------------------------------------------------------------------------------------+
以上是MySQL 5.7.8及更高版本的默认sql_mode。它包括严格模式。
严格模式的一个效果是,如果您将字符串值或数值存储到一个列中,而该列的大小不足以接受该值,则会出现错误。如果没有严格模式,MySQL会插入行,但会截断值。
下面是一个演示:
mysql> create table t ( v varchar(10) );
mysql> insert into t set v = 'Now is the time for all good men to come to the aid of their country';
ERROR 1406 (22001): Data too long for column 'v' at row 1
mysql> set sql_mode='';
mysql> insert into t set v = 'Now is the time for all good men to come to the aid of their country';
Query OK, 1 row affected, 1 warning (0.00 sec)
mysql> show warnings;
+---------+------+----------------------------------------+
| Level | Code | Message |
+---------+------+----------------------------------------+
| Warning | 1265 | Data truncated for column 'v' at row 1 |
+---------+------+----------------------------------------+
mysql> select * from t;
+------------+
| v |
+------------+
| Now is the |
+------------+
严格的模式是一件好事。最好知道你的数据不合适,而不是让它被截断。
您应该使用本地MySQL实例进行开发,该实例的版本和sql_模式与最终将在生产中部署到的MySQL实例相同。否则,您将发现您的代码在生产中存在开发过程中没有出现的错误,这将使您感到困惑和难以调试。
您可能无法复制生产环境的每个方面,但如果可以,请尽可能接近您的开发环境。
要解决此问题,请确保为列选择一种数据类型,该数据类型可以保存发送的长数据。
阅读https://dev.mysql.com/doc/refman/8.0/en/string-type-overview.html更多细节。
我想你是想上传照片作为一个斑点?要解决这个问题,您可以为照片列使用long blob
数据类型。
如果您使用的是VARCHAR字段,请尝试增加长度并再次测试上载。
问题内容: 我的实体中有一些字段,例如: 在我的数据库架构上,该字段设置为,所以应该没问题。无论如何:每当我尝试插入图片或pdf时-都不比,我只会收到此信息 我已经检查了我的MySQL cnf,并将参数设置为-我缺少什么吗? 问题答案: 这完全取决于用于列的列类型。根据您的需要,使用: :最大长度为255个字节 :最大长度为65,535字节 :最大长度16,777,215字节 :最大长度为4,29
我有我的班级电影: 和我的控制器方法: 我得到一个错误: Servlet.service()的servlet[springDispatcher]在上下文与路径[/web编程]抛出异常[请求处理失败;嵌套异常org.springframework.dao.DataIntegrityViolationException:无法执行语句;SQL[n/a];嵌套异常是org.hibernate.except
问题内容: 错误代码:1406。数据对于列而言太长 现在一些值 插入记录超过 如果我们的 它显示错误信息 错误代码:1406。数据对于列而言太长 但是我的期望是,我想在表中至少插入前45个字符 如果问题不清楚,请告诉我。 我知道此错误的原因。我正在尝试插入比数据类型长度更多的值。 我想要MySQL中的解决方案,因为它可能在中。所以我希望它也会出现在 MySQL中 。 问题答案: MySQL将截断任
从我的应用程序注册表单中,我试图将复选框值插入到mysql表中,但它抛出错误1406 Data对于列来说太长了。复选框的值为 0 或 1。而我的表结构是,创建表测试(checkbox_response位(1))... 我经历了一些事情,找到了解决这个问题的方法。解决方案是,我刚刚更改了sql模式SET@@global。sql_mode=“”…正确插入后。 虽然“我的数据类型大小”适合复选框值,但为
我试图使用C#将一些字符串值插入到mysql表中的中。 每次值都会不断变化。 有时,应用程序会引发异常。 我浏览了一些帖子: “列的数据太长”-为什么 数据截断:第1行“logo”列的数据太长 mysql-Mysql2::错误:第1行的列“description”的数据太长 数据截断:第1行“Phone”列的数据太长 MySQL数据过长错误 但我的问题是: 如何以编程方式决定长度字符串(或其他数据
问题内容: 我打开kibana并进行搜索,但出现碎片失败的错误。我查看了elasticsearch.log文件,然后看到此错误: 有什么办法可以增加593.9mb的限制? 问题答案: 您可以尝试在配置文件中将fielddata断路器的限制提高到75%(默认值为60%),然后重新启动集群: 或者,如果您不想重启群集,则可以使用以下方法动态更改设置: 试试看。