MySQL闇歴史2 MySQL loves MySQL Labs.

これは MySQL闇歴史 Advent Calendar 2022 の2枚目のカレンダー21日目のエントリーです。


 かつてMySQLには「実験室」があった。

知名度:★★☆☆☆
闇度 :★☆☆☆☆
度胸度:★★★★★
むしろ貢献度:★★★★★★★★★★


 その昔、と言ってもMySQL 5.6や 5.7の頃の話なので記憶に残っている人も多いかもしれないが、「MySQL Labs」という仕組みがあった。「先進的な機能や実験的な機能をいち早く公開し、コミュニティからのフィードバックを受ける」として、専用のサイト labs.mysql.com を立ち上げて、こちらで機能別の開発ブランチの成果/経過を公開していたのだ。
アドベントカレンダー(1枚目)14日目でも、軽く触れられている。
https://qiita.com/RKajiyama/items/766fd00ea24ec5f269b4


 実は筆者は、当時それほど熱心に labs の機能を追っていた訳ではないので、今回改めて資料を確認し、こんな機能がlabs公開されていたのかと驚いたりしている。この中のいくつかは、現在も正式機能としてよく目にするものであろう。

※梶山さんの 2015年の講演資料を参考にさせていただいた。


 2022年12月現在、labs.mysql.com サブドメイン自体はまだ生きているが、そこに登録されている実験的プロジェクトの数はゼロであり、すでに labs は役割を終えたかのように見える。



 現在、この 「実験室」の精神は、MySQL 8.0 に受け継がれている。

MySQLにおける「いろいろな地球」はどれくらい「いろいろ」なのか

これは、RDBMS-GIS(MySQL,PostgreSQLなど) Advent Calendar 2022 の14日目の記事です。

はじめに

 地域や時代によって様々な「地球の形のモデル」が使われてきたことは、これまで何度も話題にしてきたので知っている人も多いと思う。では、どんなパラメタの違いがあるのか、それらにはどれくらいのバリエーションがあるのか、このたび整理したので公開する。

「バリエーション」の根拠

 この記事ではMySQLの使用を前提とする。MySQLの世界において「知っているすべての世界」は、INFORMATION_SCHEMA の ST_SPATIAL_REFERENCE_SYSTEMS テーブル(以下ST_SRSと略記す)に記述されている。つまり、このテーブルで定義されている内容の違いが、世界の違いであると言える。
 そこで今回は、このテーブルにて定義されている内容を精査することにした。

ST_SRS の内容

 ST_SRSには、地理座標系と投影座標系の両方の定義が格納されている。今回は地球のモデルのバリエーションを確認したいので、地理座標系の定義を確認することになる。MySQL 8.0.31 時点で、ST_SRSには 5152件が登録されているが、そのうち 地理座標に関する定義は 483件である。

ST_SRS全件 地理座標系件数 投影座標系件数
5152 483 4668

SPHEROID

 まずは何はなくとも SPHERO(球体)情報である。地球を回転楕円体としてモデル化したとき、その形は「大きさ」と「つぶれ具合」によって表される。「大きさ」に相当するのが長半径(赤道半径)、「つぶれ具合」に相当するのが扁平率である。扁平率は、南北方向が長半径に対してどれくらい潰れているか(短いか)を表す数字で、この逆数ぶんだけ短くなる。具体的な数字で説明すると、「地球の長半径はおよそ6378kmで、南北方向はそれよりも約 298分の1だけ短い」ということになる。


 さて、このSPHEROのバリエーション。地域ごとの歴史的経緯や、測量技術の進化などに伴い、実に50ものバリエーションが ST_SRSには登録されている。日本が21世紀に入る直前まで使っていた「ベッセル楕円体(Bessel 1841)」や、現在の日本が使っている JGD2000, JGD2011 らが採用している 「GRS 1980」も含まれていることがわかる。中には、まったく扁平していない真球のモデルもあるのが面白い。

SRS名称 長半径 扁平率
Clarke 1866 Authalic Sphere 6370997 0
GRS 1980 Authalic Sphere 6371007 0
International 1924 Authalic Sphere 6371228 0
Zach 1812 6376045 310
Plessis 1817 6376523 308.64
Danish 1876 6377019.27 300
Everest 1830 (1937 Adjustment) 6377276.345 300.8017
Everest 1830 (RSO 1969) 6377295.664 300.8017
Everest 1830 (1967 Definition) 6377298.556 300.8017
Everest 1830 (1975 Definition) 6377299.151 300.8017255
Everest (1830 Definition) 6377299.366 300.8017255
Everest 1830 (1962 Definition) 6377301.243 300.8017255
Everest 1830 Modified 6377304.063 300.8017
Airy Modified 1849 6377340.189 299.3249646
Bessel 1841 6377397.155 299.1528128
Bessel Namibia (GLM) 6377483.865 299.1528128
Bessel Modified 6377492.018 299.1528128
Airy 1830 6377563.396 299.3249646
Average Terrestrial System 1977 6378135 298.257
WGS 72 6378135 298.26
PZ-90 6378136 298.2578393
OSU86F 6378136.2 298.2572236
OSU91A 6378136.3 298.2572236
GSK-2011 6378136.5 298.2564151
CGCS2000 6378137 298.2572221
GEM 10C 6378137 298.2572236
GRS 1980 6378137 298.2572221
WGS 84 6378137 298.2572236
IAG 1975 6378140 298.257
NWL 9D 6378145 298.25
Australian National Spheroid 6378160 298.25
GRS 1967 Modified 6378160 298.25
GRS 1967 6378160 298.2471674
Indonesian National Spheroid 6378160 298.247
Helmert 1906 6378200 298.3
Clarke 1866 6378206.4 294.9786982
Krassowsky 1940 6378245 298.3
Clarke 1880 (Arc) 6378249.145 293.4663077
Clarke 1880 (RGS) 6378249.145 293.465
Clarke 1880 6378249.145 293.4663077
Clarke 1880 (IGN) 6378249.2 293.4660213
Clarke 1880 (SGA 1922) 6378249.2 293.46598
Hough 1960 6378270 297
Hughes 1980 6378273 298.2794111
Clarke 1858 6378293.645 294.2606764
Struve 1860 6378298.3 294.73
War Office 6378300 296
Clarke 1880 (Benoit) 6378300.789 293.4663155
Clarke 1880 (international foot) 6378306.37 293.4663077
International 1924 6378388 297

本初子午線

 次に紹介するのが、本初子午線だ。我々は「グリニッチ天文台を通る線」として習ったはずだ(世代による)。そもそも子午線(子さんと午さんを結ぶ線、つまり経線)は、緯線とは異なり、どこから始めるかは自然には定められないため、便宜上決めるものとなる。歴史上、様々な本初子午線が使われていた。グリニッチ以外のものは現在は使われていないと思っている(想像)が、どうだろうか。 世界で一番本初子午線への対応が遅れたのは、21世紀の声が聞こえる間近まで「うちの本初子午線よりも9分遅れてる "あの"子午線」のように呼んでいたフランスではないだろうか。(もちろん実務上はグリニッチ子午線を採用していたはずだが)

名称 グリニッチからの経度差
Ferro -17.67777778
Madrid -3.687938889
Bogota -74.08091667
Lisbon -9.131906111
Greenwich 0
Paris RGS 2.596898148
Paris 2.5969213
Brussels 4.367975
Bern 7.439583333
Oslo 10.72291667
Rome 12.45233333
Stockholm 18.05827778
Athens 23.7163375
Jakarta 106.8077194

 ちなみにこれら14種の本書子午線の定義があるが、483件の地理座標系のうち458件がグリニッチを採用している。

角度の単位

 角度の単位には、デグリー(度)とグラードの2種類がある。

unit
degree 0.017453293
grad 0.015707963

角度1度は 1/(180/π) = 0.017453293 ラジアンであり、
グラードは1周を400グラードとする単位なので、1グラードは 1/(200/π) =0.015707963 ラジアンとなる。

ちなみにグラードを使っているSRSは6個あるが、すべて以下のとおりフランスのものである。

SRS_NAME SRS_ID(SRID)
NTF (Paris) 4807
Tananarive (Paris) 4810
Voirol 1875 (Paris) 4811
Carthage (Paris) 4816
Voirol 1879 (Paris) 4821
ATF (Paris) 4901

lat-lon 順序

 MySQLでは、ほぼすべての地理座標系で lat-lon (緯度-経度)順を採る。
しかし7件だけ lon-lat を採るものが含まれていた。すべて元となる lat-lon の定義が存在しているものなので、何らかの事情で別途 SRIDが割り振られたのだろうか。事情を知る人がいれば追加エントリなどで教えてほしい。

SRS_NAME SRS_ID(SRID)
RGTAAF07 7073
RGTAAF07 (lon-lat) 7133
RGSPM06 4463
RGSPM06 (lon-lat) 7035
RGM04 4470
RGM04 (lon-lat) 7039
RGFG95 4624
RGFG95 (lon-lat) 7041
RGR92 4627
RGR92 (lon-lat) 7037
RGAF09 5489
RGAF09 (lon-lat) 7086
RGF93 4171
RGF93 (lon-lat) 7084

