XAMPPでのMYSQL文字化け対応方法

XAMPPのバージョンがあがるにつれMYSQL→MariaDBへ変更されております。

MYSQLのころまでは、何も変更なしでコマンドプロンプトで文字化けは起きなかったのですがMariaDBにかわったころからコマンドプロンプトでは日本語は文字化けとなるようになっていきました。今回はこの対応方法をご説明いたします

原因

コマンドプロンプトはcp932というshift-jisに企業が変更を加えた文字コード。背景にはcp932 では、Microsoftが提示したSHIFT_JISに当時 NEC と IBM が拡張した文字が追加されていることの違いがあります。 (「NEC特殊文字」「NEC選定IBM拡張文字」「IBM拡張文字」が追加されている。windows11となってもコマンドプロンプトやpowershellは内部的にはいまだにこのcp932で動きます。今回はコマンドプロンプトがcp932で動作しているためにMariaDBとの不一致から発生しているのです。

※メモ帳などはutf-8で改善されておりますがwindows11でもいまだ一部の機能は未対応なのです。

※「髙 (はしご高)」や「﨑 (立ち崎)」などがあります。 Shift_JIS と Windows-31J の使い分を誤ったばかりに文字化けが発生します。

XAMPPインストールでは過去のXAMPPバーションではMYSQLの文字コードはcp932設定されておりコマンドプロンプト上は問題ありませんでした。

show variables like "chara%";
+--------------------------+--------------------------------+
| Variable_name            | Value                          |
+--------------------------+--------------------------------+
| character_set_client     | cp932                          |
| character_set_connection | cp932                          |
| character_set_database   | utf8mb4                        |
| character_set_filesystem | binary                         |
| character_set_results    | cp932                          |
| character_set_server     | utf8mb4                        |
| character_set_system     | utf8                           |
| character_sets_dir       | C:\xampp\mysql\share\charsets\ |
+--------------------------+--------------------------------+

しかしMariaDBのバージョンがアップするにつれutf-8の設定と変わってきました。

またwindows11 の文字コードが utf-8 となっていない状態が初期状態のようです。windows11の方は要注意です。

対策1)windows11のロケール変更


対策2)MariaDBの文字コードをutf-8へ変更

my.ini の文字コードが cp932 と古い日本独特の文字コードでしたので一般的な utf-8 へ下記変更

[client]
default-character-set=utf8
省略
[mysqld]
character_set_server=utf8
skip-character-set-client-handshake

文字コードの設定

文字化けを起こさないように文字コードを「UTF-8」に設定します。
「default_charset」を検索して、下記の内容に修正します。

; PHP's default character set is set to UTF-8.
; http://php.net/default-charset
default_charset="UTF-8"

タイムゾーンの設定

タイムゾーンを日本に設定します。
[Date]を検索して、下記の内容に修正します。

[Date]
#date.timezone=Europe/Berlin
date.timezone = Asia/Tokyo

日本語利用のためのマルチバイト設定

日本語を使えるようにマルチバイトを設定します。
[mbstring]で検索して、下記の内容に修正します。

[mbstring]

mbstring.language = Japanese
mbstring.internal_encoding = UTF-8


対策3)mysqlコマンドで cp932を認識させる

※毎回入力が必要です

mysql -u root -p

Enter password: ****
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 9
Server version: 10.4.24-MariaDB mariadb.org binary distribution

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.

MariaDB [(none)]>SET NAMES cp932;

その他の対策


コマンドプロンプトが原因なのでphpMyAdminでSQLを流す。
または参照であればコマンドプロンプト上で
chcp 65001
でコマンドプロンプトはutf-8となり参照できます。但し、この場合、utf-8のマルチバイトはコマンドプロンプトでは対応できないため、テーブル作成もできない状態で参照系のみ有効です。直接原因はMYSQLがMariaDBへかわりバージョンアップされたためcp932未対応が直接的な原因です

注意事項


すでにcp932でデータベースを作成済みの場合は、データベースの削除が必要です

