0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[MySQL]Dockerで環境構築したWebアプリのDBを確認する

Last updated at Posted at 2021-02-19

はじめに

前提:以下の記事どおりに環境構築したWebアプリの、DBの確認方法を記しておきます

[Docker] Ruby2.7.2 / Rails6.0.3 / MySQL8.0の開発環境構築できたメモ

「とりあえずDBの中身見れた!」という状態の自分用メモです。
DB、SQLについても初心者なので、誤り等はご指摘いただけると幸いです。

環境

  • macOS Catalina
  • Docker version 20.10.2
  • docker-compose version 1.27.4

(その他は上記リンクの環境です)

DB確認方法

DBコンテナに接続

docker-compose up -d     #バックグラウンドでコンテナ起動
docker-compose exec db bash    #bashを開いてdbコンテナに命令できる状態にする

root@コンテナID:/#の表示が出ていればOK

MySQLのサービスに入る

mysql -u root -p

# passwordを聞かれるので、「.env」ファイルの「DB_ROOT_PASSWORD」に指定したpasswordを入力してEnter

Welcome to the MySQL monitor.・・・
mysql>の表示が出ていればOK

DB情報を確認するコマンド

存在しているDBを確認

show databases;
mysql> show databases;

+--------------------+
| Database           |
+--------------------+
| information_schema |
| myapp_development  |
| myapp_test         |
| mysql              |
| performance_schema |
| sys                |
+--------------------+

選択したDBのテーブル確認

show tables from データベース名;
mysql> show tables from myapp_development;

+------------------------------+
| Tables_in_myapp_development  |
+------------------------------+
| ar_internal_metadata         |
| areas                        |
| schema_migrations            |
| spots                        |
+------------------------------+

選択したテーブルのカラム確認

SHOW COLUMNS FROM テーブル名 FROM データベース名;
mysql> SHOW COLUMNS FROM areas FROM myapp_development;

+------------+--------------+------+-----+---------+----------------+
| Field      | Type         | Null | Key | Default | Extra          |
+------------+--------------+------+-----+---------+----------------+
| id         | bigint       | NO   | PRI | NULL    | auto_increment |
| name       | varchar(255) | NO   |     | NULL    |                |
| created_at | datetime(6)  | NO   |     | NULL    |                |
| updated_at | datetime(6)  | NO   |     | NULL    |                |
+------------+--------------+------+-----+---------+----------------+

DBの中に入るコマンド

※データーベース名を指定する必要がなくなる

USE データベース名;
mysql> USE myapp_development;

Database changedと表示が出ていればOK

格納データを確認するコマンド

selectwhere 等のSQL文(Progate SQL)

テーブル内の全データ確認

select * from テーブル名;
mysql> select * from areas;

+----+-----------+----------------------------+----------------------------+
| id | name      | created_at                 | updated_at                 |
+----+-----------+----------------------------+----------------------------+
|  1 | ?         | 2021-02-16 10:28:16.785206 | 2021-02-16 10:28:16.785206 |
|  2 | ??        | 2021-02-16 10:28:16.802190 | 2021-02-16 10:28:16.802190 |
|  3 | ???       | 2021-02-16 10:28:16.820425 | 2021-02-16 10:28:16.820425 |
|  4 | ????      | 2021-02-16 10:28:16.836546 | 2021-02-16 10:28:16.836546 |
+----+-----------+----------------------------+----------------------------+

出力結果の文字化けを修正

MySQLのデフォルトの文字コード確認

show variables like 'character%';
mysql> show variables like 'character%';

+--------------------------+--------------------------------+
| Variable_name            | Value                          |
+--------------------------+--------------------------------+
| character_set_client     | latin1                         |
| character_set_connection | latin1                         |
| character_set_database   | utf8mb4                        |
| character_set_filesystem | binary                         |
| character_set_results    | latin1                         |
| character_set_server     | utf8mb4                        |
| character_set_system     | utf8                           |
| character_sets_dir       | /usr/share/mysql-8.0/charsets/ |
+--------------------------+--------------------------------+

character_set_connectionlatin1になっていると日本語部分が文字化けしてしまう
= where構文で日本語をフィルタしてもヒットしない

文字コードを日本語と絵文字に対応させる

方法は3つ

① MySQLサービス内で設定
/etc/my.cnfを書き換える
docker-compose.ymlのdbのcommandに、
 mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ciを追記

  • (②のファイルの場所がわかりません。。どこ?)
  • (③を追記してコンテナ再起動してもできなかった。。なぜ?)

以下は①の方法です。
※ MySQLサービスから出ると設定も元に戻ってしまいます

① MySQLサービス内で設定

SET NAMES 'utf8mb4';

Query OK, 0 rows affected (0.00 sec)と出力される
これだけです!

MySQLの文字コード確認

mysql> show variables like 'character%';

+--------------------------+--------------------------------+
| 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-8.0/charsets/ |
+--------------------------+--------------------------------+

文字コードがutf8mb4に変わってます。

  • utf8 文字を1〜3バイトで表現 →日本語対応
  • utf8mb4 文字を1〜4バイトで表現 →日本語と絵文字対応 🐳

utf8とutf8mb4の違い【MySQL】

テーブル内の全データ確認

select * from テーブル名;
mysql> select * from areas;

+----+-----------+----------------------------+----------------------------+
| id | name      | created_at                 | updated_at                 |
+----+-----------+----------------------------+----------------------------+
|  1 | サ     | 2021-02-16 10:28:16.785206 | 2021-02-16 10:28:16.785206 |
|  2 | サン    | 2021-02-16 10:28:16.802190 | 2021-02-16 10:28:16.802190 |
|  3 | サンプ   | 2021-02-16 10:28:16.820425 | 2021-02-16 10:28:16.820425 |
|  4 | サンプル  | 2021-02-16 10:28:16.836546 | 2021-02-16 10:28:16.836546 |
+----+-----------+----------------------------+----------------------------+

🎉 日本語表記になりました!

さいごに

SQL文を使えば、DBから必要なデータだけを取得したり、追加や削除もできます。
Webアプリ開発を進めつつ、DB、SQLの扱いにも慣れていきたいと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?