gallu’s blog

エンジニアでゲーマーで講師で占い師なおいちゃんのブログです。

MySQLのmemcachedインターフェース(InnoDB Integration with memcached)を実験してみた:備忘録

きちんと把握したい人以外は特に読まなくてもイイ内容w
ただまぁ「きちんとした把握もせずに使う人」が技術者なのか? という問いが、おいちゃん的にはあったりするんだけど、まぁ人それぞれなので。

containersテーブルについて少し

基本的は、前述の通り「(db_schema)にある(db_table)ってテーブルの、(key_columns)をkeyに、(value_columns)をvalueに持ってる」程度の感じ。
あとはflags、cas_column、expire_time_columnは「カラム名の指定」。この3つのカラムが、(db_table)テーブルん中に必要みたい。
とりあえずおいちゃんは

  flags int,
  cas_column bigint UNSIGNED,
  expire_time_column int,

ってやってた。最適解があるかもしれないので、とりあえずこれは「動いたよ〜」程度の、無考察なブツなんでご注意のほどを。


flgasのカラムには、とりあえず0をぶちこんでおくと「未使用」って宣言になるみたい。
https://dev.mysql.com/doc/refman/5.6/en/innodb-memcached-internals.html

flags specifies the columns used as flags (a user-defined numeric value that is stored and retrieved along with the main value) for memcached. It is also used as the column specifier for some operations (such as incr, prepend) if memcached value is mapped to multiple columns. So the operation would be done on the specified column. For example, if you have mapped a value to 3 columns, and only want the increment operation performed on one of these columns, you can use flags to specify which column will be used for these operations. If you do not use the flags column, set its value to 0 to indicate that it is unused.


cas_columnとexpire_time_columnも、一端、0でいいみたい。
https://dev.mysql.com/doc/refman/5.6/en/innodb-memcached-internals.html

cas_column and expiration_time_column are used specifically to store the cas (compare-and-swap) and exp (expiry) value of memcached. Those values are related to the way memcached hashes requests to different servers and caches data in memory. Because the InnoDB memcached plugin is so tightly integrated with a single memcached daemon, and the in-memory caching mechanism is handled by MySQL and the buffer pool, these columns are rarely needed in this type of deployment. If you do not use these columns, set their value to 0 to indicate that the columns are unused.


unique_idx_name_on_keyは…
https://dev.mysql.com/doc/refman/5.6/en/innodb-memcached-internals.html

unique_idx_name_on_key is the name of the index on the key column. It must be a unique index. It can be the primary key or a secondary index. Preferably, make the key column the primary key of the InnoDB table. Doing so saves a lookup step over using a secondary index for this column. You cannot make a covering index for memcached lookups; InnoDB returns an error if you try to define a composite secondary index over both the key and value columns.

ってあるんだけど。実際には'PRIMARY'っていう固定の文字列でいけた。'PRIMARY KEY'でもいけた。
ので…使ってるのかどうか今ひとつ不明。

テストの列挙

先にお断り。
長いです。大量です。長いです。

drop table test1;
create table test1 (
  `key` varbinary(256),
  `val` varbinary(256),
  `flags` int,
  cas_column bigint UNSIGNED,
  expire_time_column int,
  PRIMARY KEY(`key`)
);
insert into innodb_memcache.containers set name='test1', db_schema='furu_test', db_table='test1', key_columns='key', value_columns='val', flags='flags', cas_column='cas_column', expire_time_column='expire_time_column', unique_idx_name_on_key='PRIMARY';
insert into test1 set `key`='d1', val='val', flags=0, cas_column=0, expire_time_column=0;
<?php
// 接続
$m = new Memcache();
$r = $m->addServer('localhost', 11211);
// データの取得
$v = $m->get('@@test1.d1');
var_dump($v);

…うまくいかない。
なんで?(答え:keyがvarbinaryだからなんだが)

