データベースフィールドの保存可能な長さの設定が小さすぎるため、設定された文字型の保存制限に達し、エラーが発生し、データ保存に一般的に使用されるデータ型が発生しました。

プロジェクトのシナリオ:

提示:这里简述项目相关背景:

MySQLデータベースを使用している場合、データベースフィールドの格納長の設定が小さすぎるため、設定した文字型の格納制限に達し、データ格納時にエラーが発生します

問題の説明

提示:这里描述项目中遇到的问题:

データベース フィールドの記憶域長の設定が小さすぎるため、データ記憶域でエラーが報告され、次のようなエラー メッセージが表示されます。

Cause: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Data too long for column 'remark' at row 1


原因分析:

ヒント: ここに質問の分析を入力します。

データベースフィールドに格納できる文字長の設定が小さすぎます。フィールドの格納タイプが適切なタイプとして選択されておらず、異なるデータタイプで格納される文字長が異なります。
ここに画像の説明を挿入
したがって、データベース内のフィールドに適切な記憶域スペースを設定する必要があります。そうしないと、記憶域の障害やスペースの無駄が発生します。

解決:

ヒント: ここに問題の具体的な解決策を入力します。

実際のニーズに応じて、適切なフィールド タイプを選択し、適切な文字長を設定する必要があります。

要約:

フィールドタイプの設計と選択

1. 1 つのテーブルにフィールドが多すぎてはなりません*

最大 30 を推奨します

フィールドが増えるとパフォーマンスが低下し、開発の難易度が上がります。

**

2. 小さくてシンプルな適切なデータ型を使用します*

a. 文字列型

固定長にはcharを使用し、非固定長にはvarchar を使用し、適切かつ十分なスペースを割り当てます。

charをクエリすると、末尾のスペースが削除されます

b. 10進数タイプ

一般に、 floatまたはdoubleを使用すると、占有スペースが少なくなりますが、ストレージの精度が失われる可能性があります。

Decimal は正確な小数を保存できます。財務データや経度の要件を保存する場合は 10 進数を使用してください。

c. 日時

通常は、 timestampを使用するようにしてください。これは、使用するスペースが少なく、タイムゾーンが自動的に変換されるため、地域の時差を気にする必要がありません。

datetimetimestamp は最小単位である秒のみを保存できますが、BIGINT 型を使用してタイムスタンプをマイクロ秒レベルで保存できます。

d. ビッグデータ BLOB とテキスト

blobtext は、非常に大きなデータを保存するために設計された文字列データ型ですが、通常は使用しないことをお勧めします。

MySQL は各BLOBテキストを独立したオブジェクトとして扱い、ストレージ エンジンは格納時に特別な処理を実行します。値が大きすぎる場合、InnoDB はストレージに専用の外部ストレージ領域を使用し、ポインタを行に格納してから格納します。外部の実際の値。これらは重大なパフォーマンスのオーバーヘッドを引き起こす可能性があります

BLOB はバイナリ文字列、テキストは非バイナリ文字列であり、どちらも大量の情報を格納できます。BLOB は主に画像、音声情報などを保存しますが、Text はプレーン テキスト ファイルのみを保存できます。

3 番目に、列を NOT NULL に設定してみます。

a. NULL にできる列にインデックスを付けると、より多くの記憶領域が必要になるため、一般に、NULL にできる列を NOT NULL に変更しても、あまり改善されません。

b. NULL になる可能性のあるカラムの場合、MySQL はインデックスと値の比較を使用するときに特別な処理を実行する必要があり、これによりある程度のパフォーマンスが消費され、最適化がより困難になります。

提案: NULL 値を本当に格納する必要がない限り、通常は列を NOT NULL として指定することが最善です。

4.主キーとして整数を使用してみます

a. 通常、整数型は高速でAUTO_INCREMENTを使用できるため、ID 列には最適な選択です。

b. 文字列型はスペースを消費し、一般に数値型よりも遅いため、ID 列としては使用しないでください。

c. 完全に「ランダム」な文字列についても、さらに注意が必要です。例: MD5()、SHAI()、または UUID() によって生成された文字列。これらの関数によって生成された新しい値も広い領域に任意に分散されるため、INSERT ステートメントや一部の SELECT ステートメントが遅くなる可能性があります。

5. データ型と対応する長さの設定

テーブルの各列には対応するデータ型があり、そのデータ型によってその列に格納されるデータが制限されます (または許可されます)。
一般的なデータ型は、文字列、数値、日付と時刻、バイナリ データ型です。
ここに画像の説明を挿入
(1)、文字列データ型
ここに画像の説明を挿入
(2)、数値データ型
ここに画像の説明を挿入
(3)、日時データ型
ここに画像の説明を挿入
(4)、バイナリ データ型
ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/YHLSunshine/article/details/129388628