掲示板を作るときの文字コードでやられた話
こんにちは。最近会社でWeb開発の扉を開いた臼式です。
phpエエエエエ・・・。
C++erだった自分にとってはまさに未知の領域でした。
突如変数がわいたり、関数一つがやたらと便利だったりもうね・・。
とまあそんな感じの今日この頃ですが、課題の一環として2ちゃんねるみたいな掲示板作ってみようか。って言われて作ったときにやられた文字コードの落とし穴の話です。
-
データベースの文字コード
そもそも文字コードとはなんぞやって話ですが、
簡単に言ってしまえばコンピュータが文字を表現するための数値みたいなもんです。
MySQLでデータベースやテーブルを作成した後文字コードを確認してみると、
1行目のコマンドがデータベースサーバーのデフォルト設定を表示させています。
ご覧のとおりファイルシステム以外はutf8に設定されています。
この設定は特に指定しなければテーブルにも引き継がれます。
で、なにがいけないのかというと、
このままでは4バイト文字に対応してくれないから!!
-
テーブルの文字コードはutf8mb4で!
個人や狭いコミュニティだけで使う分にはあまり問題ないですが、
utf8で一文字の表現に4バイト必要な文字は残念ながらこのままでは
扱うことができません。↓こんな奴らです
そこで登場するのがutf84バイト文字対応版utf8mb4
テーブルを作成した後、
alter table テーブル名 default character set utf8mb4;
と打ってやると無事文字コードが変更され、4バイトを扱ってくれるようになります。
-
おわりに
今回掲示板を作ってみるまで4バイト文字やutf8mb4のことも知らず、打てるようにしてねと言われてから手こずりました。
もしphpの勉強がてら掲示板を作ってみようということになったら
実践してみて下さい。
また掲示板を作るまでの一通りの流れもアップしようと思います。
スライド追加しました!
長く時間が空いてしまいすみません。
久しぶりの投稿ですが今回は、また学内で発表する機会があたのでその時のスライドの
ご紹介です。
最近ようやくHTC Viveを使ったVRゲームの開発を始めることができたのでその時に必要になったことの覚書としてのスライドになります。これからViveでの開発をしようと考えている人などに見ていただけると嬉しく思います。
スライドをあげました その2
前回に続き、また学内で発表したときの資料をあげました。
今回は[pimplイディオム]について調べてみました。
スライドをあげました
以前学内でunityでLINQを使ってみようぜ!という話をした時の資料を公開したので
リンクを張っておきます。
興味のある方はぜひ!
Unityでゲーム制作をした時にお世話になったサイトまとめ
unityで制作をする時によくお世話になるサイトを
まとめました。
テラシュールブログ(いろいろありすぎ宝箱。ありがとうございます・・)
unity開発に関する50tips(チーム開発の注意点など)
ブリブサーゲーム制作劇場(小ネタが満載)
SlideShare(unityで検索するといろいろ出てきます)
Unity スクリプトリファレンス
http://docs.unity3d.com/ja/current/ScriptReference/index.html
Unity Manual
デバッグログを作った話
ゲームを制作していると、この処理かかったときにログ出せればなあと思ったので、
WindowsAPIの機能を使ってデバッグログを作ってみました。
制作環境:
VisualStudio 2015
↓こんな感じに出力ウィンドウにログを出す。
-
表示の仕方について
表示処理はWindowsAPIのOutputDebugStringを使っています。
しかしコイツには弱点があります。それは、文字列にしか対応していないこと。
つまり、printf関数のような変数の中身を出したり、可変長の引数に対応したり
といったことができません。
仕様
- printfみたいに可変長引数に対応したい。
- どこから呼び出されたのか知りたい。(ファイル名,行数)
- 受け取った引数は最終的に文字列に変換。
- デバッグ実行時のみ機能させる。
- ソース
LogDefine.hpp - ログ定数ヘッダ
Log.hpp - ログ関数
main.cpp[LogDefine.hpp]
giste994e742bb7b23e948b355c81a3976c9
[Log.hpp]
gistdca25f6e934ba329f1a19beaa2733e02
[main.cpp] - 作り方について
可変長の引数を実現するために、可変長テンプレートと再帰処理を使いました。引数がなくなるまでwstringstreamに流し込んでいます。使いたいときはLog.hppをインクルードするだけで使用できます。
改善点
- wstringstreamに対応していない型だとエラーになる。
-
表示するログの種類分けをしたい。(エラー、警告、通常ログ)
まだまだ改善の余地はありますが、参考になれば。
参考サイト
可変長テンプレートを使った C++11 時代の可変長引数関数 | プログラマーズ雑記帳