Bug #1696

mroongaストレージモードでのbigint型使用時の挙動について

Added by Kentoku SHIBA over 5 years ago. Updated over 5 years ago.

Status:完了チェック待ちStart date:03/29/2013
Priority:NormalDue date:
Assignee:Kentoku SHIBA% Done:

80%

Category:-
Target version:-

Description

お世話になっております。
清水と申します。

mroongaを利用していたところ、気になる挙動がありましたので、ご連絡させて頂きました。
mroongaストレージモードにて特定の数値(bigint型、unsignedの有無両方)を登録すると、特定の数値が検索できない状態となります。

以下再現手順となります。

CREATE TABLE IF NOT EXISTS `test` (
    `id`   bigint unsigned,
    `text` varchar(255)
) ENGINE=mroonga DEFAULT CHARSET utf8;

INSERT INTO test(`id`,`text`) VALUES (317173755057152000, 'aaa');
INSERT INTO test(`id`,`text`) VALUES (317173755057152002, 'bbb');

SELECT * FROM test;
2件

SELECT * FROM test WHERE id = 317173755057152000;
2件

SELECT * FROM test WHERE id = 317173755057152002;
0件

また、以下のようにユニークキー制約をかけると、検出結果も変わってきます。
CREATE TABLE IF NOT EXISTS `test` (
    `id`   bigint,
    `text` varchar(255),
    UNIQUE unq_id(id)
) ENGINE=mroonga DEFAULT CHARSET utf8;

SELECT * FROM test;
2件

SELECT * FROM test WHERE id = 317173755057152000;
1件

SELECT * FROM test WHERE id = 317173755057152002;
0件

varchar型を使う等もありましたが、できればbigint型を使用したいので
お手数ですが、回避策等ありましたら、ご教示のほどよろしくお願い致します。

mroongaはソースからのビルドを利用しています。

mroonga_version 3.0.2
groonga.x86_64         3.0.2-0.el6      @groonga
groonga-devel.x86_64   3.0.2-0.el6      @groonga
groonga-libs.x86_64    3.0.2-0.el6      @groonga
groonga-normalizer-mysql.x86_64 1.0.2-0.el6      @groonga
groonga-plugin-suggest.x86_64 3.0.2-0.el6      @groonga
groonga-tokenizer-mecab.x86_64 3.0.2-0.el6      @groonga
mecab.x86_64           0.995-1.el6      @groonga
mecab-ipadic.x86_64    2.7.0.20070801-6.el6.1

MySQL:
mysql55.x86_64         5.5.30-1.ius.el6 @ius
mysql55-devel.x86_64   5.5.30-1.ius.el6 @ius
mysql55-libs.x86_64    5.5.30-1.ius.el6 @ius
mysql55-server.x86_64  5.5.30-1.ius.el6 @ius
mysqlclient16.x86_64   5.1.61-1.ius.el6 @ius

OS:
CentOS 6.4 64bit

History

#1 Updated by Kentoku SHIBA over 5 years ago

  • Status changed from 新規 to 完了チェック待ち
  • % Done changed from 0 to 80

fieldに値をstoreする際、整数値を引き渡す場合にはunsignedのフラグの指定が必要だが、
指定していなかったため、doubleとして解釈され、値がまるめられていた。

Also available in: Atom PDF