2016-10-24 6 views
0

は、私がフィールドには、テーブル内のNUMBERと呼ばれていると呼ばれるTESTINTを符号なしから署名に変更できないのはなぜですか?署名したZerofillは可能ですか?

NUMBER is int(8) Unsigned Zerofill Not Null 

私は今、この分野で負の数を必要とし、私はまだ彼らは私が署名に変更することができ-00023419

例えば をzerofilledたいですしかし、ゼロになっているようには見えません。

私がしなければ私がしなければそれはZEROFILL

を符号なしたまま : - - alter table test modify number int(8) zerofill not nullalter table test modify number int(8) signed zerofill not null それはとどまる符号なしZEROFILL

を私がやるんならばalter table test modify number int(8) signed not null - 私は署名を取得 が、何のZEROFILL

私はそれが署名に設定されていたとき、私は負の数を入れてからzerofillに変更しようとしましたが、番号は00000000に変更され、すべてが再び符号なしに設定されました。ゼロ点数字に署名することは不可能ですか?

+0

ドキュメントを読むことを検討しましたか? –

答えて

3

https://dev.mysql.com/doc/refman/5.7/en/numeric-type-attributes.htmlは言う:あなたが数値列のZEROFILLを指定した場合

、MySQLは自動的に列にUNSIGNED属性を追加します。

2006年にバグとして報告され、「バグではない」としてクローズされました。あなたのコメントを再 https://bugs.mysql.com/bug.php?id=24356


だから、これはそこに誰もmysqlデータベースの負のゼロ埋めデータを持っていない意味ですか?

右。 ZEROFILLの最も一般的な使用例は、郵便番号や銀行口座番号などに固定桁数を使用することです。これらのケースでは負の値がサポートされないため、-000のような醜い文字列を扱うのはなぜですか?

PHPでzerofilledに変換できますか?

はい、ゼロ詰めで数値を書式設定できます。

<?php 

$n = -1234; 
printf("Number is %08d\n", $n); 

出力:

Number is -00

読むhttp://php.net/manual/en/function.sprintf.phpは、よりきちんとした書式設定のもののためにあなたがprintf()/sprintf()で行うことができます。

+0

これは、mysqlデータベースに負のゼロで埋められたデータがないことを意味しますか?もしそうなら、私の次の質問は、PHPでzerofilledに変換できますか?私のデータベースがそのフィールドに-23419を持っているなら、私は私のウェブページ上でそれを-00023419に変換する必要があります。 – CheeseFlavored

-1

あなたのカラムが外部キーまたはプライマリキーである場合、MySQLではこの変更が行われないようにしています。これは事前に行う必要があります。

+0

私のdownvoteではありませんが、何でもスクリプトで可能です – Drew

+0

母、ない心配!私はそれが私に一度起こったので助けようとした –

1

ZEROFILLはUNSIGNEDを意味します。

MySQLのリファレンスマニュアルhttps://dev.mysql.com/doc/refman/5.7/en/numeric-type-attributes.html

あなたは、数値列に対してZEROFILLを指定すると、MySQLは自動的に列にUNSIGNED属性を追加します。

すべての潜在的な問題がありますが、私は非標準のMySQL ZEROFILL属性の使用を避けます。

関連する問題