確認方法は show create database データベース名; でご確認ください

例)

show create database kadaidb;

下記が表示されますのでDEFAULT CHARACTER SET がcp932の際は削除となります

CREATE DATABASE `kadaidb` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION='N' */

検証結果

mysql -u root -p

Enter password: ****
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 9
Server version: 10.4.24-MariaDB mariadb.org binary distribution

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.

MariaDB [(none)]> show databases;
+——————–+
| Database |
+——————–+
| information_schema |
| mysql |
| performance_schema |
| phpmyadmin |
| test |
+——————–+
5 rows in set (0.002 sec)

MariaDB [(none)]> 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 | D:\xampp\mysql\share\charsets\ |
+————————–+——————————–+
8 rows in set (0.001 sec)

MariaDB [(none)]> create database kadaidb;
Query OK, 1 row affected (0.002 sec)

MariaDB [(none)]> use kadaidb
Database changed
MariaDB [kadaidb]> CREATE TABLE person (
-> id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
-> title VARCHAR(50),
-> price INT,
-> created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
-> );
Query OK, 0 rows affected (0.017 sec)

MariaDB [kadaidb]> INSERT INTO person(title,price) VALUES (“須田豚バラ”, 1520);
Query OK, 1 row affected, 1 warning (0.002 sec)

