自己紹介 とみたまさひろ MySQL 3.21 に日本語 charsetを追加 MySQLのRubyバインディング作成

Similar documents
自己紹介 とみたまさひろプログラマー (Ruby & C) 日本 MySQLユーザ会代表

本当はこわいエンコーディングの話 とみたまさひろ 東京 Ruby 会議 本当はこわいエンコーディングの話 Powered by Rabbit 2.0.6

文字コード略歴 よこやままさふみ社内勉強会 2012/05/18 文字コード略歴 Powered by Rabbit 2.0.6

PowerPoint Presentation

untitled

橡07第1章1_H160203_.PDF

all

untitled

2

Sequel のすすめ 私が SQL を嫌いな理由 とみたまさひろ RubyHiroba Sequel のすすめ - 私が SQL を嫌いな理由 Powered by Rabbit 2.0.7

シンプルスマホ3 ユーザーガイド

A

2

DIGNO® E 503KC ユーザーガイド

文字入3-2 力3 文字入力について ひらがな 漢字 カタカナ 英数字 記号 絵文字などが入力できます 文字入力方式には モード1( かな方式 ) モード2(2タッチ方式 ) モード3( ニコタッチ方式 ) の3 種類があります 本書では モード1( かな方式 ) での入力例を中心に記載します モー

【知事入れ版】270804_鳥取県人口ビジョン素案

DIGNO® G ユーザーガイド

MySQL5.0データベース ログファイルおよびステータスの収集

文字入3-2 力3 文字入力について ひらがな 漢字 カタカナ 英数字 記号 絵文字などが入力できます ❶ ❷ ❸ ❶ 入力モード切替操作漢 : 漢字 ひらがな入力モード 1 カナ : カタカナ入力モード英 : 英字入力モード数 : 数字入力モード ❷ 全角 / 半角切替操作全 : 全角入力モード

PowerPoint プレゼンテーション


文字入3-2 力3 文字入力について ひらがな 漢字 カタカナ 英数字 記号 絵文字などが入力できます ダイヤルボタンの文字割り当てについて (ZP.17-12) ❶ ❷ ❸ ❶ 入力モード切替操作漢 : 漢字 ひらがな入力モード 1 カナ : カタカナ入力モード英 : 英字入力モード数 : 数字入

文字入3-2 力3 文字入力について ひらがな 漢字 カタカナ 英数字 記号 絵文字などが入力できます 文字入力方式には モード 1( かな方式 ) モード2(2タッチ方式 ) モード3( ニコタッチ方式 ) の3 種類があります. 本書では モード1( かな方式 ) での入力例を中心に記載します

文字入力 ソフトウェアキーボードを切り替える...56 文字入力画面の見かた...56 文字を入力する...58 文字入力の便利な機能を利用する...60 iwnn IME の設定を行う

ID010-2

2

2

平成16年度外務省事後評価実施計画策定について


Japanese Y Y


●コンテンツ「掲示板」

