🤖

typeormでMySQLを使用時の文字化け(?が表示される)に解決する

2021/11/20に公開

概要

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"
  }
}

参考

https://qiita.com/YusukeHigaki/items/2cab311d2a559a543e3a

https://qiita.com/natsuhiko/items/2def38f1795c31acd486

https://github.com/typeorm/typeorm/issues/390

Discussion