WikiページURLを、VARCHAR( 255 ) に格納しようとするも途中までしか格納されない


**Wikiページのように長いURLを、MySQLのVARCHAR( 255 ) に格納したら途中で切れてしまいました**  
・とりあえずTEXT型カラムへ変更して格納しましたが、通常は何のデータ型カラムに格納するものなのでしょうか？

・VARCHAR( 255 )と、TINYTEXTは同じ？  
・TEXT型はバイト数指定した方が良い？  
・BLOB型？

**知りたいこと**  
・それぞれのデータ型のメリットデメリット  
・バイト数を指定するメリットデメリット




> ・とりあえずTEXT型カラムへ変更して格納しましたが、通常は何のデータ型カラムに格納するものなのでしょうか？

HTTP/1.1 の仕様を定めた RFC 2616 では、URIの長さは制限がないことになっています。  
<http://www.spencernetwork.org/reference/rfc2616-ja-HTTP1.1.txt>

とはいえ無限の容量を持つ型はありませんので、「ほぼほぼカバーできるだろう」という長さにしておいた方がよさそうです。

通常がどうなのかはちょっとわかりませんが、私なら VARCHAR(8190) くらいにするでしょうか。Apache
が受け付けられるURLの長さがデフォルト8190バイトなので。  
<http://httpd.apache.org/docs/2.4/mod/core.html#limitrequestline>

なお、どの程度の長さのURLが許容されるかというのはブラウザにも依存するので、これが正解というのはなかなか難しいです。不安であればVARCHARの最大値（65,535）でもいいのではないでしょうか。

> ・VARCHAR( 255 )と、TINYTEXTは同じ？

型が違うので同じではないですが、データ記録時に必要となる容量は同じ（指定された文字列値のバイト数+1）ようです。  
<http://mysql.stu.edu.tw/doc/refman/5.1-olh/ja/storage-requirements.html>

> ・TEXT型はバイト数指定した方が良い？

指定できないような？

> ・BLOB型？

バイナリデータ（画像、音楽、動画、など）を格納するための型です。  
<http://mysql.stu.edu.tw/doc/refman/5.1-olh/ja/blob.html>




> ・とりあえずTEXT型カラムへ変更して格納しましたが、通常は何のデータ型カラムに格納するものなのでしょうか？

HTTP/1.1 の仕様を定めた RFC 2616 では、URIの長さは制限がないことになっています。  
<http://www.spencernetwork.org/reference/rfc2616-ja-HTTP1.1.txt>

とはいえ無限の容量を持つ型はありませんので、「ほぼほぼカバーできるだろう」という長さにしておいた方がよさそうです。

通常がどうなのかはちょっとわかりませんが、私なら VARCHAR(8190) くらいにするでしょうか。Apache
が受け付けられるURLの長さがデフォルト8190バイトなので。  
<http://httpd.apache.org/docs/2.4/mod/core.html#limitrequestline>

なお、どの程度の長さのURLが許容されるかというのはブラウザにも依存するので、これが正解というのはなかなか難しいです。不安であればVARCHARの最大値（65,535）でもいいのではないでしょうか。

> ・VARCHAR( 255 )と、TINYTEXTは同じ？

型が違うので同じではないですが、データ記録時に必要となる容量は同じ（指定された文字列値のバイト数+1）ようです。  
<http://mysql.stu.edu.tw/doc/refman/5.1-olh/ja/storage-requirements.html>

> ・TEXT型はバイト数指定した方が良い？

指定できないような？

> ・BLOB型？

バイナリデータ（画像、音楽、動画、など）を格納するための型です。  
<http://mysql.stu.edu.tw/doc/refman/5.1-olh/ja/blob.html>