TOWGS84

WGS84 への変換のためのパラメタ情報を持つものと持たないものがある。
我らが JGD2011 は持たない、JGD2000は持つ、である。日本測地系(Tokyo 1892)もTOWGS84情報を持たない。

WGS84への変換パラメタを持つものと持たないもの:

持つもの 持たないもの
329 154

TOWGS84は7つのパラメタを持つ。今の座標系からどのように並行移動、拡大縮小、回転をすればWGS84の座標位置になるのかを表しているもので、詳しくは 4年ほどまえに @boiledorange73 さんが説明してくださった記事「JGD2011の座標系にtowgs84が無いとかそもそもtowgs84って何やねん」および、それを読んで私が試してみた記事 「JGD2011からのST_Transform()、JGD2011へのST_Transform() - sakaikの日々雑感~(T)編」があるので参照していただきたい。私自身もすっかり忘れていて、久々に読み返して新鮮な気分になった。なお、MySQLに登録されている TOWGS84値の出典については今でも不明のままである。EPSG Geodetic Parameter Dataset には TOWGS84に関する情報は含まれていない。

まとめ

 以上が、MySQLの ST_SRSテーブルの情報から読み解く「地球の形」だ。 本書子午線やlat-lonや角度の単位など、ほぼ一択のものも多くあり、実質、準拠楕円体の違いが大きな部分を占めていることが分かるだろう。 想像していたよりもシンプルだったのではないだろうか。
 この情報でGISに興味を持った方や、これを見て何らかの刺激を受けてくださった方から、また色々なことを教えていただけるのを楽しみにしている。

An image by Dall-E

MySQLリリース年表(3.23~5.7)完全版 (2022.12現在)

先日、MySQLリリース年表(3.23~5.1)完全版 - sakaikの日々雑感~(T)編 という資料を公開したが、MySQL 5.2以降の情報も含めたリストを作ったので公開します。2022年10月リリースの MySQL 5.7.40 までが含まれています。MySQL 8.0 シリーズは含めていません。
 MySQL 5.2, 6.0, 5.4 などの「幻のバージョン」のリリースタイミングを見て楽しんだり、どの時期から全メジャーバージョンを同時にリリースするようになったかな、などとMySQLリリースの歴史を深く知り、楽しむのにご活用ください。

MySQL(3.23~5.7)リリース一覧 (2022年12月時点)

