MySQLのテーブルにURLを保存する必要があります。不定長のURLを保持するフィールドを定義するためのベストプラクティスは何ですか?
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バイト、これはすべての列で共有されます)および使用される文字セットによって異なります。そう ...
<MySQL 5.0.3 useTEXT
または
> = MySQL 5.0.3を使用するVARCHAR(2083)
VARCHAR(512)
(または同様のもの)で十分なはずです。ただし、問題のURLの最大長は実際にはわかりませんので、TEXT
に直接アクセスしてください。これによる危険性はもちろん、CLOB
がVARCHAR
のような単純な文字列データ型よりはるかに遅いために効率が低下することです。
SQLServer2005の場合はvarchar(max)
MySQL 5.0.3以降の場合はvarchar(65535)
これにより必要に応じてストレージが割り当てられ、パフォーマンスには影響しません。
URLが使用される頻度と実際に必要なかどうかに基づいて、TEXT列とVARCHAR列のどちらかを選択する必要があります。バインド解除される長さ.
---VARCHARをmaxlength> =2,083として micahwittman もしあれば
次の場合は、TEXTを使用してください。
VARCHARは、ASCII文字エンコーディングで使用する必要があります。 URLはパーセントエンコードされており、国際ドメイン名はpunycodeを使用しているため、ASCIIを格納するのに十分です。これはUTF8よりはるかに少ないスペースを使用します。
VARCHAR(512) CHARACTER SET 'ascii' COLLATE 'ascii_general_ci' NOT NULL
これは本当にあなたのユースケースに依存します(以下を見てください)、TEXT
として保存することはパフォーマンス上の問題を抱えています、そして、VARCHAR
という巨大なものは大抵の場合やり過ぎのようです。
私のアプローチ:VARCHAR(500)
のように寛大ではあるが不当に大きくないVARCHAR
の長さを使用し、より大きなURLを必要とするユーザーにはsafe.mn
のようなURL短縮を使用するよう勧めます。
Twitterのアプローチ:本当に素敵なUXのためには、長すぎるURLのための自動URL短縮を提供し、末尾に省略記号付きのURLの断片としてリンクの "表示バージョン"を保存してください。 (例:http://stackoverflow.com/q/219569/1235702
はstackoverflow.com/q/21956...
として表示され、短縮されたURL http://ex.ampl/e1234
にリンクします)
注意と警告
ほとんどのブラウザでは、 RLに大量のデータが入ります と入力することができます。したがって、URLのドメイン部分以外のことについて話している場合は、非常に大きなURLが作成されます。 VARCHAR/CHARは制限されています からTEXT列を使用する。
私は他のブラウザについては知りませんが、 IE7はHTTP GET操作に対して2083文字の制限があります 。他のブラウザに下限がない限り、2083以上の文字が必要な理由はわかりません。
ほとんどのWebサーバーにはURLの長さの制限があり(これが "URI too long"のエラーコードがある理由です)、実用的な上限サイズがあることを意味します。最も人気のあるWebサーバーのデフォルトの長さ制限を見つけ、それらのうち最大のものをフィールドの最大サイズとして使用します。それは十分以上であるべきです。
varchar(max) これは(サイズの観点から)varchar (65535)
を意味します。これはあなたのより大きなウェブアドレスを保存するでしょうし、あなたのスペースも節約するでしょう。
Max指定子は、varchar、nvarchar、およびvarbinaryデータ型の記憶容量を拡張します。 varchar(max)、nvarchar(max)、およびvarbinary(max)は、まとめて大きな値のデータ型と呼ばれます。大きな値のデータ型を使用して、最大2 ^ 31-1バイトのデータを格納できます。
大規模データ型の使用の使用方法については、TechNetの この記事 を参照してください。