ここから本文です

MySQL の VARCHAR のサイズは、文字コードに関係なく文字数?

ssd********さん

2012/11/2717:39:50

MySQL の VARCHAR のサイズは、文字コードに関係なく文字数?

CentOS 6.2 に MySQL 5.5 をインストールして使用しています。
ストレージエンジンは InnoDB、キャラクターセットは cp932 です。

他のDBからMySQLに乗り換えようとしていますが、
各データ型の最大値が一致していたため、CREATE TABLEの
列の定義をそのまま再利用しました。

途中で、VARCHAR(100)の箇所に全角文字で100文字入ることに
気が付きました。

(Q1)これはすべての文字コードで共通の仕様でしょうか?
例えば、cp932 と utf-8 ではバイト数が異なりますが、
あくまで文字数でしょうか?

(Q2)移行前のDBは、VARCHAR(100) で全角50文字でした。
MySQLで、列の宣言は VARCHAR(100) のまま、
全角50文字(100バイト)にするための設定等は
ありませんでしょうか?
テーブルを再作成することは可能です。

以上、よろしくお願いします。

補足agunzu様、ご回答ありがとうございました。

文字数と言うことは、VARCHAR(50)と宣言した直した場合、
半角100文字(100バイト)で登録はできなくなる
ということですね。。。

半角も入力することがあるとのことですので、
宣言は従来どおり VARCHAR(100) で行い、アプリ上で
100バイトに切り詰めて登録するしかないと言うことで
いいでしょうか?

閲覧数:
49,562
回答数:
1
お礼:
100枚

違反報告

ベストアンサーに選ばれた回答

agu********さん

編集あり2012/11/2723:23:51

ssdc0246さん

MySQL5.0.3以降、varcharは文字数です(いわゆるnvarcharと同じ)。

そのカラムに設定されている文字セットで、です。なので、クライアント・サーバ間で変換して必ずカラムに設定している文字セットで格納するようになっています。


>全角50文字(100バイト)

文字セットがcp932だとマルチバイト文字は1文字=2バイトでしょうけど、MySQLは他の文字セットも扱うので・・・。当然varchar(100)でマルチバイト文字を50に制限するようなことは出来ません。アプリ側でやるしかなくなるかも・・・




>半角も入力することがあるとのことですので、

そうなるとアプリ側でバイト数をチェックするしかありません。

プロポーショナルフォントが主流になってから、あまり気にしなくなった部分ではありますけどね(汗

質問した人からのコメント

2012/11/28 12:51:29

agunuz様

わかりやすい解説をありがとうございました。
実質的にバイトが増える分にはエラーにならないのでいいのですが、
アウトプットの際に困りそうですので、登録の際にバイトチェックを
入れることで対応します。

(補足でお名前のつづりを間違えていました。失礼致しました。)

あわせて知りたい

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる