統計上の理由で数百万の書き込みを含むロギングテーブルがあります。すべての列はint外部キーです。また、各行にタイムスタンプ列を追加します。 DATETIMEに8ビットかかるとすると、int(10) unsigned
を使用してストレージスペース(およびその列のインデックス)を半分に削減します。
ただし、この列がいつ機能しなくなるのか疑問に思っています。 2038年1月19日の3:14:07 AMで、UNIXタイムスタンプの値9,999,999,999は問題になりますが、MySQLのunsigned intは最大4,294,967,295のみを保持し、タイムスタンプ4294967295はmy PHPアプリケーション。
つまり、これはどういう意味ですか?MySQLでのintタイムスタンプの保存の終わりは、9999999999に達することができないため、2021年のどこかになりますか?
回答:
unsigned
は、2147483647が署名付きMySQL intにうまく適合するため必要ありません。標準のUNIXタイムスタンプは、32ビットの符号付き整数で、MySQLでは通常の「int」列です。 9,999,999,999を保存する方法はありません。これは、表現範囲の外側にあるためです。あらゆる種類の32ビット整数の最大値は4,294,967,295です。符号付き32ビット入力の最高値は2,147,483,647です。
UNIXタイムスタンプが64ビットデータ型に移動する場合、MySQLの「bigint」を使用してそれらを保存する必要があります。
int(10)
に関しては、(10)
部分は、表示目的のためだけです。 MySQLは引き続き内部で完全な32ビットを使用して数値を格納しますが、テーブルで選択を行うたびに10のみを表示します。