Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

mirakc + MariaDB(mysql) の環境で番組情報更新に失敗する #435

Closed
nengoro opened this issue Mar 23, 2021 · 2 comments
Closed

Comments

@nengoro
Copy link

nengoro commented Mar 23, 2021

環境

  • EPGStation Docker Image: l3tnun/epgstation:v2.1.4-alpine
    • Version of EPGStation: 2.1.4
    • Version of Node: 14.16.0
    • Version of NPM: 6.14.11
  • mirakc Docker Image: mirakc/mirakc:master-alpine
  • MariaDB Docker Image: mariadb:10
  • OS: Ubuntu 20.04.2 LTS
  • Architecture: arm64 (Raspberry Pi 4 Model B)

Issue

mirakc + MariaDB(mysql)で運用している環境のみで発生する問題かもしれませんが、番組情報の更新を完了できずEPGUpdaterがエラーを繰り返します。

[2021-03-21T15:23:41.193] [INFO] system - start update channel
[2021-03-21T15:23:42.117] [INFO] system - done update channel
[2021-03-21T15:23:42.119] [INFO] system - get programs
[2021-03-21T15:23:42.732] [INFO] system - done get programs
[2021-03-21T15:23:42.733] [INFO] system - start update programs
[2021-03-21T15:24:10.731] [ERROR] system - update programs error
...

どうやら mirakc /api/programs が返すUTF-8の4バイト文字を含むデータをDBにINSERTする際に、MariaDB側が以下のようなエラーを出しているようでした。

code: 'ER_TRUNCATED_WRONG_VALUE_FOR_FIELD',
errno: 1366,
sqlMessage: "Incorrect string value: '\\xF0\\xA0\\xAE\\xB7\\xE7\\x94...' for column `epgstation`.`program`.`name` at row 1",

調べてみるとエラーを起こしている番組は以下で、「𠮷」の字が4バイト文字に該当します(ちなみにMirakurunでの当該文字はゲタ〓になっています)。

{
  "id": 40018107082,
  "eventId": 7082,
  "serviceId": 181,
  "transportStreamId": 16593,
  "networkId": 4,
  "startAt": 1616860800000,
  "duration": 3600000,
  "isFree": true,
  "name": "KATSU -𠮷田克幸の遺したい言葉-",
  "description": "ファッションブランド「PORTER CLASSIC」を主宰する𠮷田克幸が日本の伝統文化「刺し子」を後世に残すため創作に挑む姿と言葉を紡ぐ。\n\n",
  ...

MariaDBの設定は4バイト文字を受け付けるように utf8mb4 に設定してあり、mysqlコマンドから直接流したINSERTは問題なく通りました。

mysql> show variables like "chara%";
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8mb4                    |
| character_set_connection | utf8mb4                    |
| character_set_database   | utf8mb4                    |
| character_set_filesystem | binary                     |
| character_set_results    | utf8mb4                    |
| character_set_server     | utf8mb4                    |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

mysql> INSERT INTO `program`(`id`, `updateTime`, `channelId`, `eventId`, `serviceId`, `networkId`, `startAt`, `endAt`, `startHour`, `week`, `duration`, `isFree`, `name`, `halfWidthName`, `shortName`, `description`, `halfWidthDescription`, `extended`, `halfWidthExtended`, `genre1`, `subGenre1`, `genre2`, `subGenre2`, `genre3`, `subGenre3`, `channelType`, `channel`, `videoType`, `videoResolution`, `videoStreamContent`, `videoComponentType`, `audioSamplingRate`, `audioComponentType`) VALUES (40018107082, 1616321712785, 400181, 7082, 181, 4, 1616860800000, 1616864400000, 1, 0, 3600000, 1, 'KATSU -𠮷田克幸の遺したい言葉-', 'KATSU -𠮷田克幸の遺したい言葉-', 'KATSU -𠮷田克幸の遺したい言葉-', 'ファッションブランド「PORTER CLASSIC」を主宰する𠮷田克幸が日本の伝統文化「刺し子」を後世に残すため創作に挑む姿と言葉を紡ぐ。\\n\\n', 'ファッションブランド「PORTER CLASSIC」を主宰する𠮷田克幸が日本の伝統文化「刺し子」を後世に残すため創作に挑む姿と言葉を紡ぐ。\\n\\n', NULL, NULL, 2, 1, NULL, NULL, NULL, NULL, 'BS', 'BS13_1', 'mpeg2', '1080i', 1, 179, 48000, 3);
Query OK, 1 row affected (0.00 sec)

Web検索してみると以下のような情報がありました。
typeORM + mySQL で絵文字 🚀😀🇹🇭 が入らない問題 🤔

mySQLデータベースはutf8mb4で作っているのにTypeORMを使うと絵文字が入らない。という問題。

typeormのcreateConnectionをするとcharsetに関係なくcharset=UTF8_GENERAL_CIになってしまうため、どこかで設定する必要があります。

生半可な知識ですが ormconfig.js に ormConfig.charset = 'utf8mb4'; を追記しましたところ、番組情報の更新が行われ正常に稼働しているように思われたため、そのまま運用しています。

限られた環境でのみ発生する、また設定依存の現象でEPGStation側の問題ではないのかもしれませんが、以上ご報告させていただきました。

@l3tnun
Copy link
Owner

l3tnun commented Mar 23, 2021

報告ありがとうございます。
config.yml の mysql の設定で文字コードが設定できると良さそうでしたので、
最新の master にて指定できるようになりました。
ぜひご活用ください。

https://github.com/l3tnun/EPGStation/blob/master/doc/conf-manual.md#mysql

charset が追加されました。

@l3tnun l3tnun closed this as completed Mar 23, 2021
@nengoro
Copy link
Author

nengoro commented Mar 23, 2021

ご対応ありがとうございました!
config.ymlにて設定し、これからも活用させていただきます。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants