🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

Q&A

解決済

3回答

5509閲覧

varcharの文字数の基準

haru99

総合スコア6

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

0グッド

1クリップ

投稿2019/12/21 05:18

前提・実現したいこと

テーブル設計におけるvarcharの文字数の基準に関して質問があります。
現在、ユーザーのテーブル設計を行っているのですが、名前のカラムのデータ型(varchar)の
文字数をどのくらいにしようか悩んでいます。

他のテーブル設計とかを見るとだいたいvarcharは最大値255まで設定してる方が多いのですが、
なぜ最大の255が妥当なのでしょうか?

また、varcharは可変長で、容量は実際に入れた分しか消費しないと思うのですが、
ユーザーの名前なので多く見積もってvarchar(50)とかでも可能でしょうか。
文字数でデータ容量や検索性能が異なってきたりするのでしょうか。

もし、皆さんの明確なvarcharの文字数の基準があればご教示頂きたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

おす!

他のテーブル設計とかを見るとだいたいvarcharは最大値255まで設定してる方が多いのですが、
なぜ最大の255が妥当なのでしょうか?

そりゃぁな、妥当じゃあねぇんだ。

世の中頭が腐ってる奴ばっかだからvarchar(255)が溢れてるってぇだけで、
おめぇも言ってる通り、VARCHARは可変長だから 255に意味なんか、ねぇ

『255にしといたら効率よくデータをうめてくれるんでしょう?』みてぇな、
適当なイメージで設定してるだけだから、255は無視していいぞ。可変長だ。

これがmailaddressでVARCHAR(254)だったり、phone_jpでVARCHAR(13)だったりした場合には意味があんだけどな。

いいか、よく覚えといた方がいいぞ。
世の中ってぇのは、おめぇが考えてるよりも バカの数が遥かに多い

そんでな、名前カラムをどのくらいにしたらいいのかって事だけんどもな、
おらはVARCHAR(128)くらいにしとくな。

日本語の名前なら10文字もありゃあ十分な気もするが、
外人がアルファベットで登録する場合も考えるとある程度は余裕が欲しいだろ。

どのくれぇ余裕を持たせるかってなったら、寿限無が111文字な事を考えときゃ十分だろ。
だから128文字にしてる。

一応いっとくと、テーブルカラムを何文字にすっかよりも
ユーザ入力ヴァリデーションで何文字に制限すっかの方がずっと重要だからな。

入ってきて困る物は全部、入力ヴァリデーションで弾く。
いざDBにデータ入れる時に入るかどうか確認するような実装は絶対すんなよ。
おらとの約束だ。

投稿2019/12/21 10:02

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2019/12/21 10:23 編集

InnoDBのインデックス長制限だった767バイトの中で3バイトのutf8を取っていった最大値だった、という歴史的経緯か、ツールのデフォルトがvarchar(255)となっている例も見受けられます。 今ではInnoDBのインデックス長も設定次第では3072バイトまで取れるようになった一方、文字カラムはutf8mb4を使うと4バイト必要になった、ということで、255にもはや意味はないですね。
退会済みユーザー

退会済みユーザー

2019/12/21 10:29

おす! 思うんだけんどもよう『インデックス長制限が767バイトだから名前のカラムに最大限使おう』って発想は、おらにはねぇなぁ。 どう考えても名前に255文字は多過ぎっだろ。不利益しかねぇと思うけんども、 まぁ、何にも考えてねぇ奴のやる事だから、利益が何なのかも考えてねぇだろうし、 そこに合理的な理由を求めても無駄なんだろうなぁ。
haru99

2019/12/21 13:11

ご返信ありがとうございます。 ユーザ入力バリデーションで何文字に制限するかの重要性ですね。
guest

0

ベストアンサー

文字数でデータ容量や検索性能が異なってきたりするのでしょうか。

MySQLのバージョンやストレージエンジンによっては、1カラムあたりのインデックス長の制限が短く、utf8mb4varchar(255)としてインデックスをかけようとすると失敗する、ということがありました。

…というように、インデックスは全体の長さに依存しますので、インデックスをかける場合で、なおかつ郵便番号などのように「違う長さのものが絶対に入らない」ような場所では、きっちりの幅で用意したほうが効率がいいかもしれません。

投稿2019/12/21 08:45

maisumakun

総合スコア145967

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

haru99

2019/12/21 13:13

ご返信ありがとうございます。 MySQLのバージョンやストレージエンジンにより異なってくるのですね。。
guest

0

足りない場合に大変なことになるよりは、ってことでめいっぱい確保してるだけかと。
varchar(50)では寿限無の長助さんが来たら破綻しますね

投稿2019/12/21 05:37

y_waiwai

総合スコア88038

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/12/21 10:07

よう! なんで255が『めいっぱい』なんだ?
y_waiwai

2019/12/21 10:09

> 世の中ってぇのは、おめぇが考えてるよりも バカの数が遥かに多い。 ってことかとw
退会済みユーザー

退会済みユーザー

2019/12/21 10:11

つまり、おめぇがバカだって言いてぇのか? おら、よく分かんねぇぞ。
退会済みユーザー

退会済みユーザー

2019/12/21 10:11

「めいっぱい確保してる」ってぇのと、 「めいっぱい確保しておけばいいと思ってる」ってぇのは、 違うぞ。
y_waiwai

2019/12/21 10:12

わからんか。わかんねーだろうなあw
退会済みユーザー

退会済みユーザー

2019/12/21 10:13

やっぱ、おめぇがバカなんじゃねぇか。 最初っからそう言えよ。
y_waiwai

2019/12/21 10:15

ほら、 > 世の中ってぇのは、おめぇが考えてるよりも バカの数が遥かに多い。 ってのがよくわかるだろw
退会済みユーザー

退会済みユーザー

2019/12/21 10:17

どうしたんだ、アヒル、 おめぇ、今日はあんまり元気ねぇみてぇだぞ。
退会済みユーザー

退会済みユーザー

2019/12/21 10:17

低評価、解除しといたぞ。
y_waiwai

2019/12/21 10:25

いやあ、昨日は飲みすぎたもんで。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問