ようこそ!浜村拓夫の世界へ

    ブログ内検索

    最近の記事

    ブックマーク数の多い記事

    Blog Translation

    Powered By FC2ブログ

    Powered By FC2ブログ
    ブログやるならFC2ブログ


    FC2ブログ LOGIN

    with Ajax Amazon

    utf8-binとutf8-general-ciの違い

    このエントリーを含むはてなブックマーク はてなブックマーク - utf8-binとutf8-general-ciの違い あとで読む
    CodeIgniterの認証ライブラリ「Tank Auth」を使ってみた。
    What Code Igniter authentication library is best? - Stack Overflow
    DX Authをリファインしたライブラリで、使い勝手が良いと評判?
    Tank Auth authentication library for CodeIgniter
    早速インストールして使ってみた。

    ●文字化けか!?…16進数だったorz
    phpMyAdminで、Tank Authが使うMySQLのテーブル情報を見てみると、文字列カラムの「照合順序」が「utf8-bin」になっていた。
    そのせいか、phpMyAdminでデータを見ると、文字データが16進数(0~9、a~fまでの16文字を使った数)として格納されていた。
    普段は、何も考えずに「utf8-general-ci」を使っているので少し戸惑った。
    文字コードが日本と異なる海外では、「utf8-bin」を使うの普通なのかな?

    ●utf8-binとutf8-general-ciの違い
    utf8-binの「bin」って、「バイナリー」の略だよね?(違う?)

    MySQLに文字化けで悩まされる - Railsなど技術系覚え書き

    utf8-bin と utf8-general-ciの違いを知った。
    前者が標準のUTF-8
    後者はアルファベットの大文字小文字を区別しないらしい。



    mysql.utf8_unicode_ci utf8_bin utf8_general_ci - ゆとり世代が書くblog。蟹ろぐ

    utf8_bin
    大文字小文字を区別する

    utf8_general_ci
    大文字小文字を区別しない。
    ちょっと早いらしい

    基本はutf8_general_ciを使う。utf8_binだとソートのときの並びが・・・



    utf8-binだと、日本語データ(マルチバイト文字)をソートしたときに、並び順が変になるのかな?

    UTF-8 - TongSangのプログラミングメモ

    utf-8に色々種類があって今まで意味もわからず
    utf-8 binを使っていたが、ちゃんとしなくてはと思い調べてみた。

    utf8_bin の場合、部分一致探索 LIKE などの使用時に英字の大文字小文字が区別されてしまう。
    大文字小文字を区別されないようにするためには、照会順序として utf8_general_ci を使用すればよい。



    そりゃ、小文字の「a」と大文字の「A」を、16進数で表記したら別物になるわな。
    utf8-binを使う利点は、多分これしかないだろう。

    ・検索のマッチング
    ・ソートの並び順

    日本語を扱うなら、今まで通り「utf8-general-ci」にしておけばいいのかな?

    ●MySQLのUTF対応
    以前調べて分かったこととして、UTFは最大で6バイトまで割り当てられる文字コードだったこと。

    PHPのstrlen関数で全角文字が3バイトになる件 - 浜村拓夫の世界

    文字コードとしてUTF-8を使っている場合、日本語の文字は1~6バイトのデータとして定義されている。



    「utf8-bin」について検索していて、新たなことを知った。
    MySQL5.1までは、3バイトまでのUTFに対応していたが4バイト以上のUTFには対応していなかった、とのこと。

    漢(オトコ)のコンピュータ道: Real UTF-8 On MySQL 6.0

    現在のバージョンのMySQLでは、UTF-8を完全にはサポートしていない。


    漢(オトコ)のコンピュータ道: MySQLコミュニティ騒然!MySQL 5.5.4が与えるインパクト

    4バイトUTF-8対応!
    MySQL 5.1以前のバージョンでは、BMP(基本多言語面)の文字しかサポートしていなかった。つまり、UTF-8は3バイトまでの文字しかサポートしていなかったのである。MySQL 5.5.3では、追加多言語面(UTF-16ではサロゲートペアを使う必要があるもの)もサポートされるようになった。人名漢字もバッチリである。

    4バイトUTF-8を利用するには、utf8mb4という文字コードを指定する必要がある。utf8文字コード自体は、これまでと同じく3バイトのままであるので注意が必要である。(このような仕様になったのは、互換性を損なうことがないようにするためである。ご理解頂きたい。)



    ここで一句、

    「文字化けは 忘れた頃に やって来る」

    文字コードの違いを全部吸収してくれるライブラリがあったらいいな~。(笑)

    エキスパートのためのMySQL[運用+管理]トラブルシューティングガイドエキスパートのためのMySQL[運用+管理]トラブルシューティングガイド
    (2010/06/12)
    奥野 幹也

    商品詳細を見る

    関連記事

    コメント

    コメントの投稿


    管理者にだけ表示を許可する

    トラックバック

    トラックバックURL:
    http://hamamuratakuo.blog61.fc2.com/tb.php/501-f2b42962

    FC2Ad