🤖
typeormでMySQLを使用時の文字化け(?が表示される)に解決する
概要
typeorm で MySQL の DB を作成すると、日本語の文字化け(?
が表示される)が発生するので、解決法をまとめます。
解決方法
主な原因は2つあると考えられます。
それぞれに対して解決策を記述していきます。
原因1 MySQL 自体の文字コードが日本語に対応していない
MySQL の起動時に文字コードがlatin1
になっている可能性があります。utf8mb4
(またはutf8
)にする必要があります。
対象方法としては、ローカルの MySQL を用いている場合はこちらの記事が参考になります。
docker を使っている場合は以下のように記述します。
具体て的には、command
の--character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
を起動時に指定します。
version: "3.5"
services:
db:
image: mysql:5.7.34
command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
container_name: mysql-container
environment:
MYSQL_DATABASE: "typeorm_db"
MYSQL_ROOT_PASSWORD: "password"
TZ: "Asia/Tokyo"
restart: "always"
ports:
- "3306:3306"
原因2 typeorm の文字コードに日本語を指定していない
typeorm の文字コードをutf8mb4
(またはutf8
)を指定していない可能性があります。
デフォルトではlatin1
だったはずですので、修正する必要があります。
以下は、ormconfig.json
で設定した例です。
{
"compilerOptions": {
"lib": ["es5", "es6"],
"target": "es5",
"module": "commonjs",
"moduleResolution": "node",
"outDir": "./build",
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"sourceMap": true,
"charset": "utf8mb4"
}
}
参考
Discussion