今まで溜めていたデータを SQLite から MySQL に移行しようとしてハマって一日終了した.
とりあえずダンプファイル形式を変換するスクリプトがあるので当てる.
テーブルはあらかじめ作っていたので CREATE TABLE
は消したが,消す必要はなかったな…….
先頭・末尾にそれぞれ START TRANSACTION;
と COMMIT;
を入れないと,途中どこかでエラーが出てもそこまでのデータが挿入されてしまう.
歴史的経緯で TIMESTAMP が実数型になっていたので,雑に変換するスクリプトを書いて当てた.
import sys import re import time pattern = re.compile(r",(\d+(\.\d+(e\+\d+)?)?)\);") for line in sys.stdin: line = line.rstrip() m = pattern.search(line) if m: target = m.group(1) unixtime = float(target) timestruct = time.localtime(unixtime) timestr = "'{}'".format(time.strftime('%Y-%m-%d %H:%M:%S', timestruct)) print(line.replace(target, timestr)) else: print(line)
データを流し込んでみたところエラーが出る.
ERROR 1366 (HY000) at line 79013: Incorrect string value: '\xF0\x9F\x98\x8C\xF0\x9F...' for column 'comment' at row 1
ググってみたところどうやら絵文字っぽい雰囲気があった.
CREATE DATABASE db DEFAULT CHARACTER SET utf8mb4
してみたが直らない…….
疲れたし喉も目も終わったので今日はここまでです.