MySQLの文字コードがUTF8になっていなかったので死ぬほど悩んだ話

投稿日:2018-09-12

結論から言うと、タイトルの通りMySQLのインストール後にいろいろ作業してたんだけど、文字コードがUTF 8になってなかったので、原因の究明と解消にすげぇ時間がかかった。

顛末

年に何回もない作業なんだけど、展示会とかお客さんへの試用機として、自社のソフトをセットすることがあります。

その時に、今現在所属しているプロジェクトではオラクルを使っているんだけど、それ以外の製品だとOracle以外のDBを使うこともあるんです…

とは言え、インストールの手順書等は整備されているので、基本的には手順書どおりに作業進めていけばソフトのセットアップは終わる…はずなんです。

それが終わらなかった。

必要なソフトがインストールできない件

まず、ウェブ版のインストーラーを使ってのインストール手順が用意されているので、手順通りにそれを進めていく。

すると、一つ目の問題が。

手順書どおりにやっているにもかかわらず、MySQLのインストール対象になるソフトのリストが手順書どおりにならない。

これは、MySQLをアンインストールしてインストールを繰り返しても事態は好転せず。

なので、仕方なくオフライン版のインストーラーを使用することで解決。

原因と言えるかどうかわからないけど、ウェブ版のインストーラーでは、必要なソフトのダウンロードがうまくできなかった?みたい。

なので、その時の状況が許すのであれば、他のソフトについてもオフライン版のインストーラーを使った方がやはり確実だなと。

文字コードがUTF-8にならない件

これはすごい悩んだ。

実際に手順を踏んで操作してみれば、別にたいした作業してないんだけど、MySQLを触ったことがほとんどない自分からすると、そもそもの原因にたどり着くのがすごく困難だった(笑)

原因は、タイトルの通り文字コードはUTF 8になっていなかったこと。

それに気づくのに遅れていしまった理由は、今回使用したソフトウェアのインストールに失敗するところで、ログらしいものが何も無かったこと。

だって、せめてエラーログが出るとかエラーコードのダイアログでも出ていればそこを頼りに原因を探すこともできるけど、今回の場合、作成に失敗しましたとメッセージが出るだけで、原因究明に必要なものが何もなかった…

データベースの中身を見ても、とりあえずテーブル等は作成されているし、1部のデータが文字化けをしている状態だった。

まぁ、文字化けをしている時点で既に正しくはないんだけど、そこを確認すると言うチェック項目がないので今回は完全にスルーしていた。

その後は画面を使った動作確認に入るんだけど、一部必要なデータがインポートしきれていなかったりして、操作に失敗する。

そこで初めて、正しく作業ができていなかったと判明するわけで…

MySQLの文字コードの変更方法

MySQLのインストール時にデフォルト設定として文字コードが意図した通り(今回の場合はUTF-8)でインストールされるとは限らないので、インストールが終わった段階で必ず文字コードをチェックするようにしたい。

文字コードの確認方法

コマンドプロンプトで以下を入力


mysql -u root -p

パスワードを聞かれるのでもういいですくれるのインストール時に設定したパスワードを入力。

ログインしたらいいかを入力して文字コードの一覧を確認する。


show variables like '%char%';

ここで、latin1 とかcp392とか表示されていたら、その項目についてはutf8ではないので設定を変更する。

今回の場合、character_set_serverがlatin1がutf8である必要があった。

設定は以下のファイルを対象にする。

C:¥ProgramData¥MySQL¥MySQL Server 5.7¥my.ini

作業する前に、必ずファイルのバックアップを取っておく事。

インストールする場所によっては末尾の数字が違ったり、そもそもインストールするフォルダを別のところに設定したりしていればそこを参照すること。

あとは、以下を追記もしくは、修正する。



default-character-set=utf8

character-set-server=utf8

この2行を追加したら、コントロールパネル→管理ツール→サービスを開き、MySQLのサービスを再起動する。

コマンドからやってもいいけど、使う頻度が少なくてうろ覚えで結局調べるぐらいなら、サービスの再起動って覚えた方が良い。

再起動が終わったら、先の手順でMySQLにログインし直して、文字コードを表示し、utf8 になってる事を確認する。

サービスの再起動に失敗するとか、文字コードがutf8 になってない場合は、記述が間違ってるので、一旦バックアップに戻してから1行ずつやり直す。

まとめ

ここまで、慣れてしまえば時間はたいしてかからないので、インストールが終わった段階で確認するようにしたい。

社内のマニュアルとかだとインストール時のデフォルト設定で何も問題が起きないとそのままになってて、たまに今回みたいなイレギュラーな事態が発生すると誰も当てに出来ない事になったりするので要注意。

今回は、割と回数こなしてる人に聞いても、「俺がやってる時にそんなエラー出た事ねぇよ?」とか言われて、マジか(ㅇㅁㅇ;;)ってなったからね。

デフォルト設定で作業進めるようなマニュアルの場合は、ホント気をつけるべき。







-PC
-

関連記事

ORACLE:普段使っていないと、どうしても忘れるSQLメモ。

逆引きSQL構文集 文字列を置換する http://www.sql-reference.com/string/translate.html 文字列を連結する http://www.sql-refere …

外付けキーボードの有用性。

普段から長文を入力をしない人とか、長時間PCを操作しない人だとピンと来ないかもしれないけど、キーボードって、割と重要。 打鍵感が~とか、拘って高いのを買ってる人とかもいるんだけど、個人的には割りとアリ …

色々悩んだ結果、電動昇降デスク FlexiSpot E7 を買った

前々から欲しかったFlexiSpot の電動昇降デスクを購入した。 FLEXISPOT スタンディングデスク 電動式昇降デスク 高さ調節 69-118cm パソコンデスク 学習机 衝突検知機能付き E …

SQL文中で全角文字を使うなと言われたので、ORACLEでJOIN句の条件式をCASE文で分岐させる

JOINの条件式にCase文を入れる http://blog.goo.ne.jp/ilikehobby/e/80b471f96f6d693b6c5df75f18591c0e SQL文中で全角文字を使う …

VMWareがだめだったから、VirtualBoxでUbuntuを使おうとして駄目だった話。

日本の中心付近で仕様変更と闘うSE日記VMWare導入したかったけど、断念した話。http://ht-jp.net/blog/pc/vmware-ubuntuなんとなく仕事でPGをやり続けるのに気が重 …


カテゴリー