Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
MySQL go-sql-driver mysql と collation
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Satoshi MITANI
August 29, 2024
180
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
MySQL go-sql-driver mysql と collation
Satoshi MITANI
August 29, 2024
More Decks by Satoshi MITANI
See All by Satoshi MITANI
MySQL の接続エラーと8.0.24
mita2
0
6.4k
MySQL ShelldumpInstance のバグを調べた件
mita2
0
61
MySQL Shell dumpInstance の仕組み
mita2
0
98
MySQLの容量とか圧縮まわり
mita2
0
75
MySQL 透過的暗号化とSSLを使ってみた
mita2
0
83
OSC 2017 Osaka MySQL 落ちないDBサーバの作り方
mita2
0
82
OSC 2017 Okinawa MySQL の高可用性構成比較 と新機能 Group Replication
mita2
0
95
My MySQL Best Practices
mita2
0
81
(続)MySQL Group Replication
mita2
0
130
Featured
See All Featured
sira's awesome portfolio website redesign presentation
elsirapls
0
320
The Spectacular Lies of Maps
axbom
PRO
1
890
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
610
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
460
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
200
ラッコキーワード サービス紹介資料
rakko
1
4.3M
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
460
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
200
The SEO Collaboration Effect
kristinabergwall1
1
520
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
380
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.7k
Rails Girls Zürich Keynote
gr2m
96
14k
Transcript
go-sql-driver/mysql と DPMMBUJPO 2024.08.29 MyNA 会 @mita2
Ͱ͢ʂ utf8mb4_general_ci を利⽤したいです。 Go⾔語の go-sql-driver/mysql ドライ バを利⽤した場合、接続⼦のパラメータとして適切なものはどれでしょう︖(複数可) サーバはMySQL 8.0で、パラメータはデフォルトとします。 1.
charset=utf8mb4 2. collation=utf8mb4_general_ci 3. charset=utf8mb4&collation=utf8mb4_general_ci 4. 指定なし TRM0QFO lNZTRMz lSPPU1BTTXPSE! ͜͜ z
〜 正解発表 〜
1.charset=utf8mb4
1.charset=utf8mb4 º
1.charset=utf8mb4 • × utf8mb4_0900_ai_ci になる • MySQL 8.0 で utf8mb4
のデフォルトの照合順序が general_ci から 0900_ai_ci に変更されました。 • charset=utf8mb4 では COLLATE句のない SET NAMES utf8mb4 が実⾏される
2.collation=utf8mb4_general_ci
2.collation=utf8mb4_general_ci
2.collation=utf8mb4_general_ci • ◦ utf8mb4_general_ciになる
3 は、あとまわし
4.指定なし
4.指定なし
4.指定なし • ◦ utf8mb4_general_ciになる • go-sql-driver/mysql のデフォルトは utf8mb4_general_ci • collation=utf8mb4_general_ci
と同じ動作
3. charset=utf8mb4&collation=utf8mb4_general_ci
3. charset=utf8mb4&collation=utf8mb4_general_ci ˚
3. charset=utf8mb4&collation=utf8mb4_general_ci • ◦ v1.8 (2024/03/09 Release) 以降では、utf8mb4_general_ciになる • ×
v1.8 より前では、 utf8mb4_0900_ai_ci になる
)BOETIBLFSFTQPOTF SET NAMES <CHARSET> [COLLATE <COLLATION>] Initial Handshake Handshake response
Client • ハンドシェイク時にもCOLLATIONは指定できる • 接続後に、改めてSET NAMESすると、ハンドシェイク時の値から切り替わる
• charset=utf8mb4&collation=utf8mb4_general_ci WΑΓલͷڍಈ SET NAMES utf8mb4 Initial Handshake Handshake response
utf8mb4_general_ci Client $0--"5&͕ࢦఆ͞Ε͍ͯͳ͍ ͨΊɺ.Z42-Ҏ߱Ͱ @BJ@DJʹͳΔ
• charset=utf8mb4&collation=utf8mb4_general_ci WҎ߱ͷڍಈ SET NAMES utf8mb4 COLLATE utf8mb4_general_ci Initial Handshake
Handshake response utf8mb4_general_ci Client
ͦͷଞؾ͍ͮͨ͜ͱ • 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-
まとめ
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 - ◯
感想 • 両⽅、明⽰的に指定するパターンが⼀番⼿堅いかと思ったが、そうでない ケースが発⾒できて⾯⽩かった。 • ハンドシェイクと SET NAMES による 指定の2通りがあることが知れた。
5IBOLT