prodname description ver323 ver40 ver41 ver50 ver51 ver52 ver60 ver54 ver55 ver56 ver57 releasedate
MySQL Alpha 3.23.0 1999/07/05
MySQL Alpha 3.23.1 1999/07/08
MySQL Alpha 3.23.2 1999/08/09
MySQL Alpha 3.23.3 1999/09/13
MySQL Alpha 3.23.4 1999/09/28
MySQL Alpha 3.23.5 1999/10/20
MySQL Alpha 3.23.7 1999/12/10
MySQL Alpha 3.23.6 1999/12/15
MySQL Alpha 3.23.8 2000/01/02
MySQL Alpha 3.23.9 2000/01/29
MySQL Alpha 3.23.10 2000/01/30
MySQL Alpha 3.23.11 2000/02/16
MySQL Alpha 3.23.12 2000/03/07
MySQL Alpha 3.23.13 2000/03/14
MySQL Alpha 3.23.14 2000/04/09
MySQL Alpha 3.23.15 2000/05/08
MySQL Alpha 3.23.16 2000/05/16
MySQL Alpha 3.23.17 2000/06/07
MySQL Alpha 3.23.18 2000/06/11
MySQL Beta 3.23.20 2000/06/28
MySQL Beta 3.23.21 2000/07/04
MySQL Beta 3.23.22 2000/07/31
MySQL Beta 3.23.23 2000/09/01
MySQL Beta 3.23.24 2000/09/08
MySQL Beta 3.23.25 2000/09/29
MySQL Beta 3.23.26 2000/10/18
MySQL Beta 3.23.27 2000/10/24
MySQL Gamma 3.23.28 2000/11/22
MySQL Gamma 3.23.29 2000/12/16
MySQL Gamma 3.23.30 2001/01/04
MySQL Production 3.23.31 2001/01/17
MySQL 3.23.32 2001/01/22
MySQL 3.23.33 2001/02/09
MySQL 3.23.34 2001/03/10
MySQL 3.23.34a 2001/03/11
MySQL 3.23.35 2001/03/15
MySQL 3.23.36 2001/03/27
MySQL 3.23.37 2001/04/17
MySQL 3.23.38 2001/05/09
MySQL 3.23.39 2001/06/12
MySQL 3.23.40 2001/07/18
MySQL 3.23.41 2001/08/11
MySQL 3.23.42 2001/09/08
MySQL Alpha 4.0.0 2001/10/??
MySQL 3.23.43 2001/10/04
MySQL 3.23.44 2001/10/31
MySQL 3.23.45 2001/11/22
MySQL 3.23.46 2001/11/29
MySQL Alpha 4.0.1 2001/12/23
MySQL 3.23.47 2001/12/27
MySQL 3.23.48 2002/02/07
MySQL 3.23.49 2002/02/14
MySQL 3.23.50 2002/04/21
MySQL 3.23.51 2002/05/31
MySQL Alpha 4.0.2 2002/07/01
MySQL 3.23.52 2002/08/14
MySQL Beta 4.0.3 2002/08/26
MySQL Beta 4.0.4 2002/09/29
MySQL 3.23.53 2002/10/09
MySQL Beta 4.0.5 2002/11/13
MySQL 3.23.54 2002/12/05
MySQL Gamma 4.0.6 2002/12/14
MySQL Gamma 4.0.7 2002/12/20
MySQL Gamma 4.0.8 2003/01/07
MySQL Gamma 4.0.9 2003/01/09
MySQL 3.23.55 2003/01/23
MySQL Gamma 4.0.10 2003/01/29
MySQL Gamma 4.0.11 2003/02/20
MySQL 3.23.56 2003/03/13
MySQL Production 4.0.12 2003/03/15
MySQL Alpha 4.1.0 2003/04/03
MySQL 4.0.13 2003/05/16
MySQL 3.23.57 2003/06/06
MySQL 4.0.14 2003/07/18
MySQL 4.0.15 2003/09/03
MySQL 3.23.58 2003/09/11
MySQL 4.0.16 2003/10/17
MySQL Alpha 4.1.1 2003/12/01
MySQL 4.0.17 2003/12/14
MySQL Alpha 5.0.0 2003/12/22
MySQL 4.0.18 2004/02/12
MySQL 4.0.19 2004/05/04
MySQL 4.0.20 2004/05/17
MySQL Alpha 4.1.2 2004/05/28
MySQL Beta 4.1.3 2004/06/28
MySQL Alpha 5.0.1 2004/07/27
MySQL Gamma 4.1.4 2004/08/26
MySQL 4.0.21 2004/09/06
MySQL Gamma 4.1.5 2004/09/16
MySQL Gamma 4.1.6 2004/10/10
MySQL Production 4.1.7 2004/10/23
MySQL 4.0.22 2004/10/27
MySQL Alpha 5.0.2 2004/12/01
MySQL 4.1.8 2004/12/14
MySQL 4.0.23 2004/12/18
MySQL 4.1.9 2005/01/11
MySQL 4.1.10 2005/02/12
MySQL 4.0.24 2005/03/04
MySQL Beta 5.0.3 2005/03/23
MySQL 4.1.11 2005/04/01
MySQL Beta 5.0.4 2005/04/16
MySQL 4.1.12 2005/05/13
MySQL Beta 5.0.6 2005/05/26
MySQL Beta 5.0.7 2005/06/10
MySQL 4.0.25 2005/07/05
MySQL 4.1.13 2005/07/15
MySQL Beta 5.0.9 2005/07/15
MySQL Beta 5.0.10 2005/07/27
MySQL Beta 5.0.11 2005/08/06
MySQL 4.1.14 2005/08/17
MySQL Beta 5.0.12 2005/09/02
MySQL 4.0.26 2005/09/08
MySQL Release Candidate 5.0.13 2005/09/22
MySQL 4.1.15 2005/10/13
MySQL Production 5.0.15 2005/10/19
MySQL 5.0.16 2005/11/10
MySQL 4.1.16 2005/11/29
MySQL 5.1.3 2005/11/29
MySQL 5.0.17 2005/12/14
MySQL 5.0.18 2005/12/21
MySQL 5.1.4 2005/12/21
MySQL 5.1.5 2006/01/10
MySQL 4.1.18 2006/01/27
MySQL 5.1.6 2006/02/01
MySQL 5.1.7 2006/02/27
MySQL 5.0.19 2006/03/04
MySQL 5.0.20 2006/03/31
MySQL 5.1.9 2006/04/12
MySQL 5.0.20a 2006/04/18
MySQL 4.1.19 2006/04/29
MySQL 5.0.21 2006/05/02
MySQL 4.0.27 2006/05/06
MySQL 4.1.20 2006/05/24
MySQL 5.0.22 2006/05/24
MySQL 5.1.11 2006/05/26
MySQL 4.1.21 2006/07/19
MySQL 5.0.24 2006/07/27
MySQL 5.0.24a 2006/08/25
MySQL 5.0.25 2006/09/15
MySQL 5.0.26 2006/10/03
MySQL Community Server 5.0.27 2006/10/21
MySQL Enterprise 5.0.28 2006/10/24
MySQL 5.1.12 2006/10/24
MySQL 4.1.22 2006/11/02
MySQL Enterprise 5.0.30 [MRU] 2006/11/14
MySQL 5.1.14 2006/12/05
MySQL Enterprise 5.0.32 [MRU] 2006/12/20
MySQL Community Server 5.0.33 2007/01/09
MySQL Enterprise 5.0.34 [MRU] 2007/01/17
MySQL Enterprise 5.0.30sp1 [QSP] 2007/01/19
MySQL 5.1.15 2007/01/25
MySQL 5.2.3 2007/02/09
MySQL 4.0.30 2007/02/12
MySQL Enterprise 5.0.36 [MRU] 2007/02/20
MySQL 5.1.16 2007/02/26
MySQL Community Server 5.0.37 2007/02/27
MySQL Enterprise 5.0.38 [MRU] 2007/03/20
MySQL 5.1.17 2007/04/04
MySQL Enterprise 5.0.36sp1 [QSP] 2007/04/12
MySQL Enterprise 5.0.40 [MRU] 2007/04/17
MySQL Alpha 6.0.0 2007/04/30
MySQL Community Server 5.0.41 2007/05/01
MySQL 5.1.18 2007/05/08
MySQL Enterprise 5.0.42 [MRU] 2007/05/23
MySQL 5.1.19 2007/05/25
MySQL 4.1.23 2007/06/12
MySQL Enterprise 5.0.44 [MRU] 2007/06/21
MySQL 5.1.20 2007/06/25
MySQL Community Server 5.0.45 2007/07/04
MySQL Enterprise 5.0.46 [MRU] 2007/07/13
MySQL Enterprise 5.0.44sp1 [QSP] 2007/08/01
MySQL 5.1.21 2007/08/16
MySQL Enterprise 5.0.48 [MRU] 2007/08/27
MySQL 6.0.2 2007/09/04
MySQL Release Candidate 5.1.22 2007/09/24
MySQL Enterprise 5.0.50 [MRU] 2007/10/19
MySQL Community Server 5.0.51 2007/11/15
MySQL 6.0.3 2007/11/16
MySQL Enterprise 5.0.52 [MRU] 2007/11/30
MySQL Enterprise 5.0.50sp1 [QSP] 2007/12/12
MySQL Enterprise 5.0.54 [MRU] 2007/12/14
MySQL Enterprise 5.0.50sp1a [QSP] 2008/01/11
MySQL Community Server 5.0.51a 2008/01/11
MySQL Enterprise 5.0.54a [MRU] 2008/01/11
MySQL 5.1.23 2008/01/29
MySQL Enterprise 5.0.56 [MRU] 2008/02/06
MySQL 6.0.4 2008/02/12
MySQL 4.1.24 2008/03/01
MySQL Enterprise 5.0.58 [MRU] 2008/03/05
MySQL Enterprise 5.0.56sp1 [QSP] 2008/03/30
MySQL 5.1.24 2008/04/08
MySQL Community Server 5.0.51b 2008/04/24
MySQL Enterprise 5.0.60 [MRU] 2008/04/28
MySQL Enterprise 5.0.62 [MRU] 2008/05/12
MySQL 5.1.25 2008/05/28
MySQL Enterprise 5.0.64 [MRU] 2008/06/10
MySQL 6.0.5 2008/06/12
MySQL Enterprise 5.0.60sp1 [QSP] 2008/06/27
MySQL 5.1.26 2008/06/30
MySQL Enterprise 5.0.66 [MRU] 2008/07/09
MySQL Enterprise 5.0.66a [MRU] 2008/07/16
MySQL Community Server 5.0.67 2008/08/04
MySQL 6.0.6 2008/08/11
MySQL Enterprise 5.0.68 [MRU] 2008/08/13
MySQL 5.1.28 2008/08/28
MySQL Enterprise 5.0.70 [MRU] 2008/09/27
MySQL 6.0.7 2008/09/29
MySQL 5.1.29 2008/10/11
MySQL Enterprise 5.0.66sp1 [QSP] 2008/10/23
MySQL Enterprise 5.0.72 [MRU] 2008/10/24
MySQL 6.0.8 2008/11/03
MySQL General Availability 5.1.30 2008/11/14
MySQL 4.1.25 2008/12/01
MySQL Enterprise 5.0.74 [MRU] 2008/12/03
MySQL Community Server 5.0.75 2008/12/17
MySQL Enterprise 5.0.76 [MRU] 2009/01/05
MySQL 6.0.9 2009/01/10
MySQL Enterprise 5.0.72sp1 [QSP] 2009/01/13
MySQL 5.1.31 2009/01/19
MySQL Community Server 5.0.77 2009/01/28
MySQL Enterprise 5.0.78 [MRU] 2009/02/06
MySQL 5.1.32 2009/02/14
MySQL 6.0.10 2009/03/03
MySQL Enterprise 5.0.79 [MRU] 2009/03/09
MySQL 5.1.33 2009/03/13
MySQL Enterprise 5.1.31sp1 [QSP] 2009/03/19
MySQL 5.1.34 2009/04/02
MySQL Beta 5.4.0 2009/04/05
MySQL Enterprise 5.0.74sp1 [QSP] 2009/04/30
MySQL Enterprise 5.0.80 [MRU] 2009/05/01
MySQL Community Server 5.0.81 2009/05/01
MySQL 6.0.11 2009/05/11
MySQL 5.1.35 2009/05/13
MySQL 5.0.82 2009/05/20
MySQL 5.0.83 2009/05/29
MySQL 5.1.36 2009/06/16
MySQL 5.4.1 2009/06/22
MySQL Enterprise 5.1.34sp1 [QSP] 2009/06/25
MySQL 5.0.84 2009/07/07
MySQL 5.1.37 2009/07/13
MySQL Enterprise 5.0.82sp1 [QSP] 2009/07/21
MySQL 5.0.85 2009/08/11
MySQL 5.1.38 2009/09/01
MySQL 5.4.2 2009/09/01
MySQL 5.1.39 2009/09/04
MySQL 5.0.86 2009/09/09
MySQL Enterprise 5.0.84sp1 [QSP] 2009/09/30
MySQL 5.1.40 2009/10/06
MySQL 5.4.3 2009/10/06
MySQL Enterprise 5.1.37sp1 [QSP] 2009/10/10
MySQL 5.0.87 2009/10/15
MySQL 5.0.88 2009/11/04
MySQL 5.1.41 2009/11/05
MySQL Enterprise 5.1.40sp1 [QSP] 2009/11/25
MySQL 5.0.89 2009/12/02
MySQL Milestone 2 5.5.0 2009/12/07
MySQL 5.1.42 2009/12/15
MySQL Developer Milestone 5.5.1 2010/01/04
MySQL 5.0.90 2010/01/15
MySQL 5.1.43 2010/01/15
MySQL Enterprise 5.0.87sp1 [QSP] 2010/02/03
MySQL 5.1.44 2010/02/04
MySQL Developer Milestone 5.5.2 2010/02/12
MySQL 5.1.45 2010/03/01
MySQL Milestone 3 5.5.3 2010/03/24
MySQL Enterprise 5.1.43sp1 [QSP] 2010/03/25
MySQL 5.1.46 2010/04/06
MySQL Developer Milestone 5.5.4 2010/04/09
MySQL 5.0.91 2010/05/05
MySQL 5.1.47 2010/05/06
MySQL 5.1.48 2010/06/02
MySQL Enterprise 5.1.46sp1 [QSP] 2010/06/23
MySQL Developer Milestone 5.5.5 2010/07/06
MySQL 5.1.49 2010/07/09
MySQL 5.1.50 2010/08/03
MySQL 5.1.51 2010/09/10
MySQL Release Candidate 5.5.6 2010/09/13
MySQL Enterprise 5.1.49sp1 [QSP] 2010/09/28
MySQL 5.1.52 2010/10/11
MySQL Release Candidate 5.5.7 2010/10/14
MySQL 5.1.53 2010/11/03
MySQL 5.1.54 2010/11/26
MySQL General Availability 5.5.8 2010/12/03
MySQL 5.0.92 2011/02/07
MySQL 5.1.55 2011/02/07
MySQL General Availability 5.5.9 2011/02/07
MySQL Enterprise 5.1.52sp1 [QSP] 2011/02/21
MySQL 5.1.56 2011/03/01
MySQL General Availability 5.5.10 2011/03/15
MySQL General Availability 5.5.11 2011/04/07
MySQL Developer Milestone 5.6.2 2011/04/11
MySQL 5.0.93 2011/05/05
MySQL 5.1.57 2011/05/05
MySQL General Availability 5.5.12 2011/05/05
MySQL General Availability 5.5.13 2011/05/31
MySQL 5.0.94 2011/07/05
MySQL 5.1.58 2011/07/05
MySQL General Availability 5.5.14 2011/07/05
MySQL General Availability 5.5.15 2011/07/28
MySQL 5.1.59 2011/09/15
MySQL General Availability 5.5.16 2011/09/15
MySQL Milestone 6 5.6.3 2011/10/03
MySQL General Availability 5.5.17 2011/10/19
MySQL 5.1.60 2011/11/16
MySQL General Availability 5.5.18 2011/11/16
MySQL General Availability 5.5.19 2011/12/08
MySQL Milestone 7 5.6.4 2011/12/20
MySQL 5.0.95 2012/01/10
MySQL 5.1.61 2012/01/10
MySQL General Availability 5.5.20 2012/01/10
MySQL General Availability 5.5.21 2012/02/17
MySQL 5.0.96 2012/03/21
MySQL 5.1.62 2012/03/21
MySQL General Availability 5.5.22 2012/03/21
MySQL Milestone 8 5.6.5 2012/04/10
MySQL General Availability 5.5.23 2012/04/12
MySQL 5.1.63 2012/05/07
MySQL General Availability 5.5.24 2012/05/07
MySQL General Availability 5.5.25 2012/05/30
MySQL General Availability 5.5.25a 2012/07/05
MySQL General Availability 5.5.27 2012/08/02
MySQL Milestone 9 5.6.6 2012/08/07
MySQL 5.1.65 2012/08/09
MySQL 5.1.66 2012/09/28
MySQL General Availability 5.5.28 2012/09/28
MySQL Release Candidate 5.6.7 2012/09/29
MySQL Release Candidate 5.6.8 2012/11/07
MySQL Release Candidate 5.6.9 2012/12/11
MySQL 5.1.67 2012/12/21
MySQL General Availability 5.5.29 2012/12/21
MySQL 5.1.68 2013/02/05
MySQL General Availability 5.5.30 2013/02/05
MySQL General Availability 5.6.10 2013/02/05
MySQL 5.1.69 2013/04/18
MySQL General Availability 5.5.31 2013/04/18
MySQL General Availability 5.6.11 2013/04/18
MySQL Milestone 11 5.7.1 2013/04/23
MySQL 5.1.70 2013/06/03
MySQL General Availability 5.5.32 2013/06/03
MySQL General Availability 5.6.12 2013/06/03
MySQL General Availability 5.5.33 2013/07/31
MySQL General Availability 5.6.13 2013/07/31
MySQL 5.1.71 2013/08/01
MySQL 5.1.72 2013/09/20
MySQL General Availability 5.5.34 2013/09/20
MySQL General Availability 5.6.14 2013/09/20
MySQL Milestone 12 5.7.2 2013/09/21
MySQL 5.1.73 2013/12/03
MySQL General Availability 5.5.35 2013/12/03
MySQL General Availability 5.6.15 2013/12/03
MySQL Milestone 13 5.7.3 2013/12/03
MySQL General Availability 5.5.36 2014/01/31
MySQL General Availability 5.6.16 2014/01/31
MySQL General Availability 5.5.37 2014/03/27
MySQL General Availability 5.6.17 2014/03/27
MySQL Milestone 14 5.7.4 2014/03/31
MySQL General Availability 5.6.18 2014/04/11
MySQL General Availability 5.5.38 2014/05/30
MySQL General Availability 5.6.19 2014/05/30
MySQL General Availability 5.5.39 2014/07/31
MySQL General Availability 5.6.20 2014/07/31
MySQL General Availability 5.5.40 2014/09/22
MySQL General Availability 5.6.21 2014/09/23
MySQL Milestone 15 5.7.5 2014/09/25
MySQL General Availability 5.5.41 2014/11/28
MySQL General Availability 5.6.22 2014/12/01
MySQL General Availability 5.5.42 2015/02/02
MySQL General Availability 5.6.23 2015/02/02
MySQL Milestone 16 5.7.6 2015/03/09
MySQL General Availability 5.5.43 2015/04/06
MySQL General Availability 5.6.24 2015/04/06
MySQL Release Candidate 5.7.7 2015/04/08
MySQL General Availability 5.5.44 2015/05/29
MySQL General Availability 5.6.25 2015/05/29
MySQL General Availability 5.5.45 2015/07/24
MySQL General Availability 5.6.26 2015/07/24
MySQL Release Candidate 5.7.8 2015/08/03
MySQL General Availability 5.5.46 2015/09/30
MySQL General Availability 5.6.27 2015/09/30
MySQL General Availability 5.7.9 2015/10/21
MySQL General Availability 5.5.47 2015/12/07
MySQL General Availability 5.6.28 2015/12/07
MySQL General Availability 5.7.10 2015/12/07
MySQL General Availability 5.5.48 2016/02/05
MySQL General Availability 5.6.29 2016/02/05
MySQL General Availability 5.7.11 2016/02/05
MySQL General Availability 5.5.49 2016/04/11
MySQL General Availability 5.6.30 2016/04/11
MySQL General Availability 5.7.12 2016/04/11
MySQL General Availability 5.5.50 2016/06/02
MySQL General Availability 5.6.31 2016/06/02
MySQL General Availability 5.7.13 2016/06/02
MySQL General Availability 5.5.51 2016/07/29
MySQL General Availability 5.6.32 2016/07/29
MySQL General Availability 5.7.14 2016/07/29
MySQL General Availability 5.5.52 2016/09/06
MySQL General Availability 5.6.33 2016/09/06
MySQL General Availability 5.7.15 2016/09/06
MySQL General Availability 5.5.53 2016/10/12
MySQL General Availability 5.6.34 2016/10/12
MySQL General Availability 5.7.16 2016/10/12
MySQL General Availability 5.5.54 2016/12/12
MySQL General Availability 5.6.35 2016/12/12
MySQL General Availability 5.7.17 2016/12/12
MySQL General Availability 5.5.55 2017/04/10
MySQL General Availability 5.6.36 2017/04/10
MySQL General Availability 5.7.18 2017/04/10
MySQL General Availability 5.5.56 2017/05/02
MySQL General Availability 5.5.57 2017/07/17
MySQL General Availability 5.6.37 2017/07/17
MySQL General Availability 5.7.19 2017/07/17
MySQL General Availability 5.5.58 2017/10/16
MySQL General Availability 5.6.38 2017/10/16
MySQL General Availability 5.7.20 2017/10/16
MySQL General Availability 5.5.59 2018/01/15
MySQL General Availability 5.6.39 2018/01/15
MySQL General Availability 5.7.21 2018/01/15
MySQL General Availability 5.5.60 2018/04/19
MySQL General Availability 5.6.40 2018/04/19
MySQL General Availability 5.7.22 2018/04/19
MySQL General Availability 5.5.61 2018/07/27
MySQL General Availability 5.6.41 2018/07/27
MySQL General Availability 5.7.23 2018/07/27
MySQL General Availability 5.5.62 2018/10/22
MySQL General Availability 5.6.42 2018/10/22
MySQL General Availability 5.7.24 2018/10/22
MySQL General Availability 5.6.43 2019/01/21
MySQL General Availability 5.7.25 2019/01/21
MySQL General Availability 5.6.44 2019/04/25
MySQL General Availability 5.7.26 2019/04/25
MySQL General Availability 5.6.45 2019/07/22
MySQL General Availability 5.7.27 2019/07/22
MySQL General Availability 5.6.46 2019/10/14
MySQL General Availability 5.7.28 2019/10/14
MySQL General Availability 5.6.47 2020/01/13
MySQL General Availability 5.7.29 2020/01/13
MySQL General Availability 5.6.48 2020/04/27
MySQL General Availability 5.7.30 2020/04/27
MySQL General Availability 5.6.49 2020/07/13
MySQL General Availability 5.7.31 2020/07/13
MySQL General Availability 5.6.50 2020/10/19
MySQL General Availability 5.7.32 2020/10/19
MySQL General Availability 5.7.33 2021/01/18
MySQL General Availability 5.6.51 2021/01/20
MySQL General Availability 5.7.34 2021/04/20
MySQL General Availability 5.7.35 2021/07/20
MySQL General Availability 5.7.36 2021/10/19
MySQL General Availability 5.7.37 2022/01/18
MySQL General Availability 5.7.38 2022/04/26
MySQL General Availability 5.7.39 2022/07/26
MySQL General Availability 5.7.40 2022/10/11


