web-dev-qa-db-ja.com

com.mysql.jdbc.MysqlDataTruncation:データの切り捨て:データが列 'column_name'に対して長すぎます

Java JDBC with MySQLを使用していますが、次のエラーが発生します:

com.mysql.jdbc.MysqlDataTruncation: Data truncation: 
Data too long for column 'column_name'

このエラーを修正するにはどうすればよいですか?

6
thilo

mysqlターミナルでこのエラーを再現する方法:

mysql> create table penguins(val CHAR(2));
Query OK, 0 rows affected (0.08 sec)

mysql> insert into penguins values("AB");
Query OK, 1 row affected (0.00 sec)

mysql> insert into penguins values("ABC");
Query OK, 1 row affected, 1 warning (0.01 sec)

mysql> show warnings;
+---------+------+------------------------------------------+
| Level   | Code | Message                                  |
+---------+------+------------------------------------------+
| Warning | 1265 | Data truncated for column 'val' at row 1 |
+---------+------+------------------------------------------+
1 row in set (0.00 sec)

これは発生しているエラーですが、MySQLターミナルでは警告として表示され、行を挿入し、サイレントに切り捨てます。

MySQL JDBCはそれほど寛容ではなく、ハードエラーを吐き出し、行を挿入しません。

2ソリューション

挿入するデータ型の容量を増やすか、そこに配置するコンテンツのサイズを小さくしてください。

列のサイズを大きくするための凡例:

If you are using   then use this
-----------------  --------------
smallint           int
int                long
TEXT               LONGTEXT
LONGTEXT           CLOB
CLOB               Store the content to disk, and save the filename in the db.
8
Eric Leschinski

これはかなり明白に思えるかもしれません、そしてそれはそうです。 'column_name'列の値が、その列に収まるよりも大きい行を挿入または更新しようとしたようです。

たとえば、CHARまたはVARCHARの場合、列の定義されたサイズよりも長い文字列がある可能性があります。

これを修正するための選択もやや明白です。格納するデータが列より大きくないことを確認するか(おそらく、格納する前に長い文字列を切り捨てることによって)、データベース列のサイズを大きくします。

8
GreyBeardedGeek

データベースに画像ファイルをバイトとして挿入しようとすると、Spring Boot Data JPAアプリケーションで同じ問題が発生し、同じエラーが発生しました。

多くの研究開発の後、私は以下のような解決策を見つけました。

Application.propertiesファイルに以下の行を追加して解決しました

spring.datasource.url=jdbc:mysql://localhost:3306/conweb?sessionVariables=sql_mode='NO_ENGINE_SUBSTITUTION'&jdbcCompliantTruncation=false

それが誰かに役立つことを願っています。

5
Vijay Gajera

私の場合、アップロードされたデータには引用符( 'と ")が含まれています。そのため、上記と同じ例外が発生します。データ内の引用符を削除すると、テーブルに正常に挿入されます。

3

Image/Word/PDFファイルのアップロード中にSpringBootアプリケーションで同じ問題が発生し、以下の手順で修正しました。

解決策

  1. アップロードしようとしているファイルのサイズを確認してください。
  2. 次に、そのファイルサイズを、マップされたデータベースフィールドタイプで許可されている最大サイズと比較します。
  3. たとえば、LOBの場合:
    TINYBLOB≈255バイト、BLOB≈64KB、MEDIUMBLOB≈16MB、LONGBLOB≈4GB実行
  4. スペース要件に従って、Altertableコマンドを使用します。

    ALTER TABLE'TABLE_NAME 'MODIFY'FIELD_NAME' MEDIUMBLOB;

    注:リンクを保存することを常にお勧めしますが、実際のファイル(サイズが大きい)はDBに保存しないことをお勧めします。

1
Raman K Pandita

このエラーは、列に挿入しようとしたデータのサイズが大きすぎるために表示されます。

解決策-列サイズを最大に変更します。列のタイプがVARCHARであると仮定して、mySQLで

ALTER TABLE table_name CHANGE COLUMN col_name col_name  VARCHAR(1000);  //assuming 1000 is enough
0
Dipin P Joseph

ここでつまずいた人にとっては、同様のエラーの別の理由がある可能性があります。

ストアドプロシージャパラメータのタイプが制限要因になる可能性があります。

例:対応する列データ型とMySQLサーバーにLONGTEXTとして送信されるデータがありますが、LONGTEXTデータの送信先のストアドプロシージャのパラメータのタイプはTEXTである可能性があります。この場合、パラメータのデータ型を更新する必要があります

0
Binod