空飛ぶITコンサルタント(中小企業診断士ヨシダ)

2018年中小企業診断士登録予定のヨシダが、SEOとEC導入支援の現場についてお伝えします。

OracleとMysqlの「length関数仕様」に見る差別化

ヨシダです。
今日は技術者として、DBMS御三家の2つ、OracleMySQLAWS Auroraも含む)の
length関数の仕様違いに怒り心頭ですので、不満をブチまけます。
また、データ移行というニッチ分野の苦労話を少しします。

1.その前にDBMSシェアについて

f:id:yoshidaagri:20180421063831p:plain

これは DB−engineというサイトの統計資料。世の中のシステムにおけるDBMSのシェアを表しています。
これを見て思うことは、私が社会人1年生だった頃、MySQLは2位ではなかったし、DB2はこんなに順位は低くなかった印象です。MySQL躍進の理由はAWS AuroraがMySQLベースだからでしょう。
 

2.今日の本題「length関数」

DBにも様々な便利機能を持った関数が準備されています。このような便利機能をアピールして、製品の差別化を行っている訳です。
 
DBの問い合わせ言語SQLの中で、length関数は例えば「length(文字列X)」と使うと文字列Xの長さを返してくれます。
 
但し、長さの返し方両DBで異なりますOracleは文字数を返しMySQLはバイト数を返してきます。
 
???な皆様、事例を提示します。
例)UTF-8環境で「サクラサク」をlength関数で長さ測定した場合
----------------
length('サクラサク');
 Oracle:=5(文字数)
 MySQL:=15(バイト数)
----------------
...あれ?結果が違いますね。

2.何故困るのか

私はEC導入が生業で、専門はデータ移行だからです。現在動いているシステムで動いているDBと、これから動かそうとする新システムDBのデータ移行が役割です
 
このデータ移行ですが、現在システムと新システムとの構造を変えたい思惑が絡むことが多く、またDBMSの変更など茶飯事です。
つまりOracleからMysqlみたいなデータ移行に良く出会います。ここが厄介なのです。
 

3.length関数で何をして困るのか

現システムのDBに入っているデータが、対応する新システムのデータ項目にすっぽり入るか、長さを測定しているのです。
先程説明したように現新でデータ構造を変えたがるので、たまに無理がかかります。
メモ欄のような項目が良く面倒になります。
ECシステムですので、ロジスと商品担当とのやり取り内容などをナレッジする為にメモ欄が使われ、その中には対応内容がたまにびっしり書かれているケースも見られます。
 
ケース1)「注文メモ」「配送メモ」という2つの項目を合わせて「メモ」に文字列結合して移行したことがあります。
この場合、以下の公式にはまらない場合、別途対応になるじゃないですか。
メモAのカラム長 >= 注文メモの最大長 + 配送メモの最大長
データ移行時には細かくチェックしています。
 

4.どんなひどい目にあうのか。

length関数を使うシーンはテスト済、品質が保たれたモジュール内だけではない訳です。上流で調査する際も、C/O当日のその場対応でも使います
データ移行担当者は瞬発力が求められます。移行中にアラートが上がれば速攻で調べて、即刻リカバリなんとかC/Oに間に合わす、という対応が求められます。
 
話は逸れますが「お前下手くそやなー」と上から目線の同業の皆様、データ移行では以下の理由から当日不足の事態が起きやすいです。
1.データ移行は他の作業と比べて下に見られやすく、PRJ内で検討が甘くなりやすい。
2.現行システム凍結期間をお客様が短くする傾向が強まり、短時間で素早く移行するニーズがほとんど。スケジュールに無理がかかる。
3.顧客情報は凍結直前まで、何が入ってくるか分からない。
 
ケース1だと、512文字の定義がされているメモ欄データ移行でエラー発生
その際に間違ってMysqlに移行途中だった「注文メモ」と「配送メモ」情報に対してlength関数を発行、ゲッ!合計1,500文字も入るわけ無いじゃん..と慌てる訳です。
 
よく考えればMySQLはバイト返し、全て日本語なら1500バイト=500文字なんですよね。ちゃんと該当データを取り出し、別の機能で文字数をチェックしなければ問題の真相がわかりません。頭の中がOracle基準で判断をした悪い例です。
同じ関数が環境によって機能が異なることは、判断ミスを招きやすい。
寿命の無駄縮み、大損という訳です。
 
こういうことで最前線のIT技術者は、日々頑張っているという事例でした。
差別化はいいですが、OracleMysqlも世界中のITインフラを支えるDBMSなのですから、思い切って標準化を希望します。
以上です。ありがとうございました。
 

にほんブログ村 士業ブログ 中小企業診断士へ
にほんブログ村