MySQL闇歴史2 バージョン5.0

これは MySQL闇歴史 Advent Calendar 2022 の2枚目のカレンダー12日目のエントリーです。


 MySQL 5.0 ほど、MySQLの歴史の中でバージョン番号の理解が難しいバージョンはなかった。ひとつ前のバージョンはいくつなのかがすぐに把握できないという、この時代に起こった事とは。

知名度   :★★★☆☆
闇度    :★★★☆☆
把握の難易度:★★★★★


 MySQL社のSun Microsystems による買収、そして Oracle による買収の歴史を通貫して見続けてきたバージョン。それが MySQL 5.0 である。この次期、MySQLチームはMySQLのマネタイズに苦労をしていたように見える。エンタープライズ版を契約してくれた顧客にどのように分かりやすいメリットを提供するか、試行錯誤をしていたのではないだろうか。筆者はCommunity版(GPL)ユーザとして外部から見ていただけなので、想像で語るしかない部分は多いが、当たらずともと遠からずと感じている。

 MySQL5.0.27と5.0.28のリリースの際、MySQL社は突然「エンタプライズ版とコミュニティ版のバージョンを分ける」ことを発表した。奇数番号はコミュニティ版、偶数番号はエンタープライズ版とする、ということだった。
 エンタープライズ版は、顧客に対する「迅速に最新の修正状態を提供する」というメリット提供のためか、ほぼ毎月のようにリリースされていた。偶数番号のみを使って、である。
 一方のコミュニティ版は、エンタープライズ版ほどには頻繁にリリースされないので、奇数番号は欠番となるバージョン番号が続出した。

 ところでMySQLには、内部でのバージョン番号処理の一部に「X.Y.Z 形式のバージョン番号それぞれの要素は2桁までしか使えない」という制約がある。偶数番号がものすごい早さで消費され、このままのリリースペースで行くとマイナーバージョン(X.Y.ZのZの部分)が99を超えるぞ!どうするMySQL!? と ざわざわ し始めた頃、MySQL 5.0.82 にてエンタープライズ版とコミュニティ版のバージョン番号が統合されることになった。この統合の発表があってからも約3年間、MySQL5.0のアップデートは継続され、2012年3月に MySQL 5.0.96 が最後のバージョンとなった。ギリギリ2ケタで間にあった。めでたしめでたし。


 付録として、MySQL 5.0 のエンタープライズ版としてリリースされたバージョンの履歴、ならびに、コミュニティ版としてリリースされた履歴を紹介しておく。コミュニティ版のバージョンがひどく飛んでいたことが分かると思う。
 エンタープライズ版の MRU や QSP については詳しい人の説明に期待したい(Monthly や Quick のような意味だと想像する)。


