[groonga-dev,03312] Re: Mroonga 5.03 ストレージモードで MySQL 5.6 のレプリケーションが切断される

Back to archive index

Kouhei Sutou kou****@clear*****
2015年 6月 26日 (金) 22:16:15 JST


須藤です。

In <20150****@domai*****>
  "[groonga-dev,03306] Re: Mroonga 5.03 ストレージモードで MySQL 5.6 のレプリケーションが切断される" on Tue, 23 Jun 2015 20:29:57 +0900,
  各務 洋 <kagam****@outwa*****> wrote:

> この対応版のリリースだと、今までと挙動が変わると思うのです。

はい、その通りです。
MySQL全体として、STRICT_TRANS_TABLESのときはwarningがerrorに
なるという挙動なので、今まで対応していなかったのが問題で、そ
れが修正された、という風に捉えています。

> リリースノートに今までだと warning 止まりだった例や、影響範囲がなるべ
> く多く記述されていると助かると思うのですがどうでしょうか?

はい、記述するべきだと思います。

>> mroongaストレージエンジンは月や日の値に指定された0を1へと自動的に補正します。
> 
> せっかくなので、この自動補正を使って warning にすらしない Flag があっ
> てもいいのかなぁとも思いました。

いやぁ、それはMySQLらしさを損ねるのでやっちゃいけないかなぁ
と思います。

>> InnoDBストレージエンジンには0000-00-00 00:00:00が格納できます。
> 
> これが謎だったのですが、せっかく日本語のが出来たので見てみると、
> 
> http://dev.mysql.com/doc/refman/5.6/ja/datetime.html
> 
>> 無効な DATE、DATETIME、または TIMESTAMP 値は、適切な型の「ゼロ」値 
>> ('0000-00-00' または '0000-00-00 00:00:00') に変換されます
> 
> うーむ、ちゃんと仕様のようですね……。中は何が入っているんでしょうか。
> 名前の通り0なのかなぁ?

たぶん、望まれていないと思いますが、実装の話をすると、MySQL
は

https://github.com/mysql/mysql-server/blob/5.7/sql-common/my_time.c#L1752-L1764

/*
    1 bit  sign            (used when on disk)
   17 bits year*13+month   (year 0-9999, month 0-12)
    5 bits day             (0-31)
    5 bits hour            (0-23)
    6 bits minute          (0-59)
    6 bits second          (0-59)
   24 bits microseconds    (0-999999)
   Total: 64 bits = 8 bytes
   SYYYYYYY.YYYYYYYY.YYdddddh.hhhhmmmm.mmssssss.ffffffff.ffffffff.ffffffff
*/

にあるように、DATETIMEの値をUNIX時間ではなく、64bitの数値で
表現しています。この方法は日付の「値」ではなく「字面」を格納
しているのと同じなので、日付としておかしな値(0月0日)とかも
格納できます。一方、Mroonga(Groonga)はUNIX時間で表現してい
るので日付の「値」を格納していることになります。よって、おか
しな値を格納できません。

> http://dev.mysql.com/doc/refman/5.6/ja/using-date.html
> 
>> ユーザーが入力したとおりに格納する (日付検証なしで) 場合に……
> snip
>> MySQL は、日または月と日がゼロである日付の格納を許可します
> 
> ぉぅ。。。なんという……。

個人的には、0月0日とか不正な日付ではなく、妥当な日付を使うこ
とをオススメしたいところです。
(って、福岡のときにいい忘れていたかも。。。)


-- 
須藤 功平 <kou****@clear*****>
株式会社クリアコード <http://www.clear-code.com/>

Groongaベースの全文検索システムを総合サポート:
  http://groonga.org/ja/support/
パッチ採用 - プログラミングが楽しい人向けの採用プロセス:
  http://www.clear-code.com/recruitment/




groonga-dev メーリングリストの案内
Back to archive index