create table test2 (
  pkeys varbinary(256) not null,
  val varbinary(256),
  flags int,
  cas_column bigint UNSIGNED,
  expire_time_column int,
  PRIMARY KEY(pkeys)
);
insert into test2 set pkeys='d1', val='val', flags=0, cas_column=0, expire_time_column=0;
insert into innodb_memcache.containers set name='test2', db_schema='furu_test', db_table='test2', key_columns='pkeys', value_columns='val', flags='flags', cas_column='cas_column', expire_time_column='expire_time_column', unique_idx_name_on_key='PRIMARY';
insert into innodb_memcache.containers set name='test2t', db_schema='test', db_table='test2', key_columns='pkeys', value_columns='val', flags='flags', cas_column='cas_column', expire_time_column='expire_time_column', unique_idx_name_on_key='PRIMARY';

とりあえず、keyをnot nullにしてみる。
あと、念のため「database名"test"の中」にテーブルを設置してみる(大抵のサンプルがそこにある前提で書いてあったから念のため)。
………駄目。
なんだろう?

create table test3 (
  pkeys varchar(256) not null,
  val varchar(256),
  flags int,
  cas_column bigint UNSIGNED,
  expire_time_column int,
  PRIMARY KEY(pkeys)
);
insert into test3 set pkeys='d1', val='val', flags=0, cas_column=0, expire_time_column=0;
insert into innodb_memcache.containers set name='test3t', db_schema='test', db_table='test3', key_columns='pkeys', value_columns='val', flags='flags', cas_column='cas_column', expire_time_column='expire_time_column', unique_idx_name_on_key='PRIMARY';
insert into innodb_memcache.containers set name='test3', db_schema='furu_test', db_table='test3', key_columns='pkeys', value_columns='val', flags='flags', cas_column='cas_column', expire_time_column='expire_time_column', unique_idx_name_on_key='PRIMARY';

あ、通った。
なんだ?

create table test4 (
  pkeys varchar(256) not null,
  val varbinary(256),
  flags int,
  cas_column bigint UNSIGNED,
  expire_time_column int,
  PRIMARY KEY(pkeys)
);
insert into test4 set pkeys='d1', val='val', flags=0, cas_column=0, expire_time_column=0;
insert into innodb_memcache.containers set name='test4', db_schema='furu_test', db_table='test4', key_columns='pkeys', value_columns='val', flags='flags', cas_column='cas_column', expire_time_column='expire_time_column', unique_idx_name_on_key='PRIMARY';

もういっちょ同じのを。
…これも通る。
varbinaryイヤなのかしら?
…ってのとは別に、嫌な予感がするのでテスト。

<?php
// 接続
$m = new Memcache();
$r = $m->addServer('localhost', 11211);
// データの取得
$v = $m->get('@@test4.D1');
var_dump($v);

………あぁ通るねぇ orz
varcharだから仕方が無いか orz

create table test5 (
  pkeys char(255) not null,
  val varbinary(256),
  flags int,
  cas_column bigint UNSIGNED,
  expire_time_column int,
  PRIMARY KEY(pkeys)
);
insert into test5 set pkeys='d1', val='val', flags=0, cas_column=0, expire_time_column=0;
insert into innodb_memcache.containers set name='test5', db_schema='furu_test', db_table='test5', key_columns='pkeys', value_columns='val', flags='flags', cas_column='cas_column', expire_time_column='expire_time_column', unique_idx_name_on_key='PRIMARY';

charも通るんだ。

create table test6 (
  pkeys varchar(256) not null,
  val text,
  flags int,
  cas_column bigint UNSIGNED,
  expire_time_column int,
  PRIMARY KEY(pkeys)
);
insert into test6 set pkeys='d1', val='val', flags=0, cas_column=0, expire_time_column=0;
insert into innodb_memcache.containers set name='test6', db_schema='furu_test', db_table='test6', key_columns='pkeys', value_columns='val', flags='flags', cas_column='cas_column', expire_time_column='expire_time_column', unique_idx_name_on_key='PRIMARY';

valにtextも通るねぇ。

create table test7 (
  pkeys varchar(256) not null,
  val blob,
  flags int,
  cas_column bigint UNSIGNED,
  expire_time_column int,
  PRIMARY KEY(pkeys)
);
insert into test7 set pkeys='d1', val='val', flags=0, cas_column=0, expire_time_column=0;
insert into test7 set pkeys='d2', val='0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789', flags=0, cas_column=0, expire_time_column=0;
insert into innodb_memcache.containers set name='test7', db_schema='furu_test', db_table='test7', key_columns='pkeys', value_columns='val', flags='flags', cas_column='cas_column', expire_time_column='expire_time_column', unique_idx_name_on_key='PRIMARY';