.

付録:MySQL Enterprise 5.0 リリース履歴(Community版と分離時期)

種別 バージョン リリース日
MySQL Enterprise 5.0.28 2006/10/24
MySQL Enterprise 5.0.30 [MRU] 2006/11/14
MySQL Enterprise 5.0.32 [MRU] 2006/12/20
MySQL Enterprise 5.0.34 [MRU] 2007/01/17
MySQL Enterprise 5.0.30sp1 [QSP] 2007/01/19
MySQL Enterprise 5.0.36 [MRU] 2007/02/20
MySQL Enterprise 5.0.38 [MRU] 2007/03/20
MySQL Enterprise 5.0.36sp1 [QSP] 2007/04/12
MySQL Enterprise 5.0.40 [MRU] 2007/04/17
MySQL Enterprise 5.0.42 [MRU] 2007/05/23
MySQL Enterprise 5.0.44 [MRU] 2007/06/21
MySQL Enterprise 5.0.46 [MRU] 2007/07/13
MySQL Enterprise 5.0.44sp1 [QSP] 2007/08/01
MySQL Enterprise 5.0.48 [MRU] 2007/08/27
MySQL Enterprise 5.0.50 [MRU] 2007/10/19
MySQL Enterprise 5.0.52 [MRU] 2007/11/30
MySQL Enterprise 5.0.50sp1 [QSP] 2007/12/12
MySQL Enterprise 5.0.54 [MRU] 2007/12/14
MySQL Enterprise 5.0.50sp1a [QSP] 2008/01/11
MySQL Enterprise 5.0.54a [MRU] 2008/01/11
MySQL Enterprise 5.0.56 [MRU] 2008/02/06
MySQL Enterprise 5.0.58 [MRU] 2008/03/05
MySQL Enterprise 5.0.56sp1 [QSP] 2008/03/30
MySQL Enterprise 5.0.60 [MRU] 2008/04/28
MySQL Enterprise 5.0.62 [MRU] 2008/05/12
MySQL Enterprise 5.0.64 [MRU] 2008/06/10
MySQL Enterprise 5.0.60sp1 [QSP] 2008/06/27
MySQL Enterprise 5.0.66 [MRU] 2008/07/09
MySQL Enterprise 5.0.66a [MRU] 2008/07/16
MySQL Enterprise 5.0.68 [MRU] 2008/08/13
MySQL Enterprise 5.0.70 [MRU] 2008/09/27
MySQL Enterprise 5.0.66sp1 [QSP] 2008/10/23
MySQL Enterprise 5.0.72 [MRU] 2008/10/24
MySQL Enterprise 5.0.74 [MRU] 2008/12/03
MySQL Enterprise 5.0.76 [MRU] 2009/01/05
MySQL Enterprise 5.0.72sp1 [QSP] 2009/01/13
MySQL Enterprise 5.0.78 [MRU] 2009/02/06
MySQL Enterprise 5.0.79 [MRU] 2009/03/09
MySQL Enterprise 5.0.74sp1 [QSP] 2009/04/30
MySQL Enterprise 5.0.80 [MRU] 2009/05/01


.

付録:MySQL Community 5.0 リリース履歴(Enterpriseとの分離時期とその前後)

5.0.51の次のバージョンが5.0.67だったり(その間9ヶ月間リリースされなかった)、5.0.75はソースコードのみのリリースだったりするなど(参考:MySQL 5.0.75 リリース - sakaikの日々雑感~(T)編)、コミュニティ版ユーザにとっては忍耐の時期だったとも言えそうだ。

種別 バージョン リリース日
MySQL 5.0.26 2006/10/03
MySQL Community Server 5.0.27 2006/10/21
MySQL Community Server 5.0.33 2007/01/09
MySQL Community Server 5.0.37 2007/02/27
MySQL Community Server 5.0.41 2007/05/01
MySQL Community Server 5.0.45 2007/07/04
MySQL Community Server 5.0.51 2007/11/15
MySQL Community Server 5.0.51a 2008/01/11
MySQL Community Server 5.0.51b 2008/04/24
MySQL Community Server 5.0.67 2008/08/04
MySQL Community Server 5.0.75 2008/12/17
MySQL Community Server 5.0.77 2009/01/28
MySQL Community Server 5.0.81 2009/05/01
MySQL 5.0.82 2009/05/20
An image by Dall-E

MySQL闇歴史2 続・MySQLの"My"の由来(その歴史編)

これは MySQL闇歴史 Advent Calendar 2022 の2枚目のカレンダー11日目のエントリーです。


 先日、『MySQLの"My"の由来』と題するエントリーで、”MySQLのMy"に関する歴史を紹介した。
sakaik.hateblo.jp


 その後、指摘をいただいて調査を行ったところ、

『以前(MySQL 3.23/4.0/4.1マニュアルどおり)のシンプルな説明に書き戻されている。』

という部分に事実誤認があることがわかった。誤報をお詫びするとともに、”My"に何が起こったのか、本エントリで紹介したい。おそらく、MySQLのネーミングの説明に関して、世界初のまとまった情報となっていることと思う。


知名度 :☆☆☆☆☆
闇度  :★★★★★
ヌマ度 :★★★★★



 前回のエントリでは、MySQLのマニュアルにおいて「MySQLのMyは娘さんの名前である」→「そうじゃないかもしれない」→「娘の名前である」の変遷を辿ったという認識のもと、そのように紹介した。
 しかし、実際には「そうじゃないかもしれない」→「娘の名前である」の一方通行であることがわかった。状況の把握をややこしくしていたのは、メジャーバージョンをまたいだ時系列の把握の難しさに加え、翻訳版を判断材料にしてしまったことによるタイムラグ(翻訳開始時のバージョンに固定される)である。

調査結果を紹介しよう。

"My" の起源説明は主に3種

 MySQLリファレンスマニュアルにおける "My"の由来の説明は、時代により大きく3つのバージョンが存在する。本エントリではそれぞれに以下のように命名する。

パターン1. 前期諸説:「諸説あります」だが Myさんのお歳について触れている

The derivation of the name MySQL is not perfectly clear. Our base directory and a large number of our libraries and tools have had the prefix "my" for well over 10 years. However, Monty's daughter (some years younger) is also named My. Which of the two gave its name to MySQL is still a mystery, even for us.

「由来はよくわかんないんだよね。10年以上前からフォルダとかファイル名の接頭辞に "my" ってつけていたし。あっ、だけどモンティの娘さんの名前も "My"なんだよ(もっと若いけどね)、どっちがMySQLの名前の由来になったのかは我々にとってもミステリーなんだ」

パターン2. 後期諸説:「諸説あります」だが Myさんのお歳の話が削除されているとともにモンティが何者かの説明が加えられた

The derivation of the name MySQL is not clear. Our base directory and a large number of our libraries and tools have had the prefix "my" for well over 10 years. However, co-founder Monty Widenius's daughter is also named My. Which of the two gave its name to MySQL is still a mystery, even for us.

