
mysqlの、テーブルを作成する時に、
カラムの長さを(255)のように、()内に指定すると思うのですが、
create table item (
id int not null primary key auto_increment,
name varchar(255),
price int,
memo text
);
↑こんな感じです↑
まず、上記の(255)を指定した場合、
「255文字を格納することができる」と考えてよいのでしょうか?
aaaa()←4文字
おおおおおおおお←8文字
・・・といった感じで、255文字格納出来ると考えて良いのでしょうか?。
その場合、「だったら、出来るだけ大きい数字を入れておけばいいのでは?」と思いました。
つまり、ブログを投稿するサイトを作成していたとします(CMSとでも言うのでしょうか・・?)
記事のタイトルに対して、20文字程度で十分なところを、1000文字に設定しておいたり、
1000文字まで入力できる。
と設定すると、その時点で、1000文字の容量を消費するのでしょうか?。
あるいは、1000文字まで入力できると設定したとしても、
600文字しか打たなかったら、600文字分の容量しか消費しないのでしょうか?
後者だとしたら、文字数を設定する意味ってなんだろ・・?
とりあえずデカくしといたらオッケーなのかな・・?
・・と、いう風に考えたのですが、
そうすることによって、どういった不都合が生じますか?。
ご存知の方がいらっしゃいましたら、
ご回答お待ちしております、宜しくお願い致します。
No.2ベストアンサー
- 回答日時:
varchar、textは可変長です。
255なら、255バイトまたは255文字まで格納できます。
格納できる文字数は文字エンコーディングに依存します。
消費容量は格納された文字数に依存します。
パフォーマンについては既に回答がありますね。
varchar型にすることと、登録できるレコード数は直接的に関係はありません。
関係あるのはストレージ容量です。
格納される文字数の上限がはっきりしない項目の場合、textを使います。
つまり、文字数が決まっている記事タイトルのようなものはvarchar、文字数が決まっていない記事内容のようなものはtextだったりします。
勿論、それはシステムを設計する段階で、必ずそうであるとは限りません。
>文字数が決まっている記事タイトルのようなものはvarchar、文字数が決まっていない記事内容のようなものはtextだったりします。
こちららの情報は、とても参考になり得るご意見であり、
>必ずそうであるとは限りません。
と、いう文言も頂いているので、少し不安は残るのですが、
その不安は、本質問から少しズレてしまい、それを聞くことは失礼に当たるので、控えます。
>varchar型にすることと、登録できるレコード数は直接的に関係はありません。
関係あるのはストレージ容量です。
>消費容量は格納された文字数に依存します。
これらの言葉が、今回の質問内容に対して、とても的確な回答だと感じました。
親身なご意見で、とても助かりました、
ご回答ありがとうございました。
No.1
- 回答日時:
文字列型の長さchar型は確保する文字数、varcharは許容される上限文字数です
(DBやエンジンによってはバイト数の場合もあります)
長さを長くすると汎用性はあがりますがストレージやメモリへの負担になります
つまりは検索効率が落ちて低速になるということです
varcharは比較的長さの影響を受けづらいものですが、
カリカリにチューニングをしたい場合などはきっちりした設計で
テストを繰り返して適切な長さを決める必要があります
ご回答ありがとうございます。
ネットのトラブルにより、サイトを確認出来ていませんでした。
お礼が遅くなってしまい、申し訳ありません。
長さが長くなれば、低速になる等の影響を受けることが理解出来たので、とても助かりました。
質問本文にて、
>1000文字まで入力できる。
と設定すると、その時点で、1000文字の容量を消費するのでしょうか?。
あるいは、1000文字まで入力できると設定したとしても、
600文字しか打たなかったら、600文字分の容量しか消費しないのでしょうか?
と、記載した部分なのですが、
例えば、10000文字を格納出来るとして、
1000文字が上限と指定すると、その時点で残り10件のデータしか格納できないのでしょうか?、
あるいは、1000文字が上限と指定したとしても、実際の中身が100文字だったら、100件のデータが格納出来るのでしょうか?
素人なりに、聞きたいことを文字に起こしてみたので、
飛躍しすぎていたり、判り辛かったら申し訳ないのですが、
宜しければ、その一点について、教えて頂けると、とても嬉しいです、
宜しくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAで変数内に保持された二次配...
-
MySQLの型のサイズ指定で速度は...
-
Excel VBA SelectedItems
-
INT型は金額の型に使用するべき...
-
副問合せにLIKE文を使う方法は...
-
SQL開発環境ソフトウェアである...
-
MySQLカラム名は日本語と英数字...
-
テーブル作成でエラーが出てき...
-
mysqlのsecure-file-privオプシ...
-
MySQLに関して
-
MySQLのLOAD DATA INFILEコマン...
-
「・」中点が入った文字列を条...
-
ODP.NETのバージョン確認
-
mysqlがインストールされている...
-
Windows に Postgres 旧バージョン
-
DBから取得した値を加工して別...
-
JDBCドライバについて
-
SQLServerのコンピュータ名変更...
-
配列の要素でmysqlに問い合わせ
-
like句を使って日本語を検索す...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SQLのVARCHARとVARCHAR2の違い
-
INT型は金額の型に使用するべき...
-
プライマリーキーの昇順でソー...
-
VBAで変数内に保持された二次配...
-
Float型の時の計算結果がおかしい
-
Excel VBA SelectedItems
-
ヌル値は記憶容量を必要としな...
-
オラクルのデータ型・通貨について
-
postgreSQLのデータ型
-
オラクルのDATE型について
-
経過時間(hhmmdd)をDATE型には...
-
MYSQLで、ファイルを格納する方...
-
データの連続格納について
-
DB2 INSERT時の格納順序
-
DataSet ds = new DataSet();
-
-3.34 が -3.3399999999999999 ...
-
PDFをDBに格納する/取り出すには?
-
AccessからOrcleのODBCリンクテ...
-
Oracle9i で XMLType (CLOB) の...
-
ブログサイトを作る時、mysqlは...
おすすめ情報