MySQL
最終更新日: 2024年3月18日
Wagby で指定した型は、データベース内で次のように扱われます。
Wagby のインポート処理では、大量の更新用SQLを発行します。このとき、MySQL がトランザクション毎に物理ディスクに対してログのフラッシュ処理が行われる設定になっていると、処理に時間がかかります。
次のように設定すると、書き込みパフォーマンスが向上します。
仕様および制約
「java.sql.SQLException: Specified key was too long; max key length is 1024 bytes」
上記エラーが発生した場合には、モデルの定義を見直し主キーの長さが 1023 バイト以内に収まるようにしてください。型のマッピング
整数型
integer
文字列型
varchar(255) (※1,2)
文字列型 (テキストエリア)
text (※3)
日付型
date
時間型
time
日付時間型
datetime
ファイル型(ファイル名)
varchar(255)
1バイト整数
tinyint
2バイト整数
smallint
4バイト整数
integer
8バイト整数
bigint
4バイト浮動小数点数 (※4)
float
8バイト浮動小数点数 (※4)
double precision
固定値 (作成日/更新日)
datetime
その他 (URL型/メールアドレス型など)
varchar(255)
パフォーマンスチューニング情報
インポート処理の改善
innodb_flush_log_at_trx_commit = 0
ただしこの設定のままですと、通常の運用で障害発生時にデータを失う可能性が高まるので、インポート処理が終わり次第、デフォルト値 ("1") に戻すことが求められます。
参考資料
InitLoaderコマンドで複数のSQLを実行させる場合
Wagbyが提供するデータのインポートツールInitLoaderは、開発者が独自に定義したSQL文を実行することができます。
InitLoaderが読み込む設定ファイルに記述したsql要素で、複数のSQLをセミコロンで区切って記述する場合、MySQLのMultiQueries指定を有効にする必要があります。
環境設定ファイル project_env.xls で、MySQL への接続URLの末尾に以下の指定を加えることで、本設定を行うことができます。
&allowMultiQueries=true
参考情報:「Connector/J の Driver/Datasource クラス名、URL シンタックス、および構成プロパティ」
http://dev.mysql.com/doc/refman/5.1/ja/connector-j-reference-configuration-properties.html
トラブルシューティング
"java.time.zone.ZoneRulesException: Unknown time-zone ID: JST" エラーが発生する。
MySQL の JDBC ドライバが 8.0.23 以降の場合に生じます。JDBC接続文字列に含まれるタイムゾーン指定の文字列を次のようにしてください。
&connectionTimeZone=Asia/Tokyo
R8.5.14/R9.1.5/R9.2.1 で、この表記に対応しました。
インポート時に '∞' is not a valid numeric or approximate numeric value エラーが発生する。
NaNが含まれている場合
インポートしようとしている xml ファイルで、小数型の要素に 'NaN' という文字が含まれている場合はエラーになります。
xml ファイルを直接、編集して NaN を取り除いてください。
有効な小数桁を超えている場合
インポートしようとしている xml ファイルで、小数型の要素に MySQL の有効な桁数を超えた数値が含まれている場合はエラーになります。
例えば8バイト浮動小数の項目は MySQL の double precision 型に格納されます。このとき、xml ファイル中の項目の値が "0.06511627906976744" と記述されている場合、MySQL がこの値を正しく処理できずエラーとします。入力値を短くすることでインポート処理を成功させることができます。