パターン3. 言い切り:娘さんの名前だと言い切っている

MySQL is named after co-founder Monty Widenius's daughter, My.

記述変化の時期

 調査の結果、これらの記述はきれいに時系列に従って変化していることがわかった。つまり、メジャーバージョンをまたいだ場合でも記述が逆戻りすることはなく、あるタイミングを境に一斉に変更されたものと思われる。(なお、日付はリリース日をベースとしているが、ドキュメントに記述されているバージョンが必ずしもリリースバージョンと一致している訳ではない等、適宜斟酌されたし)

リリース日 Ver 4.0以前 Ver 4.1 Ver 5.0 Ver5.1 記述
: : : : : :
2003/03/15 4.0.12 前期諸説
2003/12/01 4.1.1-alpha 前期諸説
2003/12/22 5.0.0-alpha 後期諸説
2004/05/17 4.0.20a 後期諸説
2004/10/23 4.1.7 後期諸説
: : : :
2006/11/02 4.1.22 後期諸説
2007/01/17 5.0.34 後期諸説
2007/01/25 5.1.15-beta(ja) 後期諸説
2007/07/13 5.0.46 言い切り
2008/03/01 4.1.24 言い切り
2008/08/28 5.1.28 言い切り
: : : : :

 今回、説明の切り替えが概ね、
2003年12月に「数年若い」の記述が削除(前期諸説→後期諸説への変化)
2007年前半に言い切りへと変化(諸説2→言い切りへの変化)
が起こったことがわかった。

実は更に細かいバリエーションがある

 今回は "My" の由来に関する記述を大きく3つに分類したが、実際にはもう少し細かいバリエーションがある。

前期諸説以前、今回確認が取れた最古のマニュアル「MySQL 3.21.30」では以下の記述となっている。内容は前期諸説とほぼ同じだが、表現方法がやや異なる。

It is not perfectly clear where the name MySQL derives from. Our base directory and a large amount of our libraries and tools have had the prefix "my" for well over 10 years. However, Monty's daughter (some years younger) is also named My. So which of the two gave its name to MySQL is still a mystery, even for us.


そして前期諸説を経て:

The derivation of the name MySQL is not perfectly clear. Our base directory and a large number of our libraries and tools have had the prefix "my" for well over 10 years. However, Monty's daughter (some years younger) is also named My. So which of the two gave its name to MySQL is still a mystery, even for us.

2001年10月の MySQL 4.0.0-alpha で「So」が削除された。

The derivation of the name MySQL is not perfectly clear. Our base directory and a large number of our libraries and tools have had the prefix "my" for well over 10 years. However, Monty's daughter (some years younger) is also named My. Which of the two gave its name to MySQL is still a mystery, even for us.

後期諸説に移行する直前の MySQL 4.1.1-alpha(2003/12/01)では、”perfectly" が削除されるとともに、モンティ氏が co-founder であることの説明が追加された。「もちょっと若い」の記述は残っているので、今回は「前期諸説」に分類した。

The derivation of the name MySQL is not clear. Our base directory and a large number of our libraries and tools have had the prefix "my" for well over 10 years. However, co-founder Monty Widenius's daughter (some years younger) is also named My. Which of the two gave its name to MySQL is still a mystery, even for us.

その直後の MySQL 5.0.0-alph(2003/12/22)では、括弧書きの「もちょっと若い」が削除されて後期諸説時代へ入ったことは、前述したとおりである。

The derivation of the name MySQL is not clear. Our base directory and a large number of our libraries and tools have had the prefix "my" for well over 10 years. However, co-founder Monty Widenius's daughter is also named My. Which of the two gave its name to MySQL is still a mystery, even for us.

マニュアルすごい

 今回の調査にあたってさまざまなタイミングでのMySQLマニュアルを探す過程で、探り当てた最古のマニュアルが MySQL 3.21.30だ。章立てなどの基本構成や、記述の細かさなど、今見てもまったく見劣りせずしっかりしたマニュアルである。黎明期よりMySQLが多くの人に指示されたのは、充実したマニュアルの存在も大きかったのではないかと推察した。ファウンダーの皆さんの先見の明とご配慮に感服と共に感謝する次第である。

筆者の苦労の調査の痕跡


MySQLリリース年表(3.23~5.1)完全版

 MySQLの各バージョンのリリース年表を作って見た。
MySQL闇歴史」アドベントカレンダーの記事のための調査をしている中で、今以上に入り組んでリリースされていた初期MySQLのリリース順番を改めて確認したくなったことがきっかけだ。

 まずは成果を見てもらいたい。 じゃーん。

MySQL(3.23~5.1)リリース一覧

