SQLの結果のフィールド名が空白になってしまう現象に遭遇した

Facebook にシェア
Pocket

先日、会社の後輩に作ってもらったストアドで、なぜか一部、ストアドで返ってくる結果のフィールド名が空白になってしまうという現象が発生しました()。

具体的には下記のようなSQLとなっていた。

結果:

見てわかる通り、fruit_idのフィールド名は取得できているのだけど、fruit_nameのほうは空白になっている。試しに、コピペで順序を逆にしてみても、fruit_nameのほうが空白になった。

一見すると、何の変哲もないSQL。じっと見ていても何も分からなかったので、とりあえずコメントも消してみてもう少しシンプルな形にしてみようかと思ったときにちょっとだけ違和感。なんだかカーソルの動きが一部だけ大きいような……。

そう思って試しにテキストエディタに貼り付けてみたらわかりました。

fruit_nameのほうは、コメントの左側に全角スペースが入っています。

ただ、それでもなぜカラム名が空白になるのかすぐには分かりませんでした。何でこんな現象が起こるのかなと。

ですが、ちょっと考えてわかりました。これは、フィールド名は空文字ではなく、全角スペースになっているんだろいうことに。つまり、下記のようなSQLと同じようになっているということです。

つまり、別名をつけるASキーワードが省略されたと判断されて、フィールド名が全角スペースになっていたということです(今回試したのはMySQLですが、多分他のSQLでも同様の現象が発生するのではないかと思います)。

それにしても、なぜSQLはASを省略していいという仕様になったのだろうか。ASを省略しているSQLはよく見かけるけど、個人的に分かりにくいし、今回みたいによく分からないバグの原因にもなりかねない気がするのだけど。

MySQLの SELECT … INTO 構文で結果を変数に書き込むときの注意

Facebook にシェア
Pocket

先日少しはまった話。

MySQLにはSELECT … INTO 構文というものがあります。これを利用すると簡単にクエリー結果を変数に格納することができます。
参考:MySQL :: MySQL 5.6 リファレンスマニュアル :: 13.2.9.1 SELECT … INTO 構文

仕事で、MySQLのストアドを利用して、指定のIDとOUTパラメータを引数にセットし、OUTパラメータに引数に対応する値を返すというストアドを同僚が作っていました。そのストアドはSELECT … INTO 構文を使って下記のようになっていました。

実際のテーブルは下記のようになっているとします。

この時、p_idに1を指定すると、p_nameには「りんご」という値が入ります。

もちろん、p_idに2を指定すると、p_nameには「みかん」という値が入ります。

では、ここでp_idに10を指定するとどうなるでしょう。fruid_idが10のfruit_nameはないから、結果はnullになる。同僚もそうなると思ったようですが、違いました。

結果は一つ前に実行したときに取得した「みかん」を取得。プログラム作って動かしていた自分は、最初、「やけに同じ結果が返ってくるなぁ。てっきりnullが返ってくると思ったのだけど」なんて呑気に思い、しばらくバグに気づきませんでした。

これはなぜかというと、MySQLの変数はセッション変数で、つなげている間は結果が保持されるためだそうです。
参考:mysqlでユーザ定義変数をつかう – 眠すぎて明日が見えない

なので、上記のように変数に格納したい場合は、いったんnullで初期化する記述を追加したほうがいいです。


ただ、この程度だったら直接outパラメータを指定したほうがシンプルかもしれないですけどね。

それより、WorkBenchがちょくちょく結果を表示してくれないことがあった困る。何で、「1 row(s) returned」って書いてあるのに、表示してくれないことがあるんだ……。

MySQL8のデフォルト照合規則「utf8mb4_0900_ai_ci」について調べてみた

Facebook にシェア
Pocket

前からたまに、MySQLを仕事で使ってきたのですが、照合規則については詳しくなかった自分。現在の仕事で、ひらがなでもカタカナ、小文字でも大文字、全角でも半角が検索でヒットするシステムを作ってほしいとのことで少ししらべてみました。

ちなみに、寿司ビール問題(MySQL と寿司ビール問題 – かみぽわーる)というのは聞いたことあったので、ちょっとは問題あるんだろうなと思ったら、MySQL8では解決されているようです(寿司=ビール問題 : MySQL 8.0でのUTF8サポート入門 (MySQL Server Blogより) | Yakst)。

ただし、何やらデフォルトの文字コードだと日本語の照合にいろいろ問題があるとのこと。
参考:MySQL Innovation Day Tokyo で MySQL 8 の文字コードについて話した – @tmtms のメモ

というのも、デフォルトの「utf8mb4_0900_ai_ci」だと、アクセント違いは同じ文字の扱いになり、大文字小文字も同じ文字という扱いになるそうです。これがどういうことかというと、「はは」と検索したのに、「ばば」や「パパ」がヒットするということです。なんじゃそりゃ。

