プログラマ38の日記

主にプログラムメモです。

MySQL: 8.0でJDBCでの利用時にはまったこと

JDBCを使ってMySQLを使っていますが、MySQL 8.0 でいくつかつまづいたのでメモです。

 

1.JDBCドライバのクラス名が変更されている

com.mysql.cj.jdbc.Driver  以前はcom.mysql.jdbc.Driver

 

2.JDBCパラメータが追加が必要です。(次の記載は私がよく使うものです)

プロパティ 説明
allowLoadLocalInfile true

MySQL 8.0で追加

次を使うためにセット  ※他にサーバ側の設定も必要

LOAD DATA LOCAL INFILE 'ファイル名'
INTO TABLE テーブル名
~;

useSSL false

MySQL 8.0で追加

自分の環境では通信の暗号化はしていないためfalse 

serverTimezone JST

MySQL 8.0で追加

自分の環境ではMySQLをインストールしたPCの タイムゾーンが日本時間のためJSTをセット。(インストールしたサーバのタイムゾーンGMTならGMTでセットとなる)

characterEncoding utf8 文字化けを回避するためutf8をセット
rewriteBatchedStatements true JDBCの、PreparedStatement.addBatch  / executeBatch の速度が劇的に早くなるためセット(javaベースのETLツールなどを使う場合はほぼ必須の設定です)
useCursorFetch true これを使わないと大量データがさばけない 
defaultFetchSize 1000 これを使わないと大量データがさばけない 

 

  ※他のサーバ側の設定

my.ini に次の記載が必要です。

local_infile=ON

 

最後に

上記でいくつかはまりましたが、MySQL 8.0で分析関数が使えるようになってとても使いやすいです。

 

row_number() over() で連番を使えるようになっただけでも助かるのに、

row_number() over(partition by ブレークする項目 order by 並び替え項目) で項目単位に1から番号ふることができます。(縦横変換が助かります)