prodname description ver323 ver40 ver41 ver50 ver51 releasedate
MySQL Alpha 3.23.0 1999/07/05
MySQL Alpha 3.23.1 1999/07/08
MySQL Alpha 3.23.2 1999/08/09
MySQL Alpha 3.23.3 1999/09/13
MySQL Alpha 3.23.4 1999/09/28
MySQL Alpha 3.23.5 1999/10/20
MySQL Alpha 3.23.7 1999/12/10
MySQL Alpha 3.23.6 1999/12/15
MySQL Alpha 3.23.8 2000/01/02
MySQL Alpha 3.23.9 2000/01/29
MySQL Alpha 3.23.10 2000/01/30
MySQL Alpha 3.23.11 2000/02/16
MySQL Alpha 3.23.12 2000/03/07
MySQL Alpha 3.23.13 2000/03/14
MySQL Alpha 3.23.14 2000/04/09
MySQL Alpha 3.23.15 2000/05/08
MySQL Alpha 3.23.16 2000/05/16
MySQL Alpha 3.23.17 2000/06/07
MySQL Alpha 3.23.18 2000/06/11
MySQL Beta 3.23.20 2000/06/28
MySQL Beta 3.23.21 2000/07/04
MySQL Beta 3.23.22 2000/07/31
MySQL Beta 3.23.23 2000/09/01
MySQL Beta 3.23.24 2000/09/08
MySQL Beta 3.23.25 2000/09/29
MySQL Beta 3.23.26 2000/10/18
MySQL Beta 3.23.27 2000/10/24
MySQL Gamma 3.23.28 2000/11/22
MySQL Gamma 3.23.29 2000/12/16
MySQL Gamma 3.23.30 2001/01/04
MySQL Production 3.23.31 2001/01/17
MySQL 3.23.32 2001/01/22
MySQL 3.23.33 2001/02/09
MySQL 3.23.34 2001/03/10
MySQL 3.23.34a 2001/03/11
MySQL 3.23.35 2001/03/15
MySQL 3.23.36 2001/03/27
MySQL 3.23.37 2001/04/17
MySQL 3.23.38 2001/05/09
MySQL 3.23.39 2001/06/12
MySQL 3.23.40 2001/07/18
MySQL 3.23.41 2001/08/11
MySQL 3.23.42 2001/09/08
MySQL Alpha 4.0.0 2001/10/??
MySQL 3.23.43 2001/10/04
MySQL 3.23.44 2001/10/31
MySQL 3.23.45 2001/11/22
MySQL 3.23.46 2001/11/29
MySQL Alpha 4.0.1 2001/12/23
MySQL 3.23.47 2001/12/27
MySQL 3.23.48 2002/02/07
MySQL 3.23.49 2002/02/14
MySQL 3.23.50 2002/04/21
MySQL 3.23.51 2002/05/31
MySQL Alpha 4.0.2 2002/07/01
MySQL 3.23.52 2002/08/14
MySQL Beta 4.0.3 2002/08/26
MySQL Beta 4.0.4 2002/09/29
MySQL 3.23.53 2002/10/09
MySQL Beta 4.0.5 2002/11/13
MySQL 3.23.54 2002/12/05
MySQL Gamma 4.0.6 2002/12/14
MySQL Gamma 4.0.7 2002/12/20
MySQL Gamma 4.0.8 2003/01/07
MySQL Gamma 4.0.9 2003/01/09
MySQL 3.23.55 2003/01/23
MySQL Gamma 4.0.10 2003/01/29
MySQL Gamma 4.0.11 2003/02/20
MySQL 3.23.56 2003/03/13
MySQL Production 4.0.12 2003/03/15
MySQL Alpha 4.1.0 2003/04/03
MySQL 4.0.13 2003/05/16
MySQL 3.23.57 2003/06/06
MySQL 4.0.14 2003/07/18
MySQL 4.0.15 2003/09/03
MySQL 3.23.58 2003/09/11
MySQL 4.0.16 2003/10/17
MySQL Alpha 4.1.1 2003/12/01
MySQL 4.0.17 2003/12/14
MySQL Alpha 5.0.0 2003/12/22
MySQL 4.0.18 2004/02/12
MySQL 4.0.19 2004/05/04
MySQL 4.0.20 2004/05/17
MySQL Alpha 4.1.2 2004/05/28
MySQL Beta 4.1.3 2004/06/28
MySQL Alpha 5.0.1 2004/07/27
MySQL Gamma 4.1.4 2004/08/26
MySQL 4.0.21 2004/09/06
MySQL Gamma 4.1.5 2004/09/16
MySQL Gamma 4.1.6 2004/10/10
MySQL Production 4.1.7 2004/10/23
MySQL 4.0.22 2004/10/27
MySQL Alpha 5.0.2 2004/12/01
MySQL 4.1.8 2004/12/14
MySQL 4.0.23 2004/12/18
MySQL 4.1.9 2005/01/11
MySQL 4.1.10 2005/02/12
MySQL 4.0.24 2005/03/04
MySQL Beta 5.0.3 2005/03/23
MySQL 4.1.11 2005/04/01
MySQL Beta 5.0.4 2005/04/16
MySQL 4.1.12 2005/05/13
MySQL Beta 5.0.6 2005/05/26
MySQL Beta 5.0.7 2005/06/10
MySQL 4.0.25 2005/07/05
MySQL Beta 5.0.9 2005/07/15
MySQL 4.1.13 2005/07/15
MySQL Beta 5.0.10 2005/07/27
MySQL Beta 5.0.11 2005/08/06
MySQL 4.1.14 2005/08/17
MySQL Beta 5.0.12 2005/09/02
MySQL 4.0.26 2005/09/08
MySQL Release Candidate 5.0.13 2005/09/22
MySQL 4.1.15 2005/10/13
MySQL Production 5.0.15 2005/10/19
MySQL 5.0.16 2005/11/10
MySQL 5.1.3 2005/11/29
MySQL 4.1.16 2005/11/29
MySQL 5.0.17 2005/12/14
MySQL 5.1.4 2005/12/21
MySQL 5.0.18 2005/12/21
MySQL 5.1.5 2006/01/10
MySQL 4.1.18 2006/01/27
MySQL 5.1.6 2006/02/01
MySQL 5.1.7 2006/02/27
MySQL 5.0.19 2006/03/04
MySQL 5.0.20 2006/03/31
MySQL 5.1.9 2006/04/12
MySQL 5.0.20a 2006/04/18
MySQL 4.1.19 2006/04/29
MySQL 5.0.21 2006/05/02
MySQL 4.0.27 2006/05/06
MySQL 4.1.20 2006/05/24
MySQL 5.0.22 2006/05/24
MySQL 5.1.11 2006/05/26
MySQL 4.1.21 2006/07/19
MySQL 5.0.24 2006/07/27
MySQL 5.0.24a 2006/08/25
MySQL 5.0.25 2006/09/15
MySQL 5.0.26 2006/10/03
MySQL Community Server 5.0.27 2006/10/21
MySQL Enterprise 5.0.28 2006/10/24
MySQL 5.1.12 2006/10/24
MySQL 4.1.22 2006/11/02
MySQL Enterprise 5.0.30 [MRU] 2006/11/14
MySQL 5.1.14 2006/12/05
MySQL Enterprise 5.0.32 [MRU] 2006/12/20
MySQL Community Server 5.0.33 2007/01/09
MySQL Enterprise 5.0.34 [MRU] 2007/01/17
MySQL Enterprise 5.0.30sp1 [QSP] 2007/01/19
MySQL 5.1.15 2007/01/25
MySQL 4.0.30 2007/02/12
MySQL Enterprise 5.0.36 [MRU] 2007/02/20
MySQL 5.1.16 2007/02/26
MySQL Community Server 5.0.37 2007/02/27
MySQL Enterprise 5.0.38 [MRU] 2007/03/20
MySQL 5.1.17 2007/04/04
MySQL Enterprise 5.0.36sp1 [QSP] 2007/04/12
MySQL Enterprise 5.0.40 [MRU] 2007/04/17
MySQL Community Server 5.0.41 2007/05/01
MySQL 5.1.18 2007/05/08
MySQL Enterprise 5.0.42 [MRU] 2007/05/23
MySQL 5.1.19 2007/05/25
MySQL 4.1.23 2007/06/12
MySQL Enterprise 5.0.44 [MRU] 2007/06/21
MySQL 5.1.20 2007/06/25
MySQL Community Server 5.0.45 2007/07/04
MySQL Enterprise 5.0.46 [MRU] 2007/07/13
MySQL Enterprise 5.0.44sp1 [QSP] 2007/08/01
MySQL 5.1.21 2007/08/16
MySQL Enterprise 5.0.48 [MRU] 2007/08/27
MySQL Release Candidate 5.1.22 2007/09/24
MySQL Enterprise 5.0.50 [MRU] 2007/10/19
MySQL Community Server 5.0.51 2007/11/15
MySQL Enterprise 5.0.52 [MRU] 2007/11/30
MySQL Enterprise 5.0.50sp1 [QSP] 2007/12/12
MySQL Enterprise 5.0.54 [MRU] 2007/12/14
MySQL Enterprise 5.0.54a [MRU] 2008/01/11
MySQL Community Server 5.0.51a 2008/01/11
MySQL Enterprise 5.0.50sp1a [QSP] 2008/01/11
MySQL 5.1.23 2008/01/29
MySQL Enterprise 5.0.56 [MRU] 2008/02/06
MySQL 4.1.24 2008/03/01
MySQL Enterprise 5.0.58 [MRU] 2008/03/05
MySQL Enterprise 5.0.56sp1 [QSP] 2008/03/30
MySQL 5.1.24 2008/04/08
MySQL Community Server 5.0.51b 2008/04/24
MySQL Enterprise 5.0.60 [MRU] 2008/04/28
MySQL Enterprise 5.0.62 [MRU] 2008/05/12
MySQL 5.1.25 2008/05/28
MySQL Enterprise 5.0.64 [MRU] 2008/06/10
MySQL Enterprise 5.0.60sp1 [QSP] 2008/06/27
MySQL 5.1.26 2008/06/30
MySQL Enterprise 5.0.66 [MRU] 2008/07/09
MySQL Enterprise 5.0.66a [MRU] 2008/07/16
MySQL Community Server 5.0.67 2008/08/04
MySQL Enterprise 5.0.68 [MRU] 2008/08/13
MySQL 5.1.28 2008/08/28
MySQL Enterprise 5.0.70 [MRU] 2008/09/27
MySQL 5.1.29 2008/10/11
MySQL Enterprise 5.0.66sp1 [QSP] 2008/10/23
MySQL Enterprise 5.0.72 [MRU] 2008/10/24
MySQL General Availability 5.1.30 2008/11/14
MySQL 4.1.25 2008/12/01
MySQL Enterprise 5.0.74 [MRU] 2008/12/03
MySQL Community Server 5.0.75 2008/12/17
MySQL Enterprise 5.0.76 [MRU] 2009/01/05
MySQL Enterprise 5.0.72sp1 [QSP] 2009/01/13
MySQL 5.1.31 2009/01/19
MySQL Community Server 5.0.77 2009/01/28
MySQL Enterprise 5.0.78 [MRU] 2009/02/06
MySQL 5.1.32 2009/02/14
MySQL Enterprise 5.0.79 [MRU] 2009/03/09
MySQL 5.1.33 2009/03/13
MySQL Enterprise 5.1.31sp1 [QSP] 2009/03/19
MySQL 5.1.34 2009/04/02
MySQL Enterprise 5.0.74sp1 [QSP] 2009/04/30
MySQL Community Server 5.0.81 2009/05/01
MySQL Enterprise 5.0.80 [MRU] 2009/05/01
MySQL 5.1.35 2009/05/13
MySQL 5.0.82 2009/05/20
MySQL 5.0.83 2009/05/29
MySQL 5.1.36 2009/06/16
MySQL Enterprise 5.1.34sp1 [QSP] 2009/06/25
MySQL 5.0.84 2009/07/07
MySQL 5.1.37 2009/07/13
MySQL Enterprise 5.0.82sp1 [QSP] 2009/07/21
MySQL 5.0.85 2009/08/11
MySQL 5.1.38 2009/09/01
MySQL 5.1.39 2009/09/04
MySQL 5.0.86 2009/09/09
MySQL Enterprise 5.0.84sp1 [QSP] 2009/09/30
MySQL 5.1.40 2009/10/06
MySQL Enterprise 5.1.37sp1 [QSP] 2009/10/10
MySQL 5.0.87 2009/10/15
MySQL 5.0.88 2009/11/04
MySQL 5.1.41 2009/11/05
MySQL Enterprise 5.1.40sp1 [QSP] 2009/11/25
MySQL 5.0.89 2009/12/02
MySQL 5.1.42 2009/12/15
MySQL 5.1.43 2010/01/15
MySQL 5.0.90 2010/01/15
MySQL Enterprise 5.0.87sp1 [QSP] 2010/02/03
MySQL 5.1.44 2010/02/04
MySQL 5.1.45 2010/03/01
MySQL Enterprise 5.1.43sp1 [QSP] 2010/03/25
MySQL 5.1.46 2010/04/06
MySQL 5.0.91 2010/05/05
MySQL 5.1.47 2010/05/06
MySQL 5.1.48 2010/06/02
MySQL Enterprise 5.1.46sp1 [QSP] 2010/06/23
MySQL 5.1.49 2010/07/09
MySQL 5.1.50 2010/08/03
MySQL 5.1.51 2010/09/10
MySQL Enterprise 5.1.49sp1 [QSP] 2010/09/28
MySQL 5.1.52 2010/10/11
MySQL 5.1.53 2010/11/03
MySQL 5.1.54 2010/11/26
MySQL 5.0.92 2011/02/07
MySQL 5.1.55 2011/02/07
MySQL Enterprise 5.1.52sp1 [QSP] 2011/02/21
MySQL 5.1.56 2011/03/01
MySQL 5.0.93 2011/05/05
MySQL 5.1.57 2011/05/05
MySQL 5.1.58 2011/07/05
MySQL 5.0.94 2011/07/05
MySQL 5.1.59 2011/09/15
MySQL 5.1.60 2011/11/16
MySQL 5.0.95 2012/01/10
MySQL 5.1.61 2012/01/10
MySQL 5.1.62 2012/03/21
MySQL 5.0.96 2012/03/21
MySQL 5.1.63 2012/05/07
MySQL 5.1.65 2012/08/09
MySQL 5.1.66 2012/09/28
MySQL 5.1.67 2012/12/21
MySQL 5.1.68 2013/02/05
MySQL 5.1.69 2013/04/18
MySQL 5.1.70 2013/06/03
MySQL 5.1.71 2013/08/01
MySQL 5.1.72 2013/09/20
MySQL 5.1.73 2013/12/03

