White scenery @showyou, hatena

If you have any comments, you may also send twitter @shsub or @showyou.

mysqlでutf-8のDBを作る

コマンドからだと結構面倒じゃないっすか?

  • mysql-serverとか入れる。rootパスワードも設定する
  • /etc/mysql/だかにあるmy.cnfに以下の行を付け足す。DBを作る前に書いておかないと後でやり直す羽目になる

[client]
default-character-set=utf8

[mysqld]
default-character-set=utf8
skip-character-set-client-handshake

  • $ mysql -u root -pしてrootのパスワード入れる
  1. > create database hogehogeデータベースを作る
  2. > grant all privileges on *.* to 'username'@'localhost' identified by 'password' with grant option;とかやってユーザ、権限を追加*1
  3. > set names utf8;を実行する
  4. > show variables like "char%";を実行する。 charsetがutf-8になってればいいと思う。

他にDBを作るなら1番から繰り返し実行する。sqlalchemyでもこれだけ必要みたい。activerecordなら必要ないんだっけ?どちらにせよ面倒だしセキュリティホール起こしそうだよね。

追記

まだだめっぽい

追記2

defaultなんちゃらとかskipなんちゃらを[mysqld]の直後じゃなくて[mysqldump]のちょっと上辺りに書いてたんだけど、それのせいで化けてたっぽい・・[mysqld]の直後に置いたら化けなくなった・・

*1:all privileges与えるのもどうかと思うが

タプルでハマる

import random

print random.choice(('ABC','DEF'))
print random.choice(('ABC'))

下のをやってAとかBとか出てきてハマった。
http://twitter.com/donsuke/status/1793119052


解説すると、前者は'ABC'と'DEF'のどちらかが出力される。つまり'ABC','DEF'のタプルになっている。
一方で後者は'ABC'からなる文字列であり、タプルではない(タプルとして認識させるなら('ABC',)とする必要あり?)。その為'A''B''C'から一文字が選ばれる。