MySQLのVARCHARサイズについて

正確な最大長がわからないときの最小かつ十分なサイズの値ってどう決めるのが良いのだろうーと思ってつぶやいてみたところ、多くの方々に返信いただけました。ありがとうございます。
17
すぎゃーん💯 @sugyan

varchar(...) にどんな数字をいれておくのがいいのか悩む。「これくらいの範囲の長さがくると想定しているならこの値にしておけ」みたいな指標はあるのかしら。十分かつ最小の2のn乗の値にしておく、とか? #mysql

2010-09-27 22:48:36
すぎゃーん💯 @sugyan

255でも256でもパフォーマンス的に大きな違いはないと思うのだけど なんか「こういう理由でこっちを選ぶんだよ!」みたいのが欲しい。。

2010-09-27 22:55:41
Sig. @sigwyg

@sugyan てきとーに大きめな数字入れて、運用見て切るとか。

2010-09-27 22:57:27
SH2 @sh2nd

UTF-8で255か256かのところにオーバーフローページ利用有無の境目があります。 http://bit.ly/94z5BV RT @sugyan: 255でも256でもパフォーマンス的に大きな違いはないと思うのだけど なんか「こういう理由でこっちを選ぶんだよ!」みたいのが欲し

2010-09-27 22:57:38
SH2 @sh2nd

256と257の間かも>< RT @sh2nd: UTF-8で255か256かのところにオーバーフローページ利用有無の境目があります。 http://bit.ly/94z5BV RT @sugyan: 255でも256でもパフォーマンス的に大きな違いはないと思うのだけど...

2010-09-27 22:58:44
SH2 @sh2nd

そのへんにUNIQUE INDEXが作れるかどうかの境目もあります RT @sh2nd: 256と257の間かも>< RT @sh2nd: UTF-8で255か256かのところにオーバーフローページ利用有無の境目があります。 http://bit.ly/94z5BV RT...

2010-09-27 23:01:38
haruta makoto @haruta_makoto

@sugyan 複合インデックスを貼る時に長さが問題になる事があるので、少ない方が良い気がしますが。どうなんですかね。。。

2010-09-27 23:04:12
haruta makoto @haruta_makoto

@sugyan UTF8の256の長さとdatetimeカラムで複合ユニークにしようとしたらできませんでした

2010-09-27 23:05:47
Sig. @sigwyg

MySQL のデータ長って、ブロックサイズの等倍にすると良かったような。シーク回数とか分割時とか。ちょっといま手元に本がないけど(移動中

2010-09-27 23:09:47
Ryuta Kamizono @kamipo

@sugyan 256よりは255のほうがいいです。varcharはlengthを最初に保存していて255は1バイトですが256だと2バイト必要になってしまうので。

2010-09-27 23:11:11
haruta makoto @haruta_makoto

@sugyan あ、mysqでlの話です。あと、sort buffer あたりの使い方のあたりでもバイト数が関係するとききました。なので、考え得る最大?で少ない方がいいのかな。と。

2010-09-27 23:13:16
SH2 @sh2nd

UNIQUE INDEX張れるのVARCHAR(255)までだった

2010-09-27 23:14:51
すぎゃーん💯 @sugyan

@sh2nd ありがとうございます! 768byte目までとそれ以降が違う扱いになる、ということですかね…? そうすると255にしておくべき理由にはなりそうですね。

2010-09-27 23:16:06
すぎゃーん💯 @sugyan

@kamipo たしかに! そこの境目はありますね。ありがとうございます。 では100文字程度のものが入りそう、というときだとどういう値がいいですかね… 128とかでもなく、150とか200とかとっちゃうのがキリがいいでしょうか ><

2010-09-27 23:18:03
SH2 @sh2nd

そうです→「768byte目までとそれ以降が違う扱い」 RT @sugyan: @sh2nd ありがとうございます! 768byte目までとそれ以降が違う扱いになる、ということですかね…? そうすると255にしておくべき理由にはなりそうですね。

2010-09-27 23:22:22
すぎゃーん💯 @sugyan

@haruta_makoto ありがとうございます。少ないにこしたことはない、とは分かっているのですが、最大サイズが正確にはわからない、という場合にどういう値にしておくのがちょうどいいのか、という疑問でした。255と256という例はよくなかったかもしれません ><

2010-09-27 23:24:08
Ryuta Kamizono @kamipo

@sugyan 100文字程度のものが入りそう、ならとりあえず考えを保留する意味で僕は255にしておきますが、基本的には何文字まで許可するのか決めて、その値にすると思います!

2010-09-27 23:24:55
すぎゃーん💯 @sugyan

255と256では諸処の理由から255にしておくべきだと納得しました。 僕が最初に思った疑問は「20〜50文字くらいだと思うけどもうちょっと長くなるかも。でも100文字にはならない」というくらいの微妙な想定のときにみなさんどうするんだろう?ということでした ><

2010-09-27 23:27:24
haruta makoto @haruta_makoto

@sugyan あー、なるほど。どうなんでしょう。自分は32,64,255で適当に決めてしまいます。

2010-09-27 23:29:55
のりぃ @m_norii

自分は悩むの面倒なので、一律255、それ以上になりそうならtext型にしてます。でも根拠レスなので、有識者の見解が知りたい。ちなみにInnoDB。 RT: @sugyan: varchar(...) にどんな数字をいれておくのがいいのか悩む。 #mysql

2010-09-27 23:30:06
SH2 @sh2nd

@sugyan Twitterのタイムライン格納するとき、私はVARCHAR(140)で作りましたが @sakaik さんがVARCHAR(255)で作ってました。とりあえず悩んだら全部255にするという方針は一つあると思います

2010-09-27 23:36:07
すぎゃーん💯 @sugyan

想定最大長に応じて 20 / 50 / 100 / 255 くらいの数字をつかってみようと思います!

2010-09-27 23:46:05