SAGA SITE

夢をプロトタイピング

MySQLで時間を小数点以下まで保存する方法

陸上競技の記録で、タイムを小数点2桁(100分の1秒)まで保存したい場合、MySQLの設定が必要でした。

調べたら解決方法が紹介されていたのでメモ。

 

 

参考

m-shige1979.hatenablog.com

 

TIME型のカラムで長さを設定

(事例)MySQLで、1500m走が4分18秒75という記録を保存したい場合

 

「record」というテーブルに「result」というカラムがあったとします。

 

resultカラムをTIME型にすると、そのままでは「00:04:18」となりコンマ以下の秒数が保存できません。

 

phpMyAdminなどでデータ型を編集し直して、TIME型の長さ(最初は空欄になっている)に「2」と設定します。

すると、「00:04:18.75」という具合に小数点以下2桁まで保存できるようになります。

 

小数点以下は最大で6桁まで

MySQLの公式ドキュメントを見ると、TIME型は最大で小数点以下6桁まで保存できる、とのこと。

 

dev.mysql.com

 

MySQL が TIME 値を認識する形式は複数あり、そのいくつかにはマイクロ秒 (6 秒) までの精度で後続の小数秒部分を含めることができます。

セクション9.1.3「日付リテラルと時間リテラル」を参照してください。

MySQL の小数秒のサポートの詳細は、セクション11.2.6「時間値での小数秒」を参照してください。

特に、TIME カラムに挿入された値の小数部は、破棄されるのではなく格納されます。

小数部が含まれている場合、TIME 値の範囲は '-838:59:59.000000' から '838:59:59.000000' です。

 

手動で変更する場合のSQL

phpMyAdminを使わなくても、直接SQL文で設定を変更することも可能です。

 

ALTER TABLE `record` CHANGE `result` `result` TIME(2) NOT NULL;

 

これでもOKです。

 

短距離走や水泳だと、今は1000分の1秒まで計測できるので、必要に応じて1000分の1秒まで保存できるようにTIME型の長さを「3」にしておいても良いかもしれませんね。

今のところ必要がないので、TIME型の長さ「2」でいきます。