南無ちゃんのブログ    https://namva.net

天下御免の夢中人=南無ちゃんは、今日も元気で明るく楽しく逞しく生きてゆく。

VB.NETで書いたMySQLアプリが突然動作不能に

2022-05-07 20:31:14 | プログラミング

 昨日、とある方から電話があり、私が書いたアプリが動作しなくなった(エラー終了する)というのです。Linux(Ubuntu)上でMySQLサーバーが動作しており、Windows10パソコンからMySQLサーバーにアクセスするというシステムで、Windows10側のアプリはVB.NET 2019で書いています。

 今日、電話で詳しく状況を確認すると、Windows10パソコン側でMySQL Workbenchを使ってMySQLにアクセスすると正常にデータベース(テーブル)にアクセスできるというので、ネットワークを含めハードウェアは正常に動作しており、データベースも正常に動作しているようです。

 電話では、これ以上のことは分からないと判断し、詳しい状況確認のために、岡山市内まで車を走らせました。VisualStudioを使ってVB.NETアプリを起動してみると、Character set 'utf8mb3' is not supported by .NET Frameworkという例外が発生して、アプリケーションが異常終了していることがわかりました。この例外は、MySQL.Data.dllの中で発生していることも分かりました。

 データベースの更新状況から、5月3日までは正常に動作していたようです。何故、突然 .NET Frameworkでサポートしていないなどと言い出したのでしょうか?ネット検索してみると、同じような状況で困っている人がいることが分かりましたが、即座に対応策に結びつくような記事は見当たりませんでした。検索した事例の中には「MariaDbでは・・・」というものもありましたが、私が使っているデータベースは、ORACLEのMySQLです。.NET Frameworkの方では、'utf8mb4'なら大丈夫そうなので、MySQLの側で'utf8mb3'の代わりに'utf8mb4'を使うようにすれば解決できそうです。

 MySQL Workbenchを使って、MySQLサーバー側のデフォルトのキャラクタセットがどのように設定されているのか確認したところ、'utf8mb3'と'utf8mb4'が混在していることが分かりました。

 全部のキャラクタセットを'utf8mb4'に統一すれば問題解決できそうです。

 一応データベースのバックアップを取ってから、次のような手順で全部のキャラクタセットを'utf8mb4'に変更・変換しました。

こちらの記事を参考にしました。)

1)テーブル内の全ての文字コードと全てのカラムの文字コードをutf8mb4に変換する。

  ALTER TABLE テーブル名 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

  全てのテーブルについて上記コマンドを実行する。

2)データベースの文字コードをutf8mb4に変更する。

  ALTER DATABASE データベース名 CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

3)テーブルの文字コードを変換する。

  ALTER TABLE テーブル名 CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

  全てのテーブルについて上記コマンドを実行する。

 上記の作業により、突然エラー終了するようになったWindows10アプリが、従来と同じように正常に動作するようになりました。ホッとしました。後で、ブログを書いている時に、3)の作業は1)とダブっていて不要だったのではないかと思いましたが、実際はどうなんでしょうか?

 ところで、utf8mb3とutf8mb4との違いは何なんでしょうか??(こちらの記事を参考にしました。)

 私は、この問題に直面するまでutf8mb3もutf8mb4も聞いたことがありませんでした。唯一知っていたのは、utf8だけです。utf8のことをutf8mb3と呼んでいるようです。つまり3バイトのutf8という意味のようです。これだと表現できない文字があるので、4バイトのutf8が考案されてutf8mb4と呼ばれるようになったみたいです。つまり、utf8だと問題あり!なので、デフォルトとしてはutf8mb4を指定しましょうね・・・ということのようです。

 でも・・・突然使えなくなるなんて酷いじゃないですか?! このWindows10アプリは、昨年10月にサーバーを引っ越しする時に、再ビルドしたので、この時に問題が発覚していれば、それなりに対応したのに・・・今さらジローです。

コメント    この記事についてブログを書く
« DXCC Challengeのプラックが... | トップ | ブドウの株元に畳表を敷く »
最新の画像もっと見る

コメントを投稿

プログラミング」カテゴリの最新記事