mySQL
データベースはutf8mb4
で作っているのにTypeORMを使うと絵文字が入らない。という問題。
typeorm
のcreateConnection
をするとcharset
に関係なくcharset=UTF8_GENERAL_CI
になってしまうため、どこかで設定する必要があります。
解決策1
ormconfig.json
でcharset
を指定する。
...
"username": "root",
"extra": {
"charset": "utf8mb4"
},
...
解決策2
createConnection
でオプションを指定する。
index.ts
...
import { createConnection, getConnectionOptions } from 'typeorm';
...
const connectionOptions = await getConnectionOptions();
Object.assign(connectionOptions, { charset: 'utf8mb4' });
const connection = await createConnection(connectionOptions);
...
メモ
答え: https://github.com/typeorm/typeorm/issues/390
ormconfig.json
で設定するほうが好みだったので解決策1を選択しました。上記のgithub issueには、
Just wanted to point out that setting
charset
inside theextra
options is obsolete since commit6aeda88
(July 2017).
Just add thecharset
option directly toConnectionOptions
.
とありましたが今でもextra
できます。