※ Not released なバージョンは掲載していない

どうやったか

 本資料は、以下の手順で作成した。

1. 各バージョンのRelease note より、バージョン番号と日付の一覧を取得し、手作業で泥臭く成形して tsv ファイルを作成
2. MySQLに格納用のテーブルを作成

CREATE TABLE myhist ( prodname varchar(30), ver varchar(20), releasedate 
varchar(10), description varchar(30));

3. tsvファイルのデータをロード

LOAD DATA LOCAL INFILE '/home/sakaik/work/mysql_history.txt'  INTO TABLE myhist FIELDS TERMINATED BY '\t';

 ロードを試みたところ「ERROR 3948 (42000): Loading local data is disabled; this must be enabled on both the client and server sides」というエラーが発生したが、@mita2 さんのブログのおかげで瞬時に解決した。御礼申し上げる。

MySQL 8.0 の LOAD DATA で The used command is not allowed with this MySQL version エラー - mita2 database life


なお、local_infile は GLOBAL で設定すること。セッションでの設定を試みるとエラーとなる。

mysql> SET local_infile=on;
ERROR 1229 (HY000): Variable 'local_infile' is a GLOBAL variable and should be set with SET GLOBAL

4.クエリ実行

mysql> SELECT prodname, description ,
    ->   CASE WHEN ver LIKE '3.23%' THEN ver ELSE '' END ver323,
    ->   CASE WHEN ver LIKE '4.0%' THEN ver ELSE '' END ver40,
    ->   CASE WHEN ver LIKE '4.1%' THEN ver ELSE '' END ver41,
    ->   CASE WHEN ver LIKE '5.0%' THEN ver ELSE '' END ver50,
    ->   CASE WHEN ver LIKE '5.1%' THEN ver ELSE '' END ver51,
    ->   releasedate
    ->  FROM myhist 
    -> WHERE releasedate is not null
    -> ORDER BY releasedate;

 これにより、冒頭で紹介した結果を得た。

もう少しお遊び

 かつてのMySQLは、月に何度もリリースされることもザラにあった。もっとも1ヶ月間でリリースされた回数が多かったのはいつなのだろう、と調べてみた。結果は少々予想していたものと異なり、複数バージョンを同時並行でメンテしていた時期のものが上位に含まれるものとなったが、その中で、 MySQL 3.23 が1ヶ月の間に4度リリースされているのが目に留まる。スピード感と勢いがありましたね、あの頃。
 

mysql> SELECT 
    ->   COUNT(*) OVER (PARTITION BY SUBSTR(releasedate, 1, 7))  cnt,
    ->   SUBSTR(releasedate, 1, 7) ym, 
    ->   releasedate,
    ->   ver, description
    -> FROM myhist
    -> WHERE releasedate IS NOT NULL
    -> ORDER BY cnt DESC, releasedate ASC
    -> LIMIT 22;
+-----+---------+-------------+--------------+-------------+
| cnt | ym      | releasedate | ver          | description |
+-----+---------+-------------+--------------+-------------+
|   5 | 2006/05 | 2006/05/02  | 5.0.21       |             |
|   5 | 2006/05 | 2006/05/06  | 4.0.27       |             |
|   5 | 2006/05 | 2006/05/24  | 4.1.20       |             |
|   5 | 2006/05 | 2006/05/24  | 5.0.22       |             |
|   5 | 2006/05 | 2006/05/26  | 5.1.11       |             |
|   5 | 2009/05 | 2009/05/01  | 5.0.80 [MRU] |             |
|   5 | 2009/05 | 2009/05/01  | 5.0.81       |             |
|   5 | 2009/05 | 2009/05/13  | 5.1.35       |             |
|   5 | 2009/05 | 2009/05/20  | 5.0.82       |             |
|   5 | 2009/05 | 2009/05/29  | 5.0.83       |             |
|   4 | 2001/03 | 2001/03/10  | 3.23.34      |             |
|   4 | 2001/03 | 2001/03/11  | 3.23.34a     |             |
|   4 | 2001/03 | 2001/03/15  | 3.23.35      |             |
|   4 | 2001/03 | 2001/03/27  | 3.23.36      |             |
|   4 | 2003/01 | 2003/01/07  | 4.0.8        | Gamma       |
|   4 | 2003/01 | 2003/01/09  | 4.0.9        | Gamma       |
|   4 | 2003/01 | 2003/01/23  | 3.23.55      |             |
|   4 | 2003/01 | 2003/01/29  | 4.0.10       | Gamma       |
|   4 | 2005/07 | 2005/07/05  | 4.0.25       |             |
|   4 | 2005/07 | 2005/07/15  | 4.1.13       |             |
|   4 | 2005/07 | 2005/07/15  | 5.0.9        | Beta        |
|   4 | 2005/07 | 2005/07/27  | 5.0.10       | Beta        |
+-----+---------+-------------+--------------+-------------+
22 rows in set (0.00 sec)


.

An image by Dall-E

MySQL闇歴史2 MySQLの"My"の由来

これは MySQL闇歴史 Advent Calendar 2022 の2枚目のカレンダー8日目のエントリーです。

.
 MySQLという名前の「My」の部分は、MySQL初期開発者のモンティ氏の娘さんの名前に由来することは、今やすべての人が知る事実である。
しかし一瞬、そうでないかもしれない時期があったことは、ほぼ知られていない。
(追記:本内容には、多少の事実誤認が含まれていることが判明した。待て続報)

知名度   :☆☆☆☆☆
闇度    :★★★★☆
歴史の証人度:★★★★★

 MySQLのMyやMariaDBのMaria、MaxDBのMaxなどは、モンティ氏の家族の名前に由来することは、『MySQL闇歴史アドベントカレンダー3日目 MaxDB』 でも紹介された。
 このことは、MySQL 8.0 リファレンスマニュアルにも明記されている。

MySQL 8.0マニュアル(en):

MySQL 8.0マニュアル(ja):


 この「My」が娘さんの名前に由来するわけではないとされた時代が、実はあった。昨日の 『MySQL闇歴史2 MySQLの製品版にRENAME DATABASEはあったことがない』 でも紹介された、MySQL 5.1の日本語マニュアルだ。

 そこにはこう書かれている。

MySQL 5.1-betaマニュアル(ja):

 日本語マニュアル作成時に、誰かが自分の意見を入れたのではないかという説も捨てきれないので、英語マニュアルを確認する必要がある。
対応するレイアウト済の英語マニュアルは所持していなかったが、同マニュアルを翻訳した際の元ネタとなったファイルが出てきたので、該当部分を紹介する。

 やはり英語版でも、"My"は「娘さんではなかったかもしれない」のだ。

なお、その後の MySQL 5.1 リファレンスマニュアル(現在入手可能なものを含む)では、この部分はバッサリとカットされて、以前(MySQL 3.23/4.0/4.1マニュアルどおり)のシンプルな説明に書き戻されている。beta版のマニュアルを見たモンティ氏から「誰だこれ書いたのは!Myは俺の娘の名前由来だ!」とお叱りを受けたのかもしれない。

現在の MySQL 5.1マニュアル(en):


 MySQL 5.1の日本語マニュアルは、MySQLの闇歴史に触れることができるネタの宝庫と言えそうだ。余談だが、現在の MySQL 5.1マニュアルには存在しない「MySQL AB の概要」という節も、この日本語マニュアルには含まれている。

追記

 その後の調査により、もう少し複雑な変遷をたどったことが見えつつあります。週末頃までに別途、追加情報を書くかもしれません。

.