go sql driver mysql - arosh/arosh.github.com GitHub Wiki

https://github.com/go-sql-driver/mysql/blob/cf72fd249522a0cc5e1ce727dfa15189dcb6411f/README.md

&mysql.Config{} したくなるときは代わりに mysql.NewConfig() を使うべき

https://pkg.go.dev/github.com/go-sql-driver/mysql#NewConfig

allowAllFiles

LOAD DATA LOCAL INFILE を使うときは事前にディレクトリを明示的に許可しておかないといけなくなるという変更が MySQL に入った。このオプションで true を設定すると全部許可されるが、非推奨である。

https://yoku0825.blogspot.com/2018/07/mysql-80load-data-local-infile-error.html

allowCleartextPasswords

ハッシュ化や暗号化なしでパスワードをやり取りする cleartext という認証プラグインがあり、それの利用を許可する。デフォルトではオフ。

allowNativePasswords

MySQL 5.7 までデフォルトだった mysql_native_password の使用を許可する。デフォルトでオン。caching_sha2_password を強制したくなったらオフにする。

allowOldPasswords

MySQL 4.1 より昔に使われていた old_password と呼ばれている弱い認証方式を許可する。デフォルトではオフ。

charset

collation で設定するほうがおすすめらしい。

checkConnLiveness

コネクションプールの死活監視をして、切れているコネクションがあったらいい感じに扱う。デフォルトではオン。負荷のパターンによってはオフにしたい場合があるのかな?

❗ collation

照合順序を設定する。charset ではなくこちらを使うことを勧める。

http://dsas.blog.klab.org/archives/52191467.html

clientFoundRows

UPDATE 文は通常は変更された行の数を返すが、オンにすると変更されなかった行も含めて条件にマッチした行を返す。デフォルトではオフ。

SELECT COUNT(*) FROM ... WHERE condUPDATE ... FROM ... WHERE cond をロック無しでアトミックに実行したい場合には便利なのかもしれない。

❗ columnsWithAlias

たとえば SELECT u.id FROM users as u というクエリを実行したとき sql.Rows.Columns()id ではなく u.id を返すようになる。

お好みでどうぞ。

❗ interpolateParams

クライアントサイドでプレースホルダーの置換を行う。デフォルトではオフだが、これは一部の charset では脆弱性回避のため使用できないのが理由である。utf8 や utf8mb4 を使っている限りはオンにして問題ない。

http://dsas.blog.klab.org/archives/52191467.html

loc

parseTime=true を設定すると DATE や DATETIME を time.Time に自動的に変換してくれるが、MySQL の DATETIME にはタイムゾーンの概念が無いので、どのように解釈すればいいか非自明である。loc を与えることでタイムゾーンの情報を time.Time に入れてくれる。

default_time_zone = +00:00 を設定して、すべて Etc/UTC で扱うようにするのが良さそう。

❗ maxAllowedPacket

クライアント側の max_allowd_packet を設定する。0 を設定するとサーバー側の設定値と同期するようになる。

❗ multiStatements

よくある複数行の SQL を許可する設定。

❗ parseTime

DATE や DATETIME を time.Time に自動的に変換してくれる。loc も参照せよ。

readTimeout

read のタイムアウトを設定する。writeTimeout もあるのでそちらも参照せよ。

rejectReadOnly

read_only が有効な MySQL に接続できなくする。フェイルオーバー時の不整合を防ぎたいとき有効な場合がある。

serverPubKey

MySQL の公開鍵を登録する。

timeout

コネクションを確立するまでのタイムアウト (dial timeout) を設定する。デフォルトでは OS のデフォルト値(どうやって確認する?)を使うらしい。

tls

コネクションの暗号化を有効にする。

writeTimeout

write のタイムアウトを設定する。readTimeout も参照せよ。