web-dev-qa-db-ja.com

整数の先行ゼロをMySQLデータベースにINTEGERとして格納する

MySQLで整数フィールドに数値を格納し、先行ゼロを維持する必要があります。現在のフィールドがBigint(16)であり、数値によって先行ゼロの量が異なる場合があるため、zerofillオプションを使用できません。 IE:0001-0005、次に008-010の保存が必要になる場合があります。番号の一意性(これらはIDなどとして使用されていません)については心配していませんが、INTSとして保存する必要があります。

CHAR/VARCHARを使用し、PHPで整数として値を型キャストすることで、クエリによるソート結果が英数字ソートにつながることを意味します。IE:SORT BY number ASCは

001
002
003
1
100
101
102
2

明らかに、番号順ではなく、英数字順です。これは望ましくありません。

いくつかの賢い回避策を期待しています:)

21
Michael

整数として格納された数値を保持します。

次に、関数 LPAD() を使用して、ゼロが埋め込まれた数値(左)を表示します。

SELECT LPAD( 14, 7, '0') AS padded;

| padded  |
-----------
| 0000014 |

ゼロフィル文字の数が可変の場合は、その(ゼロフィル)長さでテーブルに別の列を追加します。

22
ypercubeᵀᴹ

[〜#〜] cast [〜#〜] を使用して、整数のようにstring(CHAR/VARCHAR)列をソートすることもできます

ORDER BY CAST(`col_name` AS SIGNED) DESC

したがって、それらをCHAR/VARCHARタイプのフィールドに格納できます。

6
Shakti Singh

先行ゼロのある整数を格納することはできません。 1つの方法は、それをvarcharとint列に保持することです。この場合、1つの値ともう1つのintValueの2つの列が必要であり、ソート中にintValueを使用してソートできます。これは簡単に実装できます。

Select Value from Table order by intValue;

もう1つのオプションは、2つの列、1つの値とNumOfZeroを使用し、これらを使用して目的の結果を得ることができます。これは複雑ですが、DBの負荷が軽い場合があります。

6
Kangkan

フィールドの構造を変更し、属性をUNSIGNED_ZEROFILLゼロを保持します。

しかし、フィールドの長さに注意する必要があります。これは、残りの数値をすべてゼロに戻すため、フィールドの長さを入力するためです。

5
Nour