文字コードでえらくハマった。
闇雲にググるんじゃなくて、公式ドキュメントを読もうと誓った。
開発環境
# ホスト > docker --version Docker version 20.10.8, build 3967b7d > docker-compose --version docker-compose version 1.29.2, build 5becea4c # コンテナ root@{CONTAINER_ID}:/# mysql --version mysql Ver 8.0.28 for Linux on x86_64 (MySQL Community Server - GPL)
ERROR 1290 (HY000)
ERROR 1290 (HY000) at line 3: The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
発生タイミング
CSVファイルをインポートするとき
どう解決した?
[mysqld] secure-file-priv = "docker-entrypoint-initdb.d"
ファイルを読み取りおよび書き込みできるようにするための設定を追加。
ERROR 1366 (HY000)
ERROR 1366 (HY000) at line 3: Incorrect integer value: 'id' for column 'id' at row 1
発生タイミング
CSVファイルをインポートしてテーブルに反映するとき
どう解決した?
LOAD DATA INFILE '/docker-entrypoint-initdb.d/idol_list.csv' INTO TABLE idol FIELDS TERMINATED BY ',' IGNORE 1 ROWS ;
CSVファイルの1行目がレコードとして読み込まれてしまっていた。
1行目を無視する設定を追加。
文字コードの不具合
mysql> select id, name, height from idol limit 5; +----+--------+--------+ | id | name | height | +----+--------+--------+ | 1 | ?? ?? | 155 | | 2 | ?? ??? | 157 | | 3 | ?? ?? | 154 | | 4 | ?? ?? | 165 | | 5 | ?? ?? | 160 | +----+--------+--------+
日本語が ?
に変換されていた。
発生タイミング
テーブルの中身を目視で確認したとき
どう解決した?
明示的に文字コードを指定。
[mysql] default-character-set=utf8mb4 [mysqld] character-set-server=utf8mb4
ADD ./my.cnf /etc/mysql/my.cnf
↓
mysql> select id, name, height from idol limit 5; +----+------------------+--------+ | id | name | height | +----+------------------+--------+ | 1 | 櫻木 真乃 | 155 | | 2 | 八宮 めぐる | 157 | | 3 | 風野 灯織 | 154 | | 4 | 月岡 恋鐘 | 165 | | 5 | 幽谷 霧子 | 160 | +----+------------------+--------+