Upgrade to Pro — share decks privately, control downloads, hide ads and more …

日本MySQLユーザ会ができるまで / making MyNA

日本MySQLユーザ会ができるまで / making MyNA

とみたまさひろ

March 25, 2025
Tweet

More Decks by とみたまさひろ

Other Decks in Technology

Transcript

  1. 自己紹介 • とみたまさひろ ▪ ▪ ▪ • 長野県北部在住 • 趣味

    MySQL / Ruby / 文字化け / マンガ / アニメ • 日本MySQLユーザ会の名ばかり代表 • (最近仕事では PostgreSQL 使ってる) https://bsky.app/profile/tmtms.net https://x.com/tmtms https://tmtms.net 2
  2. EUC-JP 1文字 1〜3バイト • 半角英数(1バイト) 00-7F (ASCII と同じ) • 全角文字(2バイト)

    A1-FE A1-FE • 半角カナ(2バイト) 8E A1-DF • 補助漢字(3バイト) 8F A1-FE A1-FE 23
  3. 「音楽」の中に「山」がある 「ここ」には「海」がある mysql> SELECT '音楽' LIKE '%山%'; +--------------------+ | '音楽'

    LIKE '%山%' | +--------------------+ | 1 | +--------------------+ mysql> SELECT 'ここ' LIKE '%海%'; +--------------------+ | 'ここ' LIKE '%海%' | +--------------------+ | 1 | +--------------------+ 28
  4. 「音楽」と「山」 • 音楽 - B2 BB B3 DA • 山

    - BB B3 「ここ」と「海」 • ここ - A4 B3 A4 B3 • 海 - B3 A4 29
  5. シフトJIS • ASCII ▪ 00-7F • 半角カナ(1バイト) ▪ A1-DF •

    全角文字(2バイト) ▪ 1バイト目 81-9F or E0-FC ▪ 2バイト目 40-7E or 80-FC 2バイト目に 0x5C \(¥) が含まれてる 33
  6. \ は特殊文字 エスケープシーケンス • \n - 改行(0A) • \t -

    タブ(09) • \0 - NUL • \\ - \ • \' - ' • \" - " 34
  7. • 表 → 95 5C • 表n → 95 5C

    "n" → 95 + "\n" → 95 改行 • 表\n → 95 5C 5C "n" → 95 + "\\" + "n" → 表n 37
  8. 2バイト目が \ になる文字 ソ Ы Ⅸ 噂 浬 欺 圭

    構 蚕 十 申 曾 箪 貼 能 表 暴 予 禄 兔 喀 媾 彌 拿 杤 歃 濬 畚 秉 綵 臀 藹 觸 軆 鐔 饅 鷭 偆 砡 纊 犾 38
  9. SQL インジェクション 外部から入力された文字列をそのまま SQL に埋め込むのはまずい なのでエスケープする str = "abc' OR

    1 -- " "WHERE str='#{str}'" #=> "WHERE str='abc' OR 1 -- '" str = "abc' OR 1 -- ".gsub("'", "\\'") #=> "abc\' OR 1 -- " "WHERE str='#{str}'" #=> "WHERE str='abc\' OR 1 -- '" 40
  10. 「表」をエスケープする サーバーがシフトJISに対応してないと「表\'」→「表'」 やばい str = "表' OR 1 -- ".gsub("'",

    "\\'") #=> "表\' OR 1 -- " "WHERE str='#{str}'" #=> "WHERE str='表\' OR 1 -- '" WHERE str='表' OR 1 -- ' 41
  11. 日本語のその後 3.23 で mysqld 実行時に charset を指定できるようになった この時点で自分の実装ではなくなった 4.1 でカラム毎に

    charset を指定できるようになったり クライアント-サーバー間で文字コードを変換できるようになったり だいたい今と同じになった 47
  12. 略称は MyNA myna: ( MySQL Nippon Association ) こじつけ マイナ 意味: 九官鳥 # MySQLって、日本じゃマイナー(MINOR)だよね。

    # それは昔の話さ。と言える日をまつ人の集団。 http://www.mysql.gr.jp/mysqlml/mysql/msg/1730 56