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
60
MySQL Shell dumpInstance の仕組み
mita2
0
96
MySQLの容量とか圧縮まわり
mita2
0
70
MySQL 透過的暗号化とSSLを使ってみた
mita2
0
81
OSC 2017 Osaka MySQL 落ちないDBサーバの作り方
mita2
0
81
OSC 2017 Okinawa MySQL の高可用性構成比較 と新機能 Group Replication
mita2
0
94
My MySQL Best Practices
mita2
0
78
(続)MySQL Group Replication
mita2
0
130
Featured
See All Featured
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.5k
Thoughts on Productivity
jonyablonski
76
5.2k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.7k
Evolving SEO for Evolving Search Engines
ryanjones
0
210
30 Presentation Tips
portentint
PRO
1
320
It's Worth the Effort
3n
188
29k
Large-scale JavaScript Application Architecture
addyosmani
515
110k
New Earth Scene 8
popppiees
3
2.3k
WCS-LA-2024
lcolladotor
0
630
Typedesign – Prime Four
hannesfritz
42
3.1k
First, design no harm
axbom
PRO
2
1.2k
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