MySQLのデータが列に対して長すぎます...(エラー番号1406)およびデータが列に対して切り捨てられました...(エラー番号1265)



Mysql Appears Data Too Long



1406エラー

すでにデータを書き込んでいるデータベース内のテーブルが変更され、結果は次の図になります。

画像



1406によって引き起こされるエラーには多くの理由があります。 私のエラーの理由は、データ情報が長すぎて元の割り当てデータベースの対応するフィールドの最大スペースを超えることができないためです。これは、割り当てられたフィールドスペースを増やすことで解決されます。 例:varchar(5)の「88888888」を格納します。これは不可能です。 varchar(300)など、フィールドにより多くのスペースを割り当てる必要があります。


それでも問題を解決できない場合は、この手順を試してみる価値があります( ブログから ):



1.データベース内のフィールドの長さが小さすぎないか(フィールドタイプが文字列タイプ(varchar、char)の場合)、フィールドの長さが長くなる限り小さすぎないかどうかを確認しますが、テーブルを圧縮する必要がある場合、mysqlのテーブルのvarcharは65535を超えることはできません。

2.フィールドタイプがテキストの場合は、データベースのinnodb_file_format形式を確認します

mysql>「%format%」のような変数を表示します
±-------------------------±------------------ +
| Variable_name |値|
±-------------------------±------------------ +
| binlog_format |ステートメント|
| date_format | %Y-%m-%d |
| datetime_format | %Y-%m-%d%H:%i:%s |
| default_week_format | 0 |
| innodb_file_format |バラクーダ|
| innodb_file_format_check |オン|
| innodb_file_format_max |アンテロープ|
| time_format | %H:%i:%s |
±-------------------------±------------------ +



innodb_file_formatをBarracudaに変更する必要がありますこのモードは行の圧縮に関連している必要があります

次のように実行します。

1. Linuxでmysql構成ファイル(/etc/my.cnf内)を開き、以下を追加します。

innodb_file_format =バラクーダ

2:データベースで実行します。

SET GLOBAL innodb_file_format = Barracuda

ALTER TABLE [tableName]
ENGINE = InnoDB //テーブルストレージエンジン
ROW_FORMAT = COMPRESSED //行形式、DEFAULT(デフォルト)、FIXED(混合)、DYNAMIC(動的)、COMPRESSED(圧縮)、REDUNDANT(長い)、COMPACT(コンパクト)
KEY_BLOCK_SIZE = 8 // InnoDBのバッファープールのインデックスページを圧縮します


1265エラー

画像

このエラーには多くの理由が考えられますが、いくつかの操作を行った後、常にこのエラーが発生していることがわかりました。文字通り、間違ったデータが挿入されているか、指定したフィールド(エラーで表示されます)を意味します。定義の長さが十分ではありません。保存したデータは切り捨てられました

エラーの原因はまだフィールド定義の長さが十分ではないことがわかりました。理由は1406エラーと同じです。

そのような問題は常にあります、私たちは問題の発生を防ぐために最初からそれを熟考する必要があります

解決:
(1)テーブルを設計するときは、各フィールドのデータ型と、nullが許可されるかどうかを考慮してください。
(2)データテーブル内のすべてのデータを削除してから、テーブルにフィールドを追加します。データを削除しない場合はフィールドを空に設定できません。Nullnullを許可するように設定する必要があります。そうしないと、エラーが発生します。既存のデータに新しい非nullフィールドがないため、報告されます。

みんなの問題を解決し、一緒に進歩していきたいです!