2012年11月25日日曜日

vim : netrw の note が出て困る


最近、windows で vim を使い始めました。
NetBeans だと、自動で補完されるので忘れっぽい私にはとても助かっていたのですが、毎日2回は反応しなくなるという困ったちゃん。
そこで、社内の Vimmer から色々頂いて vim に挑戦したわけです。

しかし、vim を使っていると次のような注意書きが毎回出てきて、ちょっと困ってました。

**note** (netrw) consider setting g:netrw_localcopycmd<copy> to something that works


検索したら、対処法が見つかったのでやってみます。




vim ~/.vimrc

" ファイルの最後に以下を追加しました。
let g:netrw_localcopycmd=''


これで、エラーが出なくなりました。

ちなみに、netrw は ファイルブラウザ。:Explore コマンドのやつです。

Netrwを使いこなす
http://d.hatena.ne.jp/hagure_beans/20100603/1275591475


2012年11月12日月曜日

mysql に 4バイトutf8 の文字を入れたい

MySQL に iOS の絵文字など、4バイトUTF-8 の文字を入れると、そこで途切れるという現象がありました。
残念ながら発生したサーバの MySQL バージョンは5.1系でバージョンアップせずに対応したのですが、最近構築したサービスイン前のサーバは5.5系だったので設定してみました。


■設定内容
1. 文字コードを utf8 → utf8mb4 に変更
2. skip-character-set-client-handshake を設定


■詳細
1. 文字コードを utf8 → utf8mb4 に変更

MySQLの UTF-8 は4バイトに対応していません。
ですが、絵文字や中国漢字、日本語でも特殊漢字などは4バイトが含まれています。

詳しくはこちら↓
iOS の絵文字(4bytes UTF-8)が入った文字列を MySQL に INSERT/UPDATE すると絵文字以降の文字がぶった切られる件

------------

2. skip-character-set-client-handshake を設定

mysql.cnf の character-set-server を変更しただけでは、PHP で取得した時の文字コードがビルドした時のものが使用されます。
そうすると、MySQLのエラーが出てしまうのです。

General error: 1267 Illegal mix of collations (utf8mb4_general_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation ...

これを、ビルドした情報ではなく、MySQL サーバの文字コードで取得するには次のオプションを使います。

skip-character-set-client-handshake

詳しくはこちら↓
PHPとMySQLの個人的まとめ


■変更内容
# vi my.cnf

[client]
-- default-character-set = utf8
++ default-character-set = utf8mb4

[mysqld]
-- character-set-server = utf8
++ character-set-server = utf8mb4
++ skip-character-set-client-handshake


■phpから文字コードを見るコード

<?php

$mysql_host = 'localhost';
$mysql_user = 'root';
$mysql_pw   = '';
$mysql_db   = 'mysql';

$conn = mysqli_connect($mysql_host, $mysql_user, $mysql_pw, $mysql_db);

$sql = "SHOW VARIABLES LIKE 'char%'";
$result = mysqli_query($conn, $sql);

while ($data = mysqli_fetch_array($result, MYSQLI_NUM)) {
    echo str_pad($data[0], 24) ." | ". $data[1]."\n";
}

?>
-------------

以下、実行結果です。

character_set_client     | utf8mb4
character_set_connection | utf8mb4
character_set_database   | utf8mb4
character_set_filesystem | binary
character_set_results    | utf8mb4
character_set_server     | utf8mb4
character_set_system     | utf8
character_sets_dir       | /usr/local/mysql/share/charsets/