11623


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

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

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


CC BY-SA 3.0
2015-06-23T00:26:40.990
11621
2015-06-23T09:05:28.590
7886
question
mysql
WikiページURLを、VARCHAR( 255 ) に格納しようとするも途中までしか格納されない


> ・とりあえず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>


CC BY-SA 3.0
2015-06-23T01:02:15.730
11623
2015-06-23T01:14:20.447
2015-06-23T01:14:20.447
76
9801
11621
answer


VARCHAR と TEXT の違いなら昔下記のような記事を書きました

[VARCHAR と ～TEXT の違い - ngの日記](http://ngyuki.hatenablog.com/entry/20110804/p1
"VARCHAR と 〜TEXT の違い - ngの日記")

VARCHAR で指定するものは『文字数』  
TEXT は型ごとに『バイト数』が決まってます


CC BY-SA 3.0
2015-06-23T05:26:23.340
11629
2015-06-23T05:26:23.340
2494
11621
answer


現在URLの長さ制限に関する規定は取り決められていません。

RFC 7230～7237に置き換えられる前の RFC 2616(Hypertext Transfer Protocol -- HTTP/1.1)  
<http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.2.1>  
ここでは無制限とした後で注意書きとして古いブラウザ対応の為に255以下推奨としてありますが、  
置き換えられた後は255以下の記述がありません。  
(昔は某ブラウザの対応が255迄だったのです。)

サーバー側の受け付ける長さは設定で無制限に変更できるので  
ブラウザ側を参考にしてみてはどうでしょうか？

<https://support.microsoft.com/ja-jp/kb/208427/ja>  
<http://logicalerror.seesaa.net/article/383427331.html>  
制限の厳しいIEは最大2,083文字です。  
WEB関係の制作でIEの対応を無視するとは考え難いのでこれを参考値として  
文字コードやURLエンコードの差分を考慮して決めれば良いかと思います。

型についてはこの辺りを参照してみてください。  
<http://ftp.stu.edu.tw/Unix/Database/Mysql/doc/refman/5.1-olh/ja/blob.html>  
<http://ftp.stu.edu.tw/Unix/Database/Mysql/doc/refman/5.1-olh/ja/string-
types.html>  
<http://www.dbonline.jp/mysql/type/>


CC BY-SA 3.0
2015-06-23T09:05:28.590
11639
2015-06-23T09:05:28.590
9262
11621
answer