MySQLと寿司ビール問題
結論から言うとMySQLでは指定されてた文字コードによっては
あれ? MySQL の utf8mb4 charset って、4バイト文字同士を比較すると同じ文字扱いされる? SELECT '🍣'='🍺' → 1 MySQL的には寿司とビールは同じ扱い。
— とみたまさひろ (@tmtms) 2014, 12月 22
ってなる話です。
詳細については前述のブログで触れられていますがMySQLとしてはバグではなく仕様だそうです。
でふーんって思って見てたら
MySQLの「寿司とビール」問題、面倒臭いね。「PostgreSQLならそんなことはないよ」って言われたら使うの検討するレベルにイヤな感じ。
— 長谷川智希@とむぞう (@tomzoh) 2015, 3月 23
と長谷川さんが仰ってるのを拝見したのでPostgreSQLで試して見ました。
結論は表題のとおりですが次のとおりです。
なお、僕が一番苦しんだunicode 6な文字がWindows上で文字化ける問題はpgadmin3のフォント指定で行けました。
教えてくれた@snagaさんありがとうございます!!!
■pgadmin3のフォント指定(絵文字を表示出来るように変更)のやり方
1 ツールバーから次を選択
ファイル→ツール→オプションを選択
2 オプションメニューでフォントを指定
クエリーツール→フォントで「Segoe UI Symbol」を指定
これで絵文字が表示されます。
それではお待たせしました結果ですが次のとおりです。
●実行環境
OS:ubuntu 14.04
DB:PostgreSQL 9.3.5
ちゃんと別々に認識してますね。
なお、検証した環境のPostgreSQLのlocale指定はC(nolocale)としています。
(日本語を扱う場合はほとんどの場合はCを指定するでしょうし)
なのでsortした際はasciiを元にsortされます。
※localeについての補足
引用元[ロケール(国際化と地域化)]
Cロケールではエンコーディングに依存する文字のバイナリ値を元に並び順を決めますが、日本語ロケールでは辞書順(カタカナ→ひらがな, 清音→濁音→半濁音) の順にソートされています。
なのでasciiを使って確認すると
となっています。
以上のことから絵文字を扱うならPostgreSQLを使うと良いですね!!
0 件のコメント:
コメントを投稿