2017年4月6日 星期四

mysql utf8

原來要 mysql 支援 utf8 不是這麼預設的,好煩 = =||

好吧,歷史因素,可以體諒。

首先看這邊[1]看看怎麼設定(或是變更現有的 database)mysql 支援 unicode

看就好,先不要動手!

注意你要的 collate 是啥。「collate」指的是 DB 用來比對字串的時候所使用的準則,utf8mb4 預設的 collate 是「utf8mb4_general_ci」,這個很有可能不是你要的,因為他會把「ç」跟「c」當作同一個字元,你需要的可能是「utf8mb4_bin」。

然後如果你用的是 docker,不用去寫 my.cnf,run image 的時候直接下命令[2]。

$ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

好,如果你不是用 docker,那現在你可以動手了。去 alter 你的 DB 跟寫你的 my.cnf。
用 docker 的人只要 alter DB 就好,然後 run image 的時候用下指令的。

Note: MySQL 的 utf8 charset 不是真的 utf8,他只支援到 unicode 的一個子集,最多三個 byte。到了 5.5.忘了 版之後才有 utf8mb4 charset 支援整個 unicode codepoint。

[1] https://mathiasbynens.be/notes/mysql-utf8mb4
[2] https://hub.docker.com/_/mysql/

mysql -h localhost 失敗

一直無法使用
mysql -h localhost -P 3306 -u root -pkerker
連線到我 local 的 mysql server,氣死我老百姓,錯誤訊息:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
結果最後發現是要用
mysql -h 127.0.0.1 -P 3306 -u root -pkerker
原來 127.0.0.1 跟 localhost 還是不一樣的 XD

reference
[1] http://stackoverflow.com/questions/9714899/php-mysql-difference-between-127-0-0-1-and-localhost
[2] https://dev.mysql.com/doc/refman/5.6/en/can-not-connect-to-server.html