…あれ? valがblobでも通るよ?

create table test8 (
  pkeys varbinary(256) not null,
  val blob,
  flags int,
  cas_column bigint UNSIGNED,
  expire_time_column int,
  PRIMARY KEY(pkeys)
);
insert into test8 set pkeys='d1', val='val', flags=0, cas_column=0, expire_time_column=0;
insert into innodb_memcache.containers set name='test8', db_schema='furu_test', db_table='test8', key_columns='pkeys', value_columns='val', flags='flags', cas_column='cas_column', expire_time_column='expire_time_column', unique_idx_name_on_key='PRIMARY';

keyをvarbinaryにしてみる…うんこっちはfalseか orz
どうも、valueにvarbinaryはよいのだけど、keyにするとむずがるみたいだ orz

drop table test9;
create table test9 (
  pkeys varchar(256) not null,
  val int,
  flags int,
  cas_column bigint UNSIGNED,
  expire_time_column int,
  PRIMARY KEY(pkeys)
);
insert into test9 set pkeys='d1', val=100, flags=0, cas_column=0, expire_time_column=0;
insert into test9 set pkeys='d1 2', val=100, flags=0, cas_column=0, expire_time_column=0;
insert into test9 set pkeys='d1_2', val=101, flags=0, cas_column=0, expire_time_column=0;
insert into innodb_memcache.containers set name='test9', db_schema='furu_test', db_table='test9', key_columns='pkeys', value_columns='val', flags='flags', cas_column='cas_column', expire_time_column='expire_time_column', unique_idx_name_on_key='PRIMARY';

