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 cond
と UPDATE ... 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
も参照せよ。