■目標
本の内容をひと通りさらうその1
PHP+DBで本格的なWebシステムを作る
■前準備
本に書いてあるDB作成
>ターミナル上で日本語入力ができない
■ターミナルで日本語が文字化けしないようにする
>.inputrcファイルを作成、以下を記述する
set convert-meta off
set meta-flag on
set output-meta on
>my.cnfファイルに以下を追加
[client]
default-character-set=utf8
[mysqld]
default-character-set = utf8
skip-character-set-client-handshake
character-set-server = utf8
collation-server = utf8_general_ci
init-connect = SET NAMES utf8
>ところが表示がなおらない
※文字化けしたまま入力しても、きちんと反映はされる
ただターミナル上で?のまま表示される
■本格的にmysql文字コードチェック
・mysqlの文字コードを調べる
show variables like 'char%';
・chracter_set_databaseがなぜかlatin1
my.cnfの設定変更の一部が足りなかったらしい
[mysqldump]
default-character-set=utf8
[mysql]
default-character-set=utf8
・変更すると
mysql> show variables like 'char%';
+--------------------------+------------------------------------------------------+
| Variable_name | Value |
+--------------------------+------------------------------------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /Applications/XAMPP/xamppfiles/share/mysql/charsets/ |
+--------------------------+------------------------------------------------------+
全部utf8になった
・でもまだ文字化けする
mysql> ?^???^?^??^?^?;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'だめか' at line 1
・ホームディレクトリの.bash_profile書き換え
expert LANG-jp_JP.UTF-8
を追加
echo $LANGで状態を確認
>でもなおらない
・なんと!
ターミナルの文字の文字エンコーディングを”日本語(EUC)”にするとなおった!
※いままで全体に合わせてutf-8だった
※mysqlをexitして、通常のbashにもどると、今度はそっちで文字化けする
>とりあえず、.bash_profileのexpert LANGを削除したら両方いけるようになった
ただし、echoすると、jp_JP.eucJPにセットされている
今度はDB内容が文字化けして表示される
というわけで、mysqlターミナル文字化け処理をあきらめutf-8に戻す
■mysql文について
・datetimeとtimestampの差
timestampを使うとDBを更新したときに自動的にdateが更新される
・集計コマンド
合計
select sum(price) from my_items;
最大値
select max(price) from my_items;
最小値
select min(price) from my_items;
データ数
select count(id) from my_items;
平均値
select avg(price) from my_itmes;
・group by コマンド
item_idごとの集計
select item_id, sum(count) from carts group by item_id;
リレーションを使って、item名をidと対応させて同時表示
SELECT i.item_name, sum( c.count )
FROM my_items i, carts c
WHERE i.id = c.item_id
GROUP BY c.item_id
0 件のコメント:
コメントを投稿