例えば「びょういん」で検索すると、下記のようになります(ID13~18は半角カタカナです)。

なお、このテーブルには「ひ゛ょういん」や「ひ゜よういん」もいれているのですが、それはヒットしませんでした。

ちなみに、like演算子で、「びょう」としても全部ヒットするわけではないらしいです。半角カタカナの「ビョウイン」や「ピヨウイン」などがでてきてないですね。濁点や半濁点は別の扱いなんでしょうか。

そういえば、先ほど紹介したMySQL8の話のページで知ったのですが、「株式会社」=「㍿」となるそうです。面白いですね。

ただ、これもlike演算子だとヒットせず。

内部的にどういう違いがあるんだろう? like演算子だと厳密ってわけでもないみたいだし。

ちなみに、仕事ではいろいろ試した結果、照合順序は「はは」と「ばば」と「ぱぱ」を区別する「utf8mb4_0900_as_ci」を使うことにしました。これだと、ひらがなでもカタカナ、小文字でも大文字、全角でも半角が検索でヒットするので。ただし、「びょういん」=「びよういん」にはなってしまうという。これだけ解決されれば、期待通りだったんだけどなぁ。日本語と英語の大文字小文字の違いを同じような扱いにしないでほしい。

会員登録せずにMySQLプログラムをダウンロードする方法

Facebook にシェア
Pocket

最初に言っておきますが、半分ネタエントリーです。

現在、業務でMySQLを利用しているのですが、必要なソフトをインストールするのに、いちいち会員登録をしなきゃいけなくて面倒だなと思っていました。ただ、会員登録しなくてもダウンロードできると知ったのでメモしておきます。

例えば、Windows用のMySQLインストールプログラムは下記からダウンロードできます。
MySQL :: Download MySQL Installer

MySQL Download

そして上記右下の『Download』ボタンをクリックすると、ダウンロードページではなく、下記のようなログインページに遷移してしまうんです。
MySQL Begin Your Download

しかし、ここで会員登録せずにダウンロードできる方法はありました!

それはなんと、左下の『No thanks, just start my download.』をクリックするだけ!

………………

いやいや、普通に読めばそりゃそうだろうという感じですよね。ダメですね。どうも英語は苦手でちゃんと読まずに、ログイン画面だから会員登録しなきゃいけないのだろうと思い込んでしまいました。

結果、オラクルから営業の電話がかかってくるという。残念ながら、自分には何の決定権ももちあわせていないんですよね……。

というわけでみなさんも、英語のサイトでも臆せず、注意深く読みましょう。分からなければ、Google翻訳しましょう。

2018年アマゾンプライムデーで購入した商品

Facebook にシェア
Pocket

プライム会員のくせに2,3か月に一度程度しかアマゾンで買い物しない自分(しかも、プライム会員で一番お得といわれる理由のプライムビデオを滅多に見ない)

ただ、先日のプライムデーでは初めて大量に買い物をしました。一日に何回も段ボールが届くという、母が家にいたからよかったものの、いなかったらどうなっていたんだろうかと(マンションの下に預かりポストはあるけど、全部入るとは思えない)。

衝動買いもあるので、ちょっと失敗したなと思うものもあるんですけどね。そういうのも含めて、買ったものを購入順に紹介します(アフィリエイト記事だけど、「これが今より安く買えたんだよ」なんて書いても誰も買わないだろうなと思う)

前々から欲しいと思っていたBluetoothイヤホン。1,984円で購入しました。小さいクリップもあって服に挟むと落ちないので、それが何気に便利。Appleのイヤホンと同じような形をしているから、同じような音質と期待しないほうがいいです。ただやっぱりといいますか、音質は悪いです。

いつの間にか自分のもってたドライバーセットが一人暮らしの妹にとられていたので、購入。1,190円で購入しました。ただ、これはちょっと衝動買いだったかなと思ってる。だいたい、こんなに種類いらないだろうと。それより、ベンチとかドライバー以外も入っているものも買えばよかった。多分、8割以上は一回も使わないと思う。

先日購入したパソコンにはテレビがついていないので購入。後で紹介する外付けディスプレイに接続してみています。

本来なら、無線LANに接続してみようとも思ったんですけど、ひとまず自分の部屋において、見るときは直接つないでみることに。なお、テレビチューナーは付属しておらず、さらにBSと地デジのアンテナ端子は分かれています(前のパソコンは一つのアンテナでどちらも見れた)。電源を切っても、オレンジ色のランプが光って起動音がします。番組表の情報取得やファームウェアの自動更新の時にそうなるらしい。そんなに大きい音ではないのだけど、ちょっとだけ気になりました。

