陸上競技の記録で、タイムを小数点2桁(100分の1秒)まで保存したい場合、MySQLの設定が必要でした。
調べたら解決方法が紹介されていたのでメモ。
参考
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桁まで保存できる、とのこと。
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」でいきます。