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

MySQL go-sql-driver mysql と collation

Satoshi MITANI
August 29, 2024
83

MySQL go-sql-driver mysql と collation

Satoshi MITANI

August 29, 2024
Tweet

Transcript

  1. 1.charset=utf8mb4 • × utf8mb4_0900_ai_ci になる • MySQL 8.0 で utf8mb4

    のデフォルトの照合順序が general_ci から 0900_ai_ci に変更されました。 • charset=utf8mb4 では COLLATE句のない SET NAMES utf8mb4 が実⾏される
  2. )BOETIBLFSFTQPOTF SET NAMES <CHARSET> [COLLATE <COLLATION>] Initial Handshake Handshake response

    Client • ハンドシェイク時にもCOLLATIONは指定できる • 接続後に、改めてSET NAMESすると、ハンドシェイク時の値から切り替わる
  3. • charset=utf8mb4&collation=utf8mb4_general_ci WΑΓલͷڍಈ SET NAMES utf8mb4 Initial Handshake Handshake response

    utf8mb4_general_ci Client $0--"5&͕ࢦఆ͞Ε͍ͯͳ͍ ͨΊɺ.Z42-Ҏ߱Ͱ͸ @BJ@DJʹͳΔ
  4. ͦͷଞؾ͍ͮͨ͜ͱ • v1.8 より前では、charsetとcollationがチグハグな組み合わせでも通る • charset=latin1&collation=utf8mb4_general_ci • collation だけ指定するほうがちょびっと速い •

    SET NAMES するかどうかは charsetの指定の有無 • 指定できない collation がある mysql> select max(id) from COLLATIONS; +---------+ | max(id) | +---------+ | 323 | +---------+ IUUQTHJUIVCDPNHPTRMESJWFSNZTRMCMPCGDCGEGDGGFDGDPMMBUJPOTHP-
  5. go-sql-driver/mysql౴͑ No ドライバのパラメータ handshake SET NAMES general_ci になる︖ 1 charset=utf8mb4

    utf8mb4_general_ci SET NAMES utf8mb4 × 2 collation=utf8mb4_general_ci utf8mb4_general_ci - ◯ 3 charset=utf8mb4& collation=utf8mb4_general_ci utf8mb4_general_ci SET NAMES utf8mb4 (>= 1.8) SET NAMES utf8mb4 COLLATE utf8mb4_general_ci (< v1.8) ◯ >= v1.8 × < v1.8 4 なし utf8mb4_general_ci - ◯