付属にHDMIケーブルが入っていたので、現在はノートPCの画面をうつしたいときは、そのHDMIケーブルをノートPCに差し替えてます。ちょっと面倒ですが、とりあえずしばらくはそうしようと思います。もう一つHDMIケーブルと切り替え機を購入しようかとも思ったのですが、これ以上ケーブルを増やしたくないんですよね……。かなりケーブル類が醜いことになってしまっているので。

録画対応と上記のテレビチューナーのサイトに書いてあったので購入。まだ届いてない。6,200円で購入。録画用に購入したのはいいものの、前からもってた外付けHDDを試しにつなげてみたら普通に録画できました。キャンセルしようか迷ったけど、安く購入できたのには違いないのでそのまま購入しようと思う。

LOGICOOL ワイヤレストラックボール SW-M570
ロジクール (2018-06-21)
売り上げランキング: 28

前からトラックボールが気になっていたので購入。下記で紹介するキーボードとブルーレイドライブとあわせた領収書になっていて、いくらで買ったのかわからない。領収書には3,980円となっている(そんなに高くはなかったはず)。もともともう少し安い、エレコムの有線のトラックボールを買うつもりだったのだけど、ロジクールの無線キーボードを一緒に購入したので、こっちにすることに(利用するUSBが一つですむため)。

少しずつ慣れてきたけど、まだまだ使いづらいです。特に、マウスジェスチャーがよく失敗する。速く慣れたい。

外付けディスプレイで利用するときには、ノートPCを閉じて使おうと思っていたので、購入。領収書には1,980円となっている。単純にトラックボールで使っているUSBがつながっていればそのまま使えるかと思ってたけど、接続するためにはいろいろソフトをインストールする必要があった。

少なくとも、使っているノートパソコン(マウスコンピューター)のキーボードよりは使いやすい。それと、何気に音声ボタンがあるのがうれしい。ただ、打鍵音が思ったより大きいと感じた。エンターキーはいいのだけど、文字キーがカチャカチャと音がする。押すときにちょっと力がいるようにも思った。

先日購入したノートPCにはディスクドライバがついていないので購入。領収書には11,503円とある。上記3点で17,463円だけど、1,446円安くなって16,017円となっていた。ただ、このドライバは安くなっていたかも? 一つだけ、安くなってないけど購入したのがあったと思うので(それだと今は 11,448円となっているので損してることになるけど……)。

今回購入した中では一番よかったかもしれない。かなりの静音だし、コンパクト。ブルーレイの映像も何の問題もなく見れた(ソフトはネット経由でインストールする必要がある)。何より、USB Type-Cというのがいい。小さいし、どちら向きにでも刺せるし(USB Type-A用のケーブルも付属しています)。

ノートパソコンをこの台の下にして、上にディスプレイを置くことを想定して購入。1,999円で購入しました。正直、これが一番失敗しました。多分入るだろうと思って購入したものの、思ったより下のスペースが狭い。仕方ないから、別の場所においてUSB充電器代わりにしようかと思って使ってみたら、なぜか全然充電できない(充電できたとしても、低速モードになる)。返却したら半分の代金が返ってくるらしいので、どうしようか迷い中。メルカリにでも売ろうかなぁ。

大き目の外付けディスプレイが欲しいと思って購入。15,182円で購入しました。ピボット機能が面白そうだなと思ってこれにしましたが、まだ縦表示にはしてません。最初、足部分が縦表示ようになっており、横表示で使うにはどうすればいいかわからず、わざわざネジを外して横表示にしましたが、説明書をよくよく読んでみるとそんなことはする必要なかったです。

ところで、今回これの設置作業中に醜い目にあいました。後ろの足に青い固定ピンというものがついているのですが、これを抜くときに顔を近づけてしまい、勢いよくネックが伸びて鼻の少し左にぶつかり、切れて血が出ました。ぶつけたのは昨日ですが、今朝絆創膏を外して顔を洗ってタオルで拭いたらまだ血がでていました。

こんなヘマをやるのは自分ぐらいかもしれませんが、固定ピンを抜く際には気を付けてください。
ちなみに普段、amazonでレビューは書かないのですが、今回ばかりは書きました。
汎用性があっていいけど、固定ピンを取る際に注意

というわけで、プライムデーに購入したものの紹介でした。ちなみに、今の自分の机の上は下記のようになっています。

「机せまっ!」という声が聞こえてきそうですが、はい、狭いです。ですが、これ以上大きいサイズの机を買うと、布団敷けなくなります(半分、冗談ですが)。

キーボードはノートパソコンのうえにタオルを乗せて、その上に置いています(あまりよろしくない置き方だとは思います)。ただ、そうするとちょっとキーボードの位置が高くなってしまうんですよね。どうしても腕を上にあげるような感じになってしまいます。これがちょっとしんどいので、結局膝の上にのせて使うこともあったりします。まあ、無線ですしね。もうちょっとうまく使えないか考えてみます。