web-dev-qa-db-ja.com

URLに最適なデータベースフィールドタイプ

MySQLのテーブルにURLを保存する必要があります。不定長のURLを保持するフィールドを定義するためのベストプラクティスは何ですか?

320
  1. 一般的なWebブラウザの中で最も一般的な分母の最大URL長:2,083(Internet Explorer)

  2. http://dev.mysql.com/doc/refman/5.0/en/char.html
    VARCHARカラムの値は可変長文字列です。長さはMySQL 5.0.3より前では0から255まで、5.0.3以降のバージョンでは0から65,535までの値として指定できます。 ] MySQL 5.0.3以降でのVARCHARの有効最大長は、最大行サイズ(65,535バイト、これはすべての列で共有されます)および使用される文字セットによって異なります。

  3. そう ...
    <MySQL 5.0.3 useTEXT
    または
    > = MySQL 5.0.3を使用するVARCHAR(2083)

303
micahwittman

VARCHAR(512)(または同様のもの)で十分なはずです。ただし、問題のURLの最大長は実際にはわかりませんので、TEXTに直接アクセスしてください。これによる危険性はもちろん、CLOBVARCHARのような単純な文字列データ型よりはるかに遅いために効率が低下することです。

31
Daniel Spiewak

SQLServer2005の場合はvarchar(max)

MySQL 5.0.3以降の場合はvarchar(65535)

これにより必要に応じてストレージが割り当てられ、パフォーマンスには影響しません。

16
Bob Probst

URLが使用される頻度と実際に必要なかどうかに基づいて、TEXT列とVARCHAR列のどちらかを選択する必要があります。バインド解除される長さ.

---VARCHARをmaxlength> =2,083として micahwittman もしあれば

  1. クエリごとに多くのURLを使用します(TEXT列とは異なり、VARCHARは行とインラインで格納されます)。
  2. あなたは、URLが65,535バイトの行制限を決して超えないことを確信しています。

次の場合は、TEXTを使用してください。

  1. URLは実際には65,535バイトの行制限を超える可能性があります。
  2. あなたの質問は一度に(または非常に頻繁に)たくさんのURLを選択または更新することはありません。これは、TEXTカラムがポインタをインラインで保持しているだけなので、参照されているデータの検索に含まれるランダムアクセスは面倒なことがあるためです。
9
mrgrieves

VARCHARは、ASCII文字エンコーディングで使用する必要があります。 URLはパーセントエンコードされており、国際ドメイン名はpunycodeを使用しているため、ASCIIを格納するのに十分です。これはUTF8よりはるかに少ないスペースを使用します。

VARCHAR(512) CHARACTER SET 'ascii' COLLATE 'ascii_general_ci' NOT NULL
9
Flavio Tordini

これは本当にあなたのユースケースに依存します(以下を見てください)、TEXTとして保存することはパフォーマンス上の問題を抱えています、そして、VARCHARという巨大なものは大抵の場合やり過ぎのようです。

私のアプローチ:VARCHAR(500)のように寛大ではあるが不当に大きくないVARCHARの長さを使用し、より大きなURLを必要とするユーザーにはsafe.mnのようなURL短縮を使用するよう勧めます。

Twitterのアプローチ:本当に素敵なUXのためには、長すぎるURLのための自動URL短縮を提供し、末尾に省略記号付きのURLの断片としてリンクの "表示バージョン"を保存してください。 (例:http://stackoverflow.com/q/219569/1235702stackoverflow.com/q/21956...として表示され、短縮されたURL http://ex.ampl/e1234にリンクします)

注意と警告

  • 当然のことながら、Twitterのアプローチはより優れていますが、私のアプリのニーズに対しては、URL短縮を推奨するだけで十分です。
  • URL短縮サービスには、セキュリティ上の問題などの欠点があります。私の場合は、URLが一般公開されておらず、あまり使用されていないため、大きなリスクにはなりません。しかし、これは明らかに誰にとってもうまくいかないでしょう。 safe.mnは多くのスパムやフィッシングURLをブロックしているように見えますが、それでも注意が必要です。
  • ユーザーにURL短縮機能を強制してはいけないことに注意してください。ほとんどの場合(少なくとも私のアプリの必要性のために)、500文字はほとんどのユーザーがそれを使用することになるには過度に十分です。 過度に長いリンクにはURL短縮名のみを使用/推奨します。
4
CullenJ

ほとんどのブラウザでは、 RLに大量のデータが入ります と入力することができます。したがって、URLのドメイン部分以外のことについて話している場合は、非常に大きなURLが作成されます。 VARCHAR/CHARは制限されています からTEXT列を使用する。

4
carson

私は他のブラウザについては知りませんが、 IE7はHTTP GET操作に対して2083文字の制限があります 。他のブラウザに下限がない限り、2083以上の文字が必要な理由はわかりません。

3
matt b

ほとんどのWebサーバーにはURLの長さの制限があり(これが "URI too long"のエラーコードがある理由です)、実用的な上限サイズがあることを意味します。最も人気のあるWebサーバーのデフォルトの長さ制限を見つけ、それらのうち最大のものをフィールドの最大サイズとして使用します。それは十分以上であるべきです。

1
CesarB

varchar(max) これは(サイズの観点から)varchar (65535)を意味します。これはあなたのより大きなウェブアドレスを保存するでしょうし、あなたのスペースも節約するでしょう。

Max指定子は、varchar、nvarchar、およびvarbinaryデータ型の記憶容量を拡張します。 varchar(max)、nvarchar(max)、およびvarbinary(max)は、まとめて大きな値のデータ型と呼ばれます。大きな値のデータ型を使用して、最大2 ^ 31-1バイトのデータを格納できます。

大規模データ型の使用の使用方法については、TechNetの この記事 を参照してください。

0
sohaiby