MySQLのvarchar型で記事を読む漢字の数、数字、とvarchar(100)とvarchar(10)の違いを保存することができます

この記事を読んだ後、次の問題を見つけることができます。

図1に示すように、ここではvarchar(100)とvarchar(10)との間の差?

2、varchar型は漢字、数字の数を保存することができますか?

3、varchar型の最大の長さはどのくらいですか?

4文字、バイト、ビット間の関係?

5、どのように多くのバイトmysqlのフィールド型ストレージのニーズ?

その後、簡単にああを終えて、慎重に見てください。

図1に示すように、ここではvarchar(100)とvarchar(10)との間の差?

協会は、一般に、同じ占有スペースの両方の始まりと考えられています。【:実際のストレージは、よりバイト長を格納するために使用される場合VARCHAR不正確考え例えば、私は実際チャー5を占有しているどちらも5チャーを、格納されました。
しかし、両方として設計データベースでの綿密な外観、?
答えは使用する必要はありません[varchar型データの少なくとも一つまたは二つバイト長データを格納する前に]およびメモリの両方の動作次の例(実施例が具現化される、異なる子供リンク:見ます次の例。)
ユーザーはアドレス情報を格納する必要があります。査定限り、その上に100文字の使用に基づきます。しかし、いくつかのデータベース管理者は、とにかくvarcharデータ型は、実際のニーズに応じた長さに割り当てられている、と思われます。あなたにもそれを少し大きいを与えるかもしれません。この目的を達成するために、彼らは、かつてこのフィールドの200文字のためのストレージスペースを割り当てることができます。このVARCHAR(100)とVARCHAR(200)これは本当に同じ?

結果が否定的です。彼らは、データストレージ、同じメモリ空間の90個の文字に使用しましたが。しかし、メモリ消費のために異なっています。VARCHARデータ型、ハードディスク上のストレージスペースのために、ものの収納スペースは、実際の文字の長さに基づいて割り当てられますが、メモリのために、そうではありません。どの値を格納するメモリの固定サイズのブロックを使用しています。簡単に言えば、それは200の文字空間で定義された文字の種類の長さを使用することです。明らかに、この作品は、ソートまたは(メモリで実装する必要があるの)一時テーブル上の比較的大きな悪影響をもたらすだろう。説明することができますここで見つけますあなたが説明を表示したくない場合は、ここで私は、次の言うことを約午前:(その実際のハードディスクで占められているが、同じである)VARCHAR(100)とVARCHAR(200)タイプ、実際の堆積物90個の文字は、それがストレージ側に影響を与えることはありませんと仮定します。しかし、それは、MySQLが一時テーブル(SORT、ORDERなど)を作成するとき、VARCHARはCHARに変換されるため、変換後のCHARの長さがvarchar型の長さであり、メモリ内のスペースが大きくなると、クエリに影響を与えませんソートでは、より多くの時間統計が長く、スキャンする時間を必要としています。

だから、フィールドの一部は、ファイルやディスクベースの一時テーブル、アロケーションVARCHARデータ型は、あまりにも寛大まだできないソート関与するかどうか。実際のまたは所望の長さを評価し、その後、最長文字長を設定するためのフィールドを選択します。冗長性を検討するために、場合文字の長さの約10%を残してもよいです。私たちは、それは、ストレージスペースの実際の長さ、および無作為割り当ての長さに応じて割り当てられていると思う、または単に最大文字長を使用しないでください。
----------------------------------文字--------------- ---------------------------
1、メモリ空間は1時間に割り当てられているので、CHAR文字を使用し、破片の観点から考慮。この目的のために、フィールドの内容は、一緒に格納されています。この観点からシングル、その問題を抱えた破片は存在しません。可変長文字データ型の長さが可変の記憶です。変更前と後の場合には一貫性のないデータ長、断片化の必然的な問題が発生します。したがって、随時残骸を整理するために、データベース管理者を可変長文字データを使用。このようなデータベースのエクスポートとインポート操作を実行すると、破片を除去します。
図2に示すように、電界が比較的長い長さであるが、90〜100文字であっても同一の長さの間、一般的なように長さが、常に近似である場合、その長さは、類似しているかどうかを検討します。CHAR文字タイプの使用に適してこの時点で。典型的なアプリケーションは、MD5のハッシュ値です。使用して、ユーザーのパスワードを保存するためにMD5ハッシュ値を使用する場合は非常にCHAR文字タイプを使用します。それは同じ長さであるため。さらに、など、ユーザーのID番号を格納するように、一般的に我々は、データのCHAR型の使用をお勧めします。
また、この定義(1)2、CHAR(1)とVARCHARを問題を検討してください、それはどのような違いを作るのですか?両方が単一の文字のみを保存することができますが、VARCHAR CHARは、複数の保管場所を占めるが、 。データ・タイプVARCHARの使用は、複数のバイトと長さ情報を格納するために使用されるので、これは主にあります。経営のchar型の文字型のコストはありません。

--------------------------------- ----------------概要-----------------------------

