[解決済み】SQLでVARCHARよりCHARを選択するユースケースは何ですか?
質問
すべての値が固定幅の場合、CHARが推奨されることは承知しています。しかし、だから何ですか?安全のために、すべてのテキストフィールドにVARCHARを選択してはいかがでしょうか。
どのように解決するのですか?
一般的なルールは、以下の通りです。 CHAR に近い値を持つ行がある場合、その行は 同じ長さ . ピック VARCHAR (または NVARCHAR を指定した場合 長さが異なる を大幅に削減することができます。 CHARはまた、すべての行が同じ長さであるため、少し速くなることがあります。
DBの実装によって異なりますが、一般的にはVARCHAR(または NVARCHAR ) は、実際のデータに加えて、(長さや終端のために)さらに1〜2バイトのストレージを使用します。 つまり、(1バイト文字セットを使用していると仮定して)"FooBar"という単語を格納することになります。
- CHAR(6) = 6バイト (オーバーヘッドなし)
- VARCHAR(100) = 8バイト (2バイトのオーバーヘッド)
- CHAR(10) = 10バイト (4バイトの無駄)
一番下の行は CHAR 可 である より速く そして、より スペース効率 比較的同じ長さのデータ(2文字以内の長さの差)の場合。
備考 : Microsoft SQLでは、VARCHARに対して2バイトのオーバーヘッドがあります。これはDBによって異なるかもしれませんが、一般的にVARCHARの長さやEOLを示すために少なくとも1バイトのオーバーヘッドが必要です。
で指摘されたように ゲイブン をコメントで紹介しました。になると、状況が変わってきます。 マルチバイト文字 セットで、VARCHAR がより良い選択となるケースです。
の宣言長についての注意点です。 VARCHAR : 実際のコンテンツの長さを保存するので、未使用の長さを無駄にすることはありません。つまり、6文字を varchar(6)、varchar(100)です。 または VARCHAR(MAX) は同じ量のストレージを使用します。を使用する場合の違いについて、詳しくはこちらをご覧ください。 VARCHAR(MAX) . を宣言します。 最大 のサイズをVARCHARで指定し、保存する量を制限します。
コメントで いつでも学習 が指摘されています。 Microsoft Transact-SQL docs は、逆のことを言っているように見えます。これは誤りであるか、少なくともドキュメントが不明瞭であることを示唆しています。
関連
-
[解決済み】CREATE VIEW は、バッチ内の唯一のステートメントでなければなりません。
-
[解決済み] 1行目4列目(年)の一括読み込みデータ変換エラー(型の不一致または指定したコードページに対して無効な文字)
-
[解決済み] MySQLの複数行を1つのフィールドに連結することはできますか?
-
[解決済み] 最初の行への結合方法
-
[解決済み] T-SQLでnot equalには!=と<>のどちらを使うべきですか?
-
[解決済み] DISTINCTでCOUNT(*)を選択する
-
[解決済み] SQL Server Management Studio & Transact SQLにおけるGOの使用方法とは?
-
[解決済み] T-SQL文の接頭辞Nの意味と使うべきタイミングは?
-
[解決済み] VARCHARとCHARの違いは何ですか?
-
[解決済み】SQL、PL-SQL、T-SQLの違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 列名または提供された値の数がテーブル定義と一致しない
-
[解決済み] varchar データ型から datetime データ型に変換すると、SQL クエリで範囲外の値が発生する
-
[解決済み】2つの列を分割する方法は?
-
[解決済み】PL/SQL SELECTに複数のCOUNT(DISTINCT xxx)を指定すると、予期しない結果になる。
-
[解決済み】データベースへの「ネイティブ」SQL接続を使用するとはどういう意味ですか?
-
[解決済み] INSERT ステートメントが FOREIGN KEY 制約と競合する - SQL Server
-
[解決済み] ''付近の構文が正しくない
-
[解決済み] INSERT ステートメントが FOREIGN KEY 制約と競合する - SQL Server
-
[解決済み] pg_restoreです。[archiver] 入力ファイルはテキスト形式のダンプであるように見えます。psql を使用してください。
-
[解決済み】DateTimeをVarCharに変換する方法