2つ実験。
1つめは「valueにintは?」
答え:通る。ただ、getするとstringになってはくるんだが(苦笑
2つめは「keyの中にあるスペースの扱い」。アンダースコアになってしまうために

$v = $m->get('@@test9.d1 2');
var_dump($v);

って指定をしても、戻りは「string(3) "101"」になる。

create table test10 (
  pkeys int not null,
  val int,
  flags int,
  cas_column bigint UNSIGNED,
  expire_time_column int,
  PRIMARY KEY(pkeys)
);
insert into test10 set pkeys=1, val=100, flags=0, cas_column=0, expire_time_column=0;
insert into innodb_memcache.containers set name='test10', db_schema='furu_test', db_table='test10', key_columns='pkeys', value_columns='val', flags='flags', cas_column='cas_column', expire_time_column='expire_time_column', unique_idx_name_on_key='PRIMARY';

keyにint指定したらどうなるんだろう?
答え:無問題。通りました普通に。

create table test11 (
  pkeys int not null,
  val1 int,
  val2 float,
  val3 varchar(256),
  val4 varbinary(256),
  val5 blob,
  val6 datetime,
  flags int,
  cas_column bigint UNSIGNED,
  expire_time_column int,
  PRIMARY KEY(pkeys)
);
insert into test11 set pkeys=1, val1=100, val2=1.123, val3='varchar', val4='binary', val5='blob', val6='2014-1-1 10:22:33', flags=0, cas_column=0, expire_time_column=0;
insert into innodb_memcache.containers set name='test11', db_schema='furu_test', db_table='test11', key_columns='pkeys', value_columns='val1,val2,val3,val4,val5,val6', flags='flags', cas_column='cas_column', expire_time_column='expire_time_column', unique_idx_name_on_key='PRIMARY';
insert into innodb_memcache.containers set name='test11_1', db_schema='furu_test', db_table='test11', key_columns='pkeys', value_columns='val1', flags='flags', cas_column='cas_column', expire_time_column='expire_time_column', unique_idx_name_on_key='PRIMARY';
insert into innodb_memcache.containers set name='test11_2', db_schema='furu_test', db_table='test11', key_columns='pkeys', value_columns='val1,val2', flags='flags', cas_column='cas_column', expire_time_column='expire_time_column', unique_idx_name_on_key='PRIMARY';
insert into innodb_memcache.containers set name='test11_3', db_schema='furu_test', db_table='test11', key_columns='pkeys', value_columns='val1|val2', flags='flags', cas_column='cas_column', expire_time_column='expire_time_column', unique_idx_name_on_key='PRIMARY';

さて…複数カラムの実験。
ん…「name='test11_1'」以外は全部NG。なんだろ?

create table test12 (
  pkeys varchar(256) not null,
  val1 varchar(256),
  val2 varbinary(256),
  val3 blob,
  flags int,
  cas_column bigint UNSIGNED,
  expire_time_column int,
  PRIMARY KEY(pkeys)
);
insert into test12 set pkeys='d1', val1='varchar', val2='binary', val3='blob', flags=0, cas_column=0, expire_time_column=0;
insert into innodb_memcache.containers set name='test12', db_schema='furu_test', db_table='test12', key_columns='pkeys', value_columns='val1', flags='flags', cas_column='cas_column', expire_time_column='expire_time_column', unique_idx_name_on_key='PRIMARY';
insert into innodb_memcache.containers set name='test12_1', db_schema='furu_test', db_table='test12', key_columns='pkeys', value_columns='val1,val2,val3', flags='flags', cas_column='cas_column', expire_time_column='expire_time_column', unique_idx_name_on_key='PRIMARY';
insert into innodb_memcache.containers set name='test12_2', db_schema='furu_test', db_table='test12', key_columns='pkeys', value_columns='val1|val2|val3', flags='flags', cas_column='cas_column', expire_time_column='expire_time_column', unique_idx_name_on_key='PRIMARY';

「name='test12'」だけ…複数カラムって無理なのかしらん?

drop table test13;
create table test13 (
  pkeys varchar(128) not null,
  val1 varchar(256),
  val2 varchar(256),
  val3 varchar(128),
  flags int,
  cas_column bigint UNSIGNED,
  expire_time_column int,
  PRIMARY KEY(pkeys)
) CHARACTER SET 'utf8mb4', ENGINE=InnoDB;
insert into test13 set pkeys='d1', val1='varchar', val2='binary', val3='blob', flags=0, cas_column=0, expire_time_column=0;
insert into innodb_memcache.containers set name='test13', db_schema='furu_test', db_table='test13', key_columns='pkeys', value_columns='val1', flags='flags', cas_column='cas_column', expire_time_column='expire_time_column', unique_idx_name_on_key='PRIMARY';
insert into innodb_memcache.containers set name='test13_1', db_schema='furu_test', db_table='test13', key_columns='pkeys', value_columns='val1,val2,val3', flags='flags', cas_column='cas_column', expire_time_column='expire_time_column', unique_idx_name_on_key='PRIMARY';
insert into innodb_memcache.containers set name='test13_2', db_schema='furu_test', db_table='test13', key_columns='pkeys', value_columns='val1|val2|val3', flags='flags', cas_column='cas_column', expire_time_column='expire_time_column', unique_idx_name_on_key='PRIMARY';

あ、のった。…varbinaryが絡むと駄目なの? エライこと冷遇されてないかい?
value_columns='val1,val2,val3'」と「value_columns='val1|val2|val3'」、とりあえず、どっちの書式でもOKなんだなぁ。
ちなみに値は「string(19) "varchar|binary|blob"」と一本につながってきます。
ついでに

//
$m->set('@@test13_1.d2', '1|2|3');
//
$v = $m->get('@@test13_1.d2');
var_dump($v);

からの

mysql> select * from test13 \G

                                                      • 1. row ---------------------------

pkeys: d1
val1: varchar
val2: binary
val3: blob
flags: 0
cas_column: 0
expire_time_column: 0

                                                      • 2. row ---------------------------

pkeys: d2
val1: 1
val2: 2
val3: 3
flags: 0
cas_column: 20022
expire_time_column: 0
2 rows in set (0.00 sec)

ってな感じで、ちゃんと「分割しての設定」も出来るようです。

create table test14 (
  pkeys varchar(256) not null,
  val1 varbinary(256),
  val2 varbinary(256),
  flags int,
  cas_column bigint UNSIGNED,
  expire_time_column int,
  PRIMARY KEY(pkeys)
);
insert into test14 set pkeys='d1', val1='varchar', val2='binary', flags=0, cas_column=0, expire_time_column=0;
insert into innodb_memcache.containers set name='test14', db_schema='furu_test', db_table='test14', key_columns='pkeys', value_columns='val1,val2', flags='flags', cas_column='cas_column', expire_time_column='expire_time_column', unique_idx_name_on_key='PRIMARY';

うんvarbinaryはやっぱり駄目なんだ。

create table test15 (
  pkeys int not null,
  val1 varchar(256),
  val2 varchar(256),
  val3 varchar(128),
  flags int,
  cas_column bigint UNSIGNED,
  expire_time_column int,
  PRIMARY KEY(pkeys)
) CHARACTER SET 'utf8mb4', ENGINE=InnoDB;
insert into test15 set pkeys=1, val1='varchar', val2='binary', val3='blob', flags=0, cas_column=0, expire_time_column=0;
insert into innodb_memcache.containers set name='test15', db_schema='furu_test', db_table='test15', key_columns='pkeys', value_columns='val1,val2,val3', flags='flags', cas_column='cas_column', expire_time_column='expire_time_column', unique_idx_name_on_key='PRIMARY';

「keyがint」かつ「valueが複数カラム」…ふむ、普通に通る、っと。

create table test17 (
  pkeys varchar(256) not null,
  val1 varchar(256),
  val2 varchar(256),
  val3 varchar(128),
  flags int,
  cas_column bigint UNSIGNED,
  expire_time_column int,
  PRIMARY KEY(pkeys)
) CHARACTER SET 'latin1', ENGINE=InnoDB;
insert into test17 set pkeys=1, val1='varchar', val2='binary', val3='blob', flags=0, cas_column=0, expire_time_column=0;
insert into innodb_memcache.containers set name='test17', db_schema='furu_test', db_table='test17', key_columns='pkeys', value_columns='val1,val2,val3', flags='flags', cas_column='cas_column', expire_time_column='expire_time_column', unique_idx_name_on_key='PRIMARY';

「CHARACTER SET 'latin1'」は通る…latin1はいいんだ。

create table test18 (
  pkeys varchar(256) not null,
  val1 varchar(256),
  val2 varchar(256),
  val3 varchar(128),
  flags int,
  cas_column bigint UNSIGNED,
  expire_time_column int,
  PRIMARY KEY(pkeys)
) CHARACTER SET 'binary', ENGINE=InnoDB;
insert into test18 set pkeys=1, val1='varchar', val2='binary', val3='blob', flags=0, cas_column=0, expire_time_column=0;
insert into innodb_memcache.containers set name='test18', db_schema='furu_test', db_table='test18', key_columns='pkeys', value_columns='val1,val2,val3', flags='flags', cas_column='cas_column', expire_time_column='expire_time_column', unique_idx_name_on_key='PRIMARY';

「CHARACTER SET 'binary'」でbinaryにしてみるとやっぱり嫌がられる。
binaryは一通り、おいやですかしらん?

drop table test19 ;
create table test19 (
  pkeys varchar(256) not null,
  val1 int,
  val2 int,
  val3 int,
  flags int,
  cas_column bigint UNSIGNED,
  expire_time_column int,
  PRIMARY KEY(pkeys)
) CHARACTER SET 'latin1', ENGINE=InnoDB;
insert into test19 set pkeys='d1', val1=10, val2=20, val3=30, flags=0, cas_column=0, expire_time_column=0;
insert into innodb_memcache.containers set name='test19', db_schema='furu_test', db_table='test19', key_columns='pkeys', value_columns='val1,val2,val3', flags='flags', cas_column='cas_column', expire_time_column='expire_time_column', unique_idx_name_on_key='PRIMARY';

valueのintは特に気にしない…っと。
まぁ「string(8) "10|20|30"」ってreturnになるにはしても。

create table test20 (
  pkeys varchar(256) not null,
  val1 text,
  val2 text,
  val3 text,
  flags int,
  cas_column bigint UNSIGNED,
  expire_time_column int,
  PRIMARY KEY(pkeys)
) CHARACTER SET 'latin1', ENGINE=InnoDB;
insert into test20 set pkeys='d1', val1='varchar', val2='binary', val3='blob', flags=0, cas_column=0, expire_time_column=0;
insert into innodb_memcache.containers set name='test20', db_schema='furu_test', db_table='test20', key_columns='pkeys', value_columns='val1,val2,val3', flags='flags', cas_column='cas_column', expire_time_column='expire_time_column', unique_idx_name_on_key='PRIMARY';

まぁこれは乗るねぇ。
…あんまり長い文字列だとどうなるんだろう? という疑問があるにはしても。

create table test21 (
  pkeys varchar(256) not null,
  val1 blob,
  val2 blob,
  val3 blob,
  flags int,
  cas_column bigint UNSIGNED,
  expire_time_column int,
  PRIMARY KEY(pkeys)
) CHARACTER SET 'latin1', ENGINE=InnoDB;
insert into test21 set pkeys='d1', val1='varchar', val2='binary', val3='blob', flags=0, cas_column=0, expire_time_column=0;
insert into innodb_memcache.containers set name='test21', db_schema='furu_test', db_table='test21', key_columns='pkeys', value_columns='val1,val2,val3', flags='flags', cas_column='cas_column', expire_time_column='expire_time_column', unique_idx_name_on_key='PRIMARY';

…あ、乗った。varbinaryは駄目なのに、blobはいいんだ(苦笑

create table test22 (
  pkeys varchar(256) not null,
  val1 varbinary(128),
  val2 blob,
  val3 blob,
  flags int,
  cas_column bigint UNSIGNED,
  expire_time_column int,
  PRIMARY KEY(pkeys)
) CHARACTER SET 'latin1', ENGINE=InnoDB;
insert into test22 set pkeys='d1', val1='varchar', val2='binary', val3='blob', flags=0, cas_column=0, expire_time_column=0;
insert into innodb_memcache.containers set name='test22', db_schema='furu_test', db_table='test22', key_columns='pkeys', value_columns='val1,val2,val3', flags='flags', cas_column='cas_column', expire_time_column='expire_time_column', unique_idx_name_on_key='PRIMARY';

………blogが乗ったから…と思ったけど、やっぱり駄目なんだよねぇvarbinaryは orz

create table test23 (
  pkeys varchar(256) not null,
  val1 date,
  val2 datetime,
  val3 timestamp,
  flags int,
  cas_column bigint UNSIGNED,
  expire_time_column int,
  PRIMARY KEY(pkeys)
) CHARACTER SET 'latin1', ENGINE=InnoDB;
insert into test23 set pkeys='d1', val1='1970-11-25', val2='2014-1-1 11:22:33', val3='2034-1-1 22:33:44', flags=0, cas_column=0, expire_time_column=0;
insert into innodb_memcache.containers set name='test23', db_schema='furu_test', db_table='test23', key_columns='pkeys', value_columns='val1,val2,val3', flags='flags', cas_column='cas_column', expire_time_column='expire_time_column', unique_idx_name_on_key='PRIMARY';
insert into innodb_memcache.containers set name='test23_1', db_schema='furu_test', db_table='test23', key_columns='pkeys', value_columns='val2', flags='flags', cas_column='cas_column', expire_time_column='expire_time_column', unique_idx_name_on_key='PRIMARY';

「name='test23'」はfalse。
「name='test23_1'」は一応戻ってくるんだけど、値がガッツリと文字化けしてる。まぁ「使うな」って事だわなきっと。

create table test24 (
  pkeys varchar(256) not null,
  val1 blob,
  val2 varchar(128),
  val3 int,
  flags int,
  cas_column bigint UNSIGNED,
  expire_time_column int,
  PRIMARY KEY(pkeys)
) CHARACTER SET 'latin1', ENGINE=InnoDB;
insert into test24 set pkeys='d1', val1='aaa', val2='bbb', val3=999, flags=0, cas_column=0, expire_time_column=0;
insert into innodb_memcache.containers set name='test24', db_schema='furu_test', db_table='test24', key_columns='pkeys', value_columns='val1,val2,val3', flags='flags', cas_column='cas_column', expire_time_column='expire_time_column', unique_idx_name_on_key='PRIMARY';

混ぜると…「string(11) "aaa|bbb|999"」あ、平気だった。


以上、ものっそ長い備忘録w