ディスク・ストレージ・スペースの都合上どちらも同じです。2つの違いがあります。まず、固定長の可変長。メモリ内の第2の動作モードは、varchar型の方法は、メモリ操作の中で最長です。例えば、100の長さに応じてソートする時間は、varcahr(100)が行われます。

2、varchar型は漢字、数字の数を保存することができますか?

詳細なバージョンに依存、文字は、文字=(数字を含む)の文字が3つのバイトを使用し、3つのバイトを取り

バージョン4.0以下、VARCHAR(100)、を意味する100バイトの記憶UTF8文字の場合、33(各文字のための3バイト)を格納することができ、

上記5.0、VARCHAR(100)、を意味する100文字、格納された数字、文字または文字のUTF8(各文字のための3バイト)かどうか、100を格納することができます。

 

(数字を含む)の文字をコードUTF8は、3つのバイトを占有します

GBKは2バイト(数字を含む)の文字をエンコードします

 

3、varchar型の最大の長さはどのくらいですか?

最大長が65535であるが、それほどデータを格納することができるがVachar MySQLのフィールドタイプは、最大格納データ長(カラムの長さは、255を超える場合、2つの使用を宣言された1-2バイトを必要と65533であることが(長さを格納するバイトまたは非空のフィールドは、(非空のフィールドのみ65532に許可店舗IDに非ヌルバイト)として使用する場合1)バイトは、許可されていません)空でないバイトのメモリを節約します。

次のように行のバイト数を計算することができる:(参考文献:HTTPS://www.jianshu.com/p/ee1e4b14c5e7)を

フィールドがヌルでない場合: - 1バイト(LATIN1タイプ) - VARCHAR(65535)-2バイト(記憶領域の長さ、2人のオペレータによって)1(NULLバイト)= 65531バイトを使用することができます

1は、第二のバイト「で始まる行のメモリを削減するための実際の理由です。

フィールドが空の時間であってもよい:VARCHAR(65535)-2バイト(記憶領域の長さ、2人のオペレータにより) - 1バイト(LATIN1タイプ)= 65532バイトを使用することができます

最大バイト数、及び符号化モードに応じて、計算することができる文字の数を記憶することができます。

4文字、バイト、ビット間の関係?

1、ビット:
データ・ストレージの最小単位。各二進数字0または1ビットが1であり、
2バイト:
バイトを構成する8ビット。

すなわち:1バイト(バイト)= 8ビット(ビット)。

1キロバイト= 1024 B(バイト)
。1メガバイト= 1024キロバイト(2 ^ 10 B)
1ギガバイト= 1024 MBが、(2 ^ 20はBである)
1 = TB 1024ギガバイト;(2 ^ 30 B)

3、文字:

A、A、IN +、*、の......一つの文字を表し、
デジタル文字が属し、同じバイト文字を占め、一般的なUTF-8でエンコードされた次には、漢字文字が3つのバイトを占めます。
一般的にエンコーディングをGBK、漢字は2つのバイトを占有。

5、どのように多くのバイトmysqlのフィールド型ストレージのニーズ?

デジタルタイプ

列タイプ 必要なストレージの量
TINYINT 1つのバイト
SMALLINT 2つのバイト
MEDIUMINT 3バイト
INT 4つのバイト
INTEGER 4つのバイト
BIGINT 8つのバイト
FLOAT(X) 4の場合X <= 24、又は8、もし25 <= X <= 53
FLOAT 4つのバイト
DOUBLE 8つのバイト
DOUBLE PRECISION 8つのバイト
REAL 8つのバイト
DECIMAL(M,D) Mバイト(D+2場合M < D
NUMERIC(M,D) Mバイト(D+2場合M < D

 日付と時刻タイプ

列タイプ 必要なストレージの量
DATE 3バイト
DATETIME 8つのバイト
TIMESTAMP 4つのバイト
TIME 3バイト
YEAR 1つのバイト

 文字列型

列タイプ 必要なストレージの量
CHAR(M) Mバイト、1 <= M <= 255
VARCHAR(M) Lこの中に+ 1バイト、L <= Mおよび1 <= M <= 255
TINYBLOB、 TINYTEXT Lこの中に+ 1バイト、L<2 ^ 8
BLOB、 TEXT Lここでは+ 2バイト、L<2 ^ 16
MEDIUMBLOB、 MEDIUMTEXT L+ 3バイト、L<2 ^ 24
LONGBLOB、 LONGTEXT Lこの4バイトL<2 ^ 32
ENUM('value1','value2',...) 番号1または列挙値に応じて2バイト(最大65535)
SET('value1','value2',...) 3、4、または8バイト(64人のメンバーまで)セットメンバーの数に応じて

テキストは画像を保存することはできません:テキストとブロブの違い。ブロブは、バイナリストリーム、テキスト非バイナリです。

MySQLのバイナリデータ型BINARY、VARBINARY、BLOBがない文字セットのコンセプト。

おすすめ

転載: www.cnblogs.com/zhuyeshen/p/11642211.html