はじめに
前提:以下の記事どおりに環境構築したWebアプリの、DBの確認方法を記しておきます
「とりあえず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
格納データを確認するコマンド
select
や where
等の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_connection
がlatin1
になっていると日本語部分が文字化けしてしまう
= 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バイトで表現 →日本語と絵文字対応 🐳
テーブル内の全データ確認
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の扱いにも慣れていきたいと思います。