- PR -

MySQLのVERCHAR型で半角数字を昇順にできません

1
投稿者投稿内容
加藤ローサ
会議室デビュー日: 2005/09/21
投稿数: 15
投稿日時: 2007-03-20 13:36
お世話になっております。

現在、

MySQL 4.0.x
phpMyAdmin 2.8.2.4

を使用しています。

VARCHAR型に半角数字を入れて、
ORDERBY句で昇順に表示したいのですが、

100
120
30

のように30が一番大きい数値として解釈されてしまいます。

この30のデータを101にすると、

100
101
120

と正常に昇順にならびます。

このカラムをINT型にすると、

30
100
120

と正しく並ぶのですが、
最終的には、このカラムのデータに全角文字も入れて、

30
100
120
−
−
−

というような並びにしたいので、
できればVARCHAR型で正しく昇順にしたいと思っています。

表示はphpMyAdminで行っています。

VARCHAR型は数値のソートには向いていないのでしょうか?
それとも何か型の設定などをしなければいけないのでしょうか?

お忙しいとこまことに申し訳ありませんが、
ご存知の方アドバイスいただけますでしょうか?

よろしくお願いいたします。
KOX
大ベテラン
会議室デビュー日: 2004/08/23
投稿数: 142
投稿日時: 2007-03-20 14:14
varchar型は文字型であり、数値型ではありません。
そのため、「100」の「1」と「30」の「3」と比較しますので、
そのままの結果がでていますよね。

varchar型のまま私用したいのであれば、
「30」は「030」に変換する必要がありますね。
#3桁でよいのかは分かりませんが。
shimix
ぬし
会議室デビュー日: 2004/08/05
投稿数: 512
お住まい・勤務地: 大分市
投稿日時: 2007-03-20 14:34
引用:

加藤ローサさんの書き込み (2007-03-20 13:36) より:
VARCHAR型は数値のソートには向いていないのでしょうか?


向いていません。phpのnatsort()のような動作を期待するのは無理です。
加藤ローサ
会議室デビュー日: 2005/09/21
投稿数: 15
投稿日時: 2007-03-20 15:46
KOX様、shimix様

アドバイスまことにありがとうございます。

初歩的な質問だったようで、
申し訳ありません。

INT型を使う方向で考えたいと思います。

非常に助かりました。
ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)