社会人から始めたプログラミング

プログラミング、エンジニアに関することでの備忘録、シェアしたい情報などを共有するためのブログです。

mysqlの5.7.5以上でsql_mode起因のONLY_FULL_GROUP_BYエラーを解消する。

仕様が変わったので、sql_modeを設定して、5.7.4より前と同じように動くようにする。

my.cnfファイルにsql_modeを設定

  • home brewで入れたmysqlのmy-xxx.cnfをコピーして、user/local/etcの下にファイルを配置する。
  • user/local/etcのファイル内に、下記ののように、ONLY_FULL_GROUP_BYが含まれない状態でsql_modeを設定する。
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
  • 設定を加えたら、mysqlをリスタート
  • homebrewで入れていたら mysql.server stop して mysql.server start (もしくはrestart)
  • 設定を加えたら、mysql を起動して、show variables;sql_mode=の中に、 ONLY_FULL_GROUP_BYの設定がないことを確認。      

参考にさせていただきました。

qiita.com

starzero.hatenablog.com

qiita.com

MySQLサーバの起動と停止 | OpenGroove

Ruby、Railsをつかって、エクセル excel のファイル名を設定して、エクスポートする場合に文字化けする文字、「表」をなんとかした。

RubyでShift-JISにすると文字化けする文字コードをなんとかする。

今回やりたかったこと

  • 日本語の「表」の文字をRubyで設定したファイル名が文字化けしないようにすること。 例えば、「当番表_2017-06-05.xlsx」的なファイル名のファイルを作りたかった。

問題

  • Shift-JISの「表」は文字化けすると、後ろの文字の文字コードによって、様々な文字に代わってしまう。

例えばどういう風に文字化けするか、詳しくはこちらを参照のこと。

:: Shift-JISの文字化けについて | KENT-WEB ::

対応方法

filename = "当番".encode("Shift_JIS", "UTF-8") + "\x95\x5C\x5C".force_encoding("Shift_JIS") + "_#{Time.now.strftime('%Y%m%d')}.xlsx".encode("Shift_JIS", "UTF-8")

今回は文字化けする「表」だけShift-JISの文字コードで表現し、それを足す方法で解決した。

エクセルはUTF-8だと基本的には文字化けしてしまうので、 #force_encoding にて文字コードをShift-JISに強制指定することで encodeingがShift-JISの状態で文字列を足すことができるようになり、 Shift-JISのファイル名の出来上がり。

#force_encoding の説明はこちら

ref.xaio.jp

他の方法

  • そもそも日本語のファイル名にしないという手もあり。

Angularのui-selectでバックスペース/デリートのキーを押すと選択されていた内容が消えてしまう話。

Angularのui-selectを使っていて、
セレクターにて一つを選択するとき、バックスペースでの削除ができてしまうと困るという場合がある。
(選択肢として、空欄を選べないようにしているセレクターなど)

キーボード操作のイベントを制御すればいいかなと思っていじってみるも、
ui-selectのライブラリーをいじらなきゃだめな気配…

ということで調べてみたら、
やっぱりissueとしてgithub上で議題として取り扱われていることを発見!

最初に見つけたのがこちらのgithubページ。
github.com


そして、修正が入ってmasterにマージされているのがこちらのよう。
feat(uiSelectSingleDirective): add an option to avoid backspace model reset by pierregaste · Pull Request #1736 · angular-ui/ui-select · GitHub


だがしかし、まだリリースのバージョンには含まれていないようです。(2017年3月初旬)
masterにマージされている内容を見ると、
デフォルトが、backspace-reset="true"でバックスペース/デリートで削除不可能になるようです。
(ui-selectで選択肢が一つのときのはなし。複数の選択肢を選ぶときはバックスペース/デリートできる。)