総セク報告書(印刷発出版_.PDF



B B B B B B


net-h12_12.doc

(資料2)第7回資料その1(ヒアリング概要)



<4D F736F F D DEC8BC A95BD90AC E A982BA81698AB A B B4790DF90AB8EBE8AB FC89408A4F816A82CC93AE8CFC82C98AD682B782E9838C837C815B D

, , ,210 9, ,

AQUOS ケータイ ユーザーガイド

かんたん携帯9 ユーザーガイド

WEBシステムのセキュリティ技術

Xperia™ XZ ユーザーガイド

第 2 章 問合せの基本操作 この章では データベースから情報を検索する際に使用する SELECT コマンド および SELECT コマンドと 同時に使用する句について説明します 1. 問合せとは 2. 基本的な問合せ 3. 列の別名 4. 重複行を一意にする 5. 検索行の絞込み 6. 文字パター

1

(1)

untitled


シンプルスマホ2 ユーザーガイド

n n n ( ) n Oracle 16 PostgreSQL 3 MySQL


ビジネスサーバ設定マニュアル_Standard応用編

わんくま同盟 大阪勉強会 #1

Dolteng Scaffoldに対する機能追加とマスタ-ディテールScaffoldの紹介

Transcription:

= とみたまさひろ MyNA 会 2015/04/22

自己紹介 とみたまさひろ http://tmtms.hatenablog.com http://twitter.com/tmtms https://github.com/tmtm MySQL 3.21 に日本語 charsetを追加 MySQLのRubyバインディング作成

自己紹介 もっとも RT されたツイート

自己紹介 もっともブクマされたブログ

自己紹介 長野県北部在住 日本 MySQL ユーザ会代表 名ばかり代表 たまには何かしゃべれや (# Д ) コ ルァ!! と言われたのでしゃべります

= 問題

MySQL 的には と は同じ

ちなみに と も (ry

PostgreSQL なら問題ないらしい http://soudai1025.blogspot.jp/2015/03/postgresqlunicode-6.html

何故?

kamipo++ utf8_unicode_ci に対する日本の開発者の見解 http://blog.kamipo.net/entry/2015/03/08/145045 MySQL と Unicode Collation Algorithm (UCA) http://blog.kamipo.net/entry/2015/03/17/103457 MySQL と寿司ビール問題 http://blog.kamipo.net/entry/2015/03/23/093052

MySQL の文字は Charset と Collation がある

Charset

いわゆる文字コード

文字のバイト表現

Charset: utf8mb4 A = 41 あ = E3 81 82 = F0 9F 8D A3 = F0 9F 8D BA

Collation

文字の照合規則 照合順序

Collation 一覧 mysql> show collation; +--------------------------+----------+-----+---------+----------+---------+ Collation Charset Id Default Compiled Sortlen +--------------------------+----------+-----+---------+----------+---------+ big5_chinese_ci big5 1 Yes Yes 1 big5_bin big5 84 Yes 1 dec8_swedish_ci dec8 3 Yes Yes 1 dec8_bin dec8 69 Yes 1 cp850_general_ci cp850 4 Yes Yes 1 cp850_bin cp850 80 Yes 1 hp8_english_ci hp8 6 Yes Yes 1 hp8_bin hp8 72 Yes 1 koi8r_general_ci koi8r 7 Yes Yes 1 koi8r_bin koi8r 74 Yes 1 latin1_german1_ci latin1 5 Yes 1 latin1_swedish_ci latin1 8 Yes Yes 1 latin1_danish_ci latin1 15 Yes 1 latin1_german2_ci latin1 31 Yes 2 latin1_bin latin1 47 Yes 1 latin1_general_ci latin1 48 Yes 1 latin1_general_cs latin1 49 Yes 1

Charset 毎に Collation がある

utf8mb4 の Collation 全部で 16 個 mysql> show collation like 'utf8mb4%'; +------------------------+---------+-----+---------+----------+---------+ Collation Charset Id Default Compiled Sortlen +------------------------+---------+-----+---------+----------+---------+ utf8mb4_general_ci utf8mb4 45 Yes Yes 1 utf8mb4_bin utf8mb4 46 Yes 1 utf8mb4_unicode_ci utf8mb4 224 Yes 8 utf8mb4_icelandic_ci utf8mb4 225 Yes 8 utf8mb4_latvian_ci utf8mb4 226 Yes 8 utf8mb4_romanian_ci utf8mb4 227 Yes 8 utf8mb4_slovenian_ci utf8mb4 228 Yes 8 utf8mb4_polish_ci utf8mb4 229 Yes 8 utf8mb4_estonian_ci utf8mb4 230 Yes 8 utf8mb4_spanish_ci utf8mb4 231 Yes 8 utf8mb4_swedish_ci utf8mb4 232 Yes 8

utf8mb4 の Collation utf8mb4_turkish_ci utf8mb4 233 Yes 8 utf8mb4_czech_ci utf8mb4 234 Yes 8 utf8mb4_danish_ci utf8mb4 235 Yes 8 utf8mb4_lithuanian_ci utf8mb4 236 Yes 8 utf8mb4_slovak_ci utf8mb4 237 Yes 8 utf8mb4_spanish2_ci utf8mb4 238 Yes 8 utf8mb4_roman_ci utf8mb4 239 Yes 8 utf8mb4_persian_ci utf8mb4 240 Yes 8 utf8mb4_esperanto_ci utf8mb4 241 Yes 8 utf8mb4_hungarian_ci utf8mb4 242 Yes 8 utf8mb4_sinhala_ci utf8mb4 243 Yes 8 utf8mb4_german2_ci utf8mb4 244 Yes 8 utf8mb4_croatian_ci utf8mb4 245 Yes 8 utf8mb4_unicode_520_ci utf8mb4 246 Yes 8 utf8mb4_vietnamese_ci utf8mb4 247 Yes 8 +------------------------+---------+-----+---------+----------+---------+

utf8mb4 の Collation utf8mb4_general_ci utf8mb4_bin utf8mb4_unicode_ci utf8mb4_unicode_520_ci utf8mb4_ 言語 _ci (utf8m4_ japanese_ci は無い )

utf8mb4_general_ci utf8mb4 charset のデフォルト collation ASCII 大文字小文字を区別しない (A=a) 絵文字を区別しない ( = )

utf8mb4_bin varchar(99) binary 全文字を区別する (A a, ) PostgreSQL と同じならこれでいい

utf8mb4_unicode_ci Unicode Collation Algorithm 4.0.0 http://www.unicode.org/reports/tr10/ http://dev.mysql.com/doc/refman/5.6/en/charset-unicode-sets.html ASCII 大文字小文字を区別しない (A=a) 絵文字を区別しない ( = ) ひらがな カタカナ 濁点有無 全角 半角を区別しない ( は = ば = ぱ = ハ = バ = パ = ハ )

utf8mb4_unicode_520_ci Unicode Collation Algorithm 5.2.0 ASCII 大文字小文字を区別しない (A=a) 絵文字を区別する ( ) ひらがな カタカナ 濁点有無 全角 半角を区別しない ( は = ば = ぱ = ハ = バ = パ = ハ )

ハハ = パパ = ババ問題誰得

utf8mb4_*_ci Collation A : a : は : ぱ general = = bin unicode = = = unicode_ 520 = =

ぼくらが本当に欲しかったもの Collation A : a : は : ぱ general = = bin unicode = = = unicode_ 520 = = japanese =

だ だれか utf8mb4_ japanese_ci を作って (; Д`)

おまけ

同じ文字とみなされるかどうかは weight_string() で確かめられる

utf8mb4_general_ci mysql> select hex(weight_string(' ' collate utf8mb4_general_ci)); +----------------------------------------------------+ hex(weight_string('?' collate utf8mb4_general_ci)) +----------------------------------------------------+ FFFD +----------------------------------------------------+ mysql> select hex(weight_string(' ' collate utf8mb4_general_ci)); +----------------------------------------------------+ hex(weight_string('?' collate utf8mb4_general_ci)) +----------------------------------------------------+ FFFD +----------------------------------------------------+

utf8mb4_unicode_520_ci mysql> select hex(weight_string(' ' collate utf8mb4_unicode_520_ci)); +--------------------------------------------------------+ hex(weight_string('?' collate utf8mb4_unicode_520_ci)) +--------------------------------------------------------+ FBC3F363 +--------------------------------------------------------+ mysql> select hex(weight_string(' ' collate utf8mb4_unicode_520_ci)); +--------------------------------------------------------+ hex(weight_string('?' collate utf8mb4_unicode_520_ci)) +--------------------------------------------------------+ FBC3F37A +--------------------------------------------------------+

おまけ 2

パとハ utf8_unicode_ci では パ = ハ = ハ パ は一文字 ハ は二文字 ' パ ' LIKE ' ハ ' => 偽 ' パ ' = ' ハ ' => 真

= と LIKE は違うらしい Per the SQL standard, LIKE performs matching on a percharacter basis, thus it can produce results different from the = comparison operator http://dev.mysql.com/doc/refman/5.6/en/string-comparison-functions.html#operator_like

おわり