MariaDB [kadaidb]> select * from person;
+—-+————+——-+———————+
| id | title | price | created_at |
+—-+————+——-+———————+
| 1 | ?{?c?リバ?? | 1520 | 2022-06-01 22:52:48 |
+—-+————+——-+———————+
1 row in set (0.000 sec)

MariaDB [kadaidb]> SET NAMES cp932;
Query OK, 0 rows affected (0.000 sec)

MariaDB [kadaidb]> select * from person;
+—-+———–+——-+———————+
| id | title | price | created_at |
+—-+———–+——-+———————+
| 1 | ?{?c??o?? | 1520 | 2022-06-01 22:52:48 |
+—-+———–+——-+———————+
1 row in set (0.000 sec)

MariaDB [kadaidb]> INSERT INTO person(title,price) VALUES (“須田豚バラ2”, 1590);
Query OK, 1 row affected (0.002 sec)

MariaDB [kadaidb]> select * from person;
+—-+————-+——-+———————+
| id | title | price | created_at |
+—-+————-+——-+———————+
| 1 | ?{?c??o?? | 1520 | 2022-06-01 22:52:48 |
| 2 | 須田豚バラ2 | 1590 | 2022-06-01 22:56:08 |
+—-+————-+——-+———————+
2 rows in set (0.000 sec)

MariaDB [kadaidb]>

最後に

なかなか、バージョンアップによる問題って発生しますね。わたしもXAMPPはインストールするだけでデータベースはcp932の文字コードで設定されているものだとばかり思っておりました。生徒さんから指摘されて調査すると世界はutf-8文字コードですので、cp932は切り捨てられて行っていることが認識できる機会となりました。プログラムの世界は常に進化している。進化過程を知っている方ほどプログラムの世界は向いているかもしれません。

参考サイト

.gitegnoreをあとで追加した場合

削除したいフォルダ・ファイルをリポジトリから削除する

.gitignoreを設定しても、既にリポジトリに登録されているものはリポジトリに残ったままです。
そこで、下記コマンドを実行し、管理対象から除外します。

$ git rm --cached -r 削除したいディレクトリ

Google Map のAPI取得手順

APIキーの取得

新しいAPIキーを取得する

APIキーを取得するには下記のURLへアクセスして下さい。

画面右上の「キーを取得」をクリックして下さい。

p1-2

次のようなウィンドウが表示されます。「続ける」をクリックして下さい。

p1-3

Googleアカウントにログインしていなかった場合はログイン画面が表示されますので使用するGoogleアカウントでログインを行って下さい。

次の確認画面が表示されます。

上のラジオボタンは新機能のお知らせなどを受け取るかどうかを選択して下さい。

p1-6

認証情報に関する画面が表示されます。

p1-7

作成するAPIキーの名前を指定して下さい。任意の名前で結構です。次に「キーの制限」で「HTTPリファラー (ウェブサイト)」を選択して下さい。

p1-8

リクエストを受け付けるWebサイトを登録します。省略も可能ですが、省略した場合はご自身のAPIキーがどのサイトでも利用できてしまいますので設定を行って下さい。

例えば「localhost」の全てのページを対象にする場合は「localhost/*」のように記述します。入力した後で[Enter]キーをクリックすると次のサイトを登録できるテキストボックスが表示されますので複数のサイトを登録したい場合は同じ手順で設定して下さい。設定が終わりましたら「作成」をクリックして下さい。レンタルサーバ移行後は変更くださいね

p1-9

■■■■■■■■

APIキーが作成されました。

p1-10

作成済のAPIキーが表示されました。

p1-13

それでは次のページから今回取得したAPIキーを使いGoogle Maps APIを使用したアプリケーションを作成していきます。

1ヶ月あたり200ドル分は無料で利用でき、
無料枠を超えた以降は、使用量に応じて課金される仕組みにも変更されました。

1ヶ月200ドル分 = 約28000回Googleマップやストリートビューを表示
(以降は1000回あたり7ドルなので、1回あたり0.007ドルが課金されるようです)

表示1回は、ページを開いて地図などが読み込まれた場合はもちろん、
F5を押して、同じページを新たに更新した場合も1回とカウントされます。

7月16日以降、課金された請求が来ていなければ今のところ無料枠内ということで、今後サイトの運用状況が大きく変わらない限り課金の可能性は低いと思いますが、心配な場合は利用の上限設定ができるので、今回はその方法をご紹介します。

API使用の上限設定

設定は「Google Clpud Platform」にアクセスをして行います。
支払い情報を登録しているアカウントでログインしてください。

上限設定を行うAPIをクリックで選択します

「割り当て」から、各上限設定を行います。

  • Map loads per day ………………………………「1日の表示上限」
  • Map loads per 100 seconds ……………………「100秒間の表示上限」
  • Map loads per 100 seconds per user ……「100秒間かつ1ユーザーの表示上限」

えんぴつマークをクリックして数値を入力。「保存」します。

単純計算では無料枠の28000回を31日で割ると1日あたり900程度ですが、
利用するAPIは複数なので、1日の表示上限は適宜、割り当てる必要があります。

Geocodeing APIキー

住所や建物より緯度経度検索API(geocoding api) キー取得方法

これで有効になりました

こちらも1日のアクセス制限をお付けください

上限として入れる数値はサイトの運用状況によって異なりますので、現在のリクエスト数を目安にして設定を行ってください。

上限を超えた場合、Googleマップなどが正しく表示されなくなりますので、あまりに少ない回数を指定してしまうと、サイトを訪問してくれたユーザーが必要な情報を見られなくなってしまうという本末転倒になりかねません。

特に「1日の表示上限」を極端に少なくしてしまうと、もし上限に達した場合、太平洋時間の午前0時(日本時間16時)までリセットされないので注意が必要です。

良いプログラミング開発を!

精度が悪いですが、住所から緯度経度検索は無料で yahooジオラムもありますのでご検討ください

「ポートフォリオ」の価値

  

 最近感じておりますが、2019年までIT業界は若手エンジニアの売り手市場となり「プログラマー=稼げる業種」という認識広まりました。

 以前はプログラミングの習得方法と言えば、プライベート、大学・専門学校の情報系授業、入社後に研修やOJTで身につけるというのが主流でした。

 しかし2018年頃から プライベート、大学・専門学校の情報系授業 では「教える側の質(スキル)」と「教材の質」が問題となり、プログラミング学校ブームがおきスクールから卒業された生徒の売り手市場で数年にぎわいました。が最近はコロナもあり需要と供給バランスが崩れ、需要である 未経験エンジニア があふれている状況へと変わってきております。高度スキル者を採用側が選べるほどの競争業種へと変わってきました。このような状況下、今回のブログは未経験エンジニア達へ競争へ勝ち抜くための「作るべき自主制作物(ポートフォリオ)」についてお話させて頂きます。

 自主制作物とは何か

 各個人で自主的に行っているプログラミングであり、実際のソースコードや設計書をGitHubなどに載せて職務経歴書にURL記載の上で提出するものを指します。未経験エンジニアの場合は学習評価レポートといったところになります。

 私はIT歴ほぼ40年でスタートアップ企業からメガIT企業まで経験し役員経験も3社あります。採用からとプログラマーの立場の両側からの視点で今回は整理してみました。

企業側採用担当は自主制作物で採用までもっていきたい

 エンジニア採用担当からすると未経験者採用に対して興味がないわけではありません。コロナ不況より団塊の世代の40代、50代の自主退職希望より社員はスリム化となっている実情があります。「未経験者で良い人が居れば」と将来へ望みを繋ぎ採用する企業はあります。

 しかし現実としてプログラミング学校出身者が非常に多いので「○○スクールを卒業しました」だけだとどのくらいの実力がついているのか、適性があるのかさっぱり分からないという問題があります。

 プログラミングスクールや専門学校などで「課金しただけ」の人材もいるということであり、課金した先によってフィルタリングするのは本質ではありません。しかしそれを批判できないくらいには多いです。

 加えて起きている状況として、2020年3月頃に「折角目を掛けて採用し、教育してきた未経験者が一年で自社メディアに転職したり、フリーランスになった」という会社さんの声がいくつか聞こえてきました。元を辿っていくと一部プログラミング学校のLPや、エンジニアになるための情報商材が「1年でフリーランスになれる」と謳っていたことに行き着きます。それを忠実に実行して転職・退職していった諸先輩が居られるという話です。非常に残念な話ではありますが、市場はウイルス以外の要因でも荒れていると言わざるを得ません。

 不景気と荒れた市場が現実として立ちはだかる今、IT偏差値より入試のように必死に勉強し偏差値をアップできた実力とポテンシャルを示すための自主制作物が最も重要視されているのです。

採用担当は同じポートフォリオのレビューに飽きている

 プログラミング学校の教材のパターンとして基礎的な項目を実施した後に最終課題が出されます。その最終課題がそのまま自主制作物として企業に提出されるという流れがあります。これは2013年頃にブームがあったAndroid職業訓練校から見られる手法です。

 プログラミング学校卒業者の方は非常に多いので、結果として最終課題で溢れることになります。端的に言うと飽きています。スクールの最終課題では逆に評価が低い場合もあるのです。

・Twitterクローン
・Instagramクローン
・某フリマアプリクローン
・架空の会社のコーポレートページ
・ポートフォリオサイトという名のLP
・Todo管理や掲示板など

採用担当者の願望:自主制作物でここを見たい

 採用担当が見たいものは何かをざっくりとまとめると下記のようになります。

・プログラマとしての適性/素養
 −丁寧さ
 −きちんと入れられたコメント
・論理的思考力
 −条件分岐
 −ロジック
・自走できるか
 −教材にはない要素を自分で探して組み込めているか
・継続性
 −GitHubのブランチの枝分かれ具合
 −プログラミング卒業後も継続してプログラミングをしているか(好きで実装をしているか)

採用担当者が見たくないもの

・教材のコピペ
 −通称、写経
・著作権違反
・フロントエンジニア志望だがHTML/CSSしかないサイト
・見せることを意識していないサンプル実装

 著作権違反というのは、例えば某有名フリマアプリを再現した自主制作物というのを複数見たことがありますが、バナーから商品画像まで丸パクリでした。中の人に連携しましたが、社会人としてどうなの?という話なので表に出すのは辞めましょう。公序良俗に反するものも同様です。

 フロントエンジニア志望の場合、動的なサイトを作る必要がありますが、「なんだか小奇麗なサイト、コダワリはCSS」という方が非常に多いです。それはコーディングであってプログラミングとは言い難いです。デザイナー職に応募してみてはどうでしょうか。

 下記のようなものが割と見るパターンですが、提出物なので見せることを意識したものをお願いしたいです。ソースコードもそうですが、サンプルで入力したデータにも配慮が必要でしょう。

自主制作物に含まれていてほしいこと

 主にWEB系企業に応募するにあたり、自主制作物に含まれていることが望ましい項目についてピックアップします。

・フレームワークの利用
・条件分岐
・基本的なDBの操作
・継続したGitHubへのcommit

 ソースコードとあわせて提出していただきたいのは下記です。

・特に頑張ったソースコードへのリンク
・設計書

・Herokuなどで良いので動作確認ができるURL

 GitHubのURLを頂くことは先に話したように一般化していますが、殆どの方がオープンライブラリとセットでアップロードされているので「どのファイルを頑張ったのか」が分かりにくいということがあります。「このファイルを見てくれ」というのを注力したポイントとセットで書類に記載するべきでしょう。

 実際に動作するURLをHerokuなどにアップロードしておくのも重要です。動くのかどうか分からないソースコードのレビューもコストがかかるのでセットで提出していただきたいところです。ただ結構な割合で500とか404が返ってくるケースが多く、心象がよくありません。提出後は緊張感を持ってテスト実施しておきましょう。

私が考える、こんな自主制作物がお勧め

 特定の分野への就職に拘りがある場合は、その分野のサービスを実装するのが良いでしょう。そうでない場合は、汎用性の高い自主制作物を作っておく必要があります。私がオススメしたいのはアルバイトシフト管理システムや、勤怠管理システムなど実業務で汎用的に展開できるシステムです。

 何故このシステムをオススメするかというとTwitterやInstagramクローンで作る業務は普通ありませんが、業務系とも言われるシステムであれば自社メディア、SIer、SESのいずれであっても存在する業務なので、より実務に近いアウトプットであると言えます。何より要素が複雑に絡み合うことで上記にある条件分岐も自然と満たされていくことになります。使う側に立ったシステム作りを心掛けましょう

 アルバイト側と店長側でセットで実装しましょう。機能のイメージとしては下記のようになります。

アルバイト側のイメージ

・ログイン
・スマホ対応
・スケジュール画面
・シフト申請画面
・就業履歴確認
・欠勤申請

店長側のイメージ

・管理者ログイン
・従業員管理画面
 新規従業員追加、削除
・承認画面
・従業員スケジュール画面
・ある期間からの昇給/減給
・早朝手当、深夜手当
・欠勤処理
・各種設定画面
・月末締め処理
・給与明細の発行

 サンプルで入力したデータが一桁という人は多いですが、具体的にどういうふるまいをするのか分かりかねるため、サイトの内容にもよりますが100件程度のデータ入力は実施しておくと更に良いでしょう。アルバイトのシフト表や理容店の予約管理などはあらゆる業務分野へ展開できる業務です。これらも推しですね。

 自身で経験してきた業態に特化するのが生のエピソード込で評価が高いと思います。

まとめ

 今回紹介したものはあくまで一例でありますが、世に転がっているポートフォリオよりもぐっと転職合格へ近づけるものと考えています。是非ポートフォリオを考える際に一読をお願いできればと思います。

 MENTAなどよい先生へ出会えて完成させてくださいね。

windows10 ポート番号を使用しているプロセスを終了させる手順

Windowsコマンドプロンプト

OS:WIndows10

使用ツール:コマンドプロンプト

特定のポート番号を使用しているプロセスの確認

以下のコマンドを実行する。 ポート番号が8080の場合は

netstat -ano | find "8080"
パラメータ用途
netstatホストのネットワーク接続状態やソケット/インターフェイスごとのネットワーク統計の確認など
(-a)現在のすべての接続を表示
(-n)出力をIPアドレスなど数値のみに抑制
(-o)プロセスIDを表示
findテキストの検索

プロセスを終了させる

taskkill /f /pid <プロセスID>
パラメータ 用途
taskkillタスクを終了させる
/f強制終了
/pidプロセスIDの指定

実行結果が

> netstat -ano | find "8080"
  TCP         0.0.0.0:8080           0.0.0.0:0              LISTENING       12345
  TCP         [::]:8080              [::]:0                 LISTENING       12346

だった場合は以下の通り

taskkill /f /pid 12345

プログラムエンジニアで働く意味を考えてみた

「生活の糧(お金)」以上での働くことの意味

 「働くこと」そのものについて考えてみたいと思います。

 働く人一人一人にとって、働くことの持つ意味は、それぞれに異なると思います。働くことは当然、私たちにとって給与として生活の糧を得るための手段です。多くの人にとって、それが一番大切なことだと思いますが、私は自分の父が嫌々働いており休みが多くなりやめる。また嫌々ながら働きやめる生活を繰り返し貧乏な生活を虐げられてきました。残念ですが父は、働くことを通じて「何のために生きるのか」という問いの答えを探す道のり、言い換えれば生きている証を社会に刻むこと。このことが生きる生きがいとなっている点が分かっていなかったからだと思います。誰もが働く中で、例えば、仕事のスキルや組織の中の役割、社会のルールなど、多くのことを学び、これらを通して社会を担う一員に成長して、次世代に多くのことをつないでいく営みだと私は思います。

「働くこと」は人が繋がり150%になっていくこと

 また、働くことは人と人が交わりつながる人間的行動であり、人と人がつながればその職場と社会がつながり、そのことで社会的課題を解決し、新たな価値を生み出していく営みだと思います。そのつながりをつくる、いわば橋を架ける人(Bridge Builder)が私たち一人一人なのです。そのことが個人の成長や自己実現を促し、社会の持続可能性を高める原動力になります。さらにいえば、働くことは、さまざまな事情によって、たとえ働くことに多くの困難を抱えたときでも、尊厳を持って社会の中で自立して行けるよう、お互いに支え合う営みをも含むものではないでしょうか。

「職場」は自分の存在意義を示してくれる場

 加えて、働く人にとって職場は単なる仕事場ではなく、自分の存在を確認できる「拠り所」であり「居場所」でもあります。人は人を支えあって互いに協力・教育しながら高いレベルへ進んでいく。それが仕事だと思います

 また、教育と働くことをつなげることです。誰もが平等に教育が受けられ、その教育から働くことへの円滑な移行を支援し、また、働いてからも再び教育が受けられ、より付加価値の高い仕事に就くように生涯学習を常にしていきましょう。

2022年は、能力主義の年になります

 アメリカと同じように成果主義で給与が決められていきます。1990年代から日本のGDPはマイナス10%が現実です。アメリカは500%成長です。日本はもはや先進国と思わないことです。終身雇用はもう存在しない。65才以後も働くためにはどうすればよいかを考え老後の資金を貯めることまで考え、個人の終身ビジョンを考えて生きていく時代なのです。

 また日本だけではなくアジアで活躍できるエンジニアをみなさんは目指してください。現在は海外の労働者によってプログラミングの世界は成り立ってます。日本人のレベルの低下が問題なのです。

 国も危機感を感じ人材育成へ乗り出しております。「専門実践教育訓練給付制度」「第四次産業革命スキル習得講座」これらが物語っております。ぜひ、国の支援金を使って今後の自分へ役立たせてください。

https://www.meti.go.jp/policy/economy/jinzai/reskillprograms/index.html

 危機感をもって自己成長を行っていきましょう。

2021年最後に伝えたかったこと

 守破離 の考えです。プログラミングを操るエンジニアは短い期間では習得は無理です。仕事を通じて仲間を通じて自己成長を行っていきましょう