MySQL5.0.45で、varchar(100)で定義したカラムに200バイト(全角100文字)までinsert可能です。

考えられる理由や、その確認方法を教えてください。

回答の条件
  • URL必須
  • 1人1回まで
  • 登録:2007/09/24 20:45:28
  • 終了:2007/09/30 21:13:20

回答(4件)

id:thrillseeker No.1

thrillseeker回答回数328ベストアンサー獲得回数372007/09/24 21:27:43

ポイント23pt

varchar(n) の n は「バイト数」ではなく、マルチバイトに対応した「文字数」だからです。

下記のページに詳しく確認した例があります。

http://d.hatena.ne.jp/sotarok/20070821/1187707045

id:P-mako

ご回答ありがとうございました。

そういうことだったんですね。

以降、ご回答いただいた方もありがとうございます。

2007/09/30 21:12:25
id:tkyk3 No.2

tkyk3回答回数59ベストアンサー獲得回数62007/09/24 22:06:22

ポイント23pt

バイト数ではなく、文字数だからです。

データタイプが必要とする記憶容量

http://dev.mysql.com/doc/refman/5.1/ja/storage-requirements.html

ここをご覧頂くと、

例えば、VARCHAR(10) カラムは最大長さ10の文字列を保持する事ができます。カラムが latin1 文字セットを利用すると仮定すると(一文字につき1バイト)、実際の記憶容量は文字列の長さ(L)と、その文字列の長さを記録する1バイトです。'abcd' 文字列では、L は4で、必要とする記憶容量は5バイトです。もし同じカラムが代わりに VARCHAR(500) として宣言されていたら、その文字列 'abcd' は 4 + 2 = 6 バイトを必要とします。カラム長は255以上なので、プリフィックスには1バイトではなく2バイトが要求されます。

特定の CHAR、VARCHAR、または TEXT カラム値を格納するのに利用される バイト 数を計算するには、そのカラムに利用される文字セットを考慮に入れなければいけません。特に、utf8 ユニコード文字セットを利用する時には、全ての utf8 文字セットが同じバイト数を利用するわけではないという事を覚えておく必要があります

とあります。ですから、varchar(100)は100+1バイト、とは限りません。

id:hyperdb No.3

hyperdb回答回数3ベストアンサー獲得回数02007/09/24 22:35:24

ポイント22pt

以下の記事にもありますが、

VARCHAR(N)のNはフィールドのバイトサイズではなく、

最大格納文字数ですので、

VARCHAR(100)のフィールドには全角100文字が格納可能です。


MySQLの基礎を学ぼう [準備編](2/3) - @IT

http://www.atmarkit.co.jp/flinux/rensai/mysql5_04/mysql5_04b.htm...

(本文中に簡単に触れられてます)

id:chuken_kenkou No.4

chuken_kenkou回答回数722ベストアンサー獲得回数542007/09/25 04:17:44

ポイント22pt

MySQL 4.1でunicode等の実装があり、それまでvarchar(n)のnはバイト数であったものが、1バイト文字・2バイト文字に関係なく、文字数に仕様変更されました。

日本MySQLユーザ会

MySQLユーザ会のHPのFAQでも、「4.1以上の壁 (日本語の扱いの違い、文字化け等/含む5.0以上)」の箇所で記載されています。

length関数ではバイト数、char_length関数では文字数が返されます。

MySQL AB :: MySQL 4.1 リファレンスマニュアル :: 6.3.2 文字列関数

length関数とchar_length関数の結果は、次のようなSQLを実行してもらえれば、一目瞭然です。

select length('aあ'),char_length('aあ');

また、varchar(3)の列を作り、'abc','aあい','あいう'といったデータを格納し、char_length関数とlength関数の結果を見てみてください。

コメントはまだありません

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません