2016-03-23 7 views
-2

MsSQL/Accessデータベースでは、長さ100のvarcharを宣言すると、その列に1つの文字しかない場合でも、すべての行が100個の文字を宣言していると聞きました。Mysqlのメモリ効率と型宣言

私はこれについて2つの質問があります。 まず、これは本当ですか?そしてもしそうなら、これはMySQLでも同様に動作しますか?私はこの求めているのはなぜ

を私はMySQLでたくさん働いている、と私は128 LONGTEXT-列を持つテーブルのデータベースに出くわしました。この背後にある理由は、「これらの列にどれだけのデータが格納されているかわからないことがあります。私はこれがストレージワイズの正しい方法であるのか、何か変更を加えなければならないのか疑問に思っていました。

+0

これはどういう意味ですか? "それはそれらの100の文字をすべての行"と宣言しますか? –

+0

MySQLのようには動作しません。これは、文字列(たとえば30)に必要なバイト数を割り当ててから、長さを保持する最後に1バイトを追加します。私は他の2つのシステムの内部については分かりませんが、同じように動作すると思います。 – Mjh

答えて

2
  1. CHARが固定長である間は、VARCHARは、可変長テキストを意味します。 numberパラメーターはテキストの文字制限ですが、VARCHARはその行に入力した実際の文字(使用された長さを格納するためにいくつかのバイト)と同じだけスペースを使います。

  2. MySQL、Microsoft SQL Serverとほぼすべてのリレーショナルデータベースは、VARCHARと同じ方法で動作します。すべての列は一行に最低限のスペースを占めますが、VARCHARとすると、テキストの長さを格納するためにテキスト+バイトを格納するバイトになります。テキストが入力されていない場合は、長さとして '0'を保存するために使用される1または2バイトだけを意味します。

  3. 入力するテキストデータの量がわからない場合は、MySQLではLONGTEXT、MS-SQLではNVARCHAR(MAX)を使用してください。このデータ型を使用すると、無制限の量のテキストを効率的に格納できます(データベース自体の行サイズ制限まで)。それは標準のVARCAHRのより大きい、無限の長さのバージョンです。

1

SQL Serverの場合、答えはいいえです。 [(|最大n)]

可変長、非Unicode文字列データ

varchar型:documentation on MSDNから。 n は文字列の長さを定義し、1〜8,000の値にすることができます。最大 は、最大ストレージサイズが2^31-1バイト(2 GB)であることを示します。 格納サイズは、入力されたデータの実際の長さ+ 2バイトです。 varcharのISO同義語は、可変文字または可変文字です。

誰かがVARCHARとCHARを混乱させる可能性があります。 CHARデータ・タイプには、最大許容サイズに基づいて、一定量のストレージが必要です。私はあなたの意味を追ってきた全くわからないんだけど、あなたの質問を読み直す

EDIT

。必要なストレージスペースを参照していない場合は、無視してください。