ラベル MySQL の投稿を表示しています。 すべての投稿を表示
ラベル MySQL の投稿を表示しています。 すべての投稿を表示

MySQL:一般クエリーログ

公開:2026.06.07(日) 15:51

MySQL:一般クエリーログ

デバッグする際、MySQLのクエリーログを有効にしておくと便利

MySQLにrootでログインし "SET GLOBAL general_log = 'ON';" を実行する。 無効にする場合は 'OFF' を設定する。

ログは /var/lib/mysql/pphost.log

https://dev.mysql.com/doc/refman/8.0/ja/query-log.html


PHP:プロになるためのPHPプログラミング入門 サンプル環境構築 4

公開:2026.05.17(日) 04:51

プロになるためのPHPプログラミング入門 サンプル環境構築

以下書籍に付属するサンプルの実行環境を構築する。
プロになるためのPHPプログラミング入門」(ISBN 978-4-7741-4972-1)

環境は以下記事のものを使用
PHP:プロになるためのPHPプログラミング入門 サンプル環境構築

サーバのバージョン: 8.0.46 - MySQL Community Server - GPL

A.3 MySQLの設定 / A.3.1 データベースと接続ユーザーの作成 (P.320)

1. MySQLコンテナへの接続
MySQLコンテナに接続する。

実行結果:
xxxxxxxx@yyyy:~/docker/php$ docker ps
CONTAINER ID   IMAGE                   COMMAND                  CREATED      STATUS      PORTS                                                    NAMES
3d8258bc2177   php:8.3-apache          "docker-php-entrypoi…"   7 days ago   Up 5 days   0.0.0.0:8080->80/tcp, [::]:8080->80/tcp                  php-php-1
d094e1650051   mysql:8.0               "docker-entrypoint.s…"   7 days ago   Up 5 days   0.0.0.0:3306->3306/tcp, [::]:3306->3306/tcp, 33060/tcp   php-db-1
b60aebf325a6   phpmyadmin/phpmyadmin   "/docker-entrypoint.…"   7 days ago   Up 5 days   0.0.0.0:8081->80/tcp, [::]:8081->80/tcp                  php-phpmyadmin-1
xxxxxxxx@yyyy:~/docker/php$ docker exec -it d094e1650051 /bin/bash
bash-5.1#

2. MySQLログイン
MySQLにrootユーザで接続する。
mysql -u root -p

実行結果:
bash-5.1# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 382
Server version: 8.0.46 MySQL Community Server - GPL

Copyright (c) 2000, 2026, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

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

mysql>

3. ppdbデータベースの作成
以下コマンドを実行
create database ppdb CHARACTER set utf8mb4;
実行結果:
mysql> create database ppdb CHARACTER set utf8mb4;
Query OK, 1 row affected (0.03 sec)

4. 管理者ユーザの追加
以下コマンドを実行 → エラー発生
grant all on ppdb.* to 'ppadmin'@'localhost' identified by 'パスワード';
実行結果:
mysql> grant all on ppdb.* to 'ppadmin'@'localhost' identified by 'xxxx';
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'identified by 'xxxx'' at line 1
原因:MySQL 8.0以降では、GRANT コマンドと同時に IDENTIFIED BY を使ってユーザーの作成やパスワードの変更を行うことができなくなった。

対応:
4-1. ユーザーを先に作成する
まず、CREATE USER コマンドでユーザーとパスワードを設定する。
CREATE USER 'ppadmin'@'localhost' IDENTIFIED BY 'パスワード';
実行結果:
mysql> CREATE USER 'ppadmin'@'localhost' IDENTIFIED BY 'xxxx';
Query OK, 0 rows affected (0.02 sec)

4-2. 権限を付与する
次に、GRANT コマンドで権限を設定する。
GRANT ALL PRIVILEGES ON ppdb.* TO 'ppadmin'@'localhost';
実行結果:
mysql> CREATE USER 'ppadmin'@'localhost' IDENTIFIED BY 'xxxx';
Query OK, 0 rows affected (0.02 sec)

4-3. 設定を反映する
念のため、変更を確実に反映させるために以下のコマンドを実行しておく。
FLUSH PRIVILEGES;
実行結果:
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)

5. 一般ユーザの追加
一般ユーザーもユーザ作成と権限付与を分けて実行する。
CREATE USER 'ppguest'@'localhost' identified by 'パスワード';
実行結果:
mysql> CREATE USER 'ppguest'@'localhost' identified by 'xxxx';
Query OK, 0 rows affected (0.01 sec)

GRANT SELECT ON ppdb.* to 'ppguest'@'localhost';
実行結果:
mysql> GRANT SELECT ON ppdb.* to 'ppguest'@'localhost';
Query OK, 0 rows affected, 1 warning (0.00 sec)

FLUSH PRIVILEGES;
実行結果:
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)

続く・・


WSL #35:Docker上にMySQL環境を作る


環境

■ WSLバージョン:
WSL バージョン: 2.3.24.0
カーネル バージョン: 5.15.153.1-2
WSLg バージョン: 1.0.65
MSRDC バージョン: 1.2.5620
Direct3D バージョン: 1.611.1-81528511
DXCore バージョン: 10.0.26100.1-240331-1435.ge-release
Windows バージョン: 10.0.22631.4317

■ Ubuntuバージョン:
Distributor ID: Ubuntu
Description: Ubuntu 24.04.1 LTS
Release: 24.04
Codename: noble

■ Dockerバージョン:
Version: 27.3.1

はじめに

過去記事「Docker:MySQLを動かす」で Windows+Docker Desktop上にMySQL環境を作成した。
この記事を参考にWSL Ubuntu上のDocker EngineにMySQL環境を作成する。

WSL+Ubuntu+Docker上にMySQL環境を作る

■ カスタムネットワーク作成
他コンテナと通信したいので、先にカスタムネットワークを "docker_nw" の名前で作成する。
docker network create --driver bridge docker_nw

⇒ 過去記事「WSL #37:Dockerカスタムネットワークを作成する」参照

■ 永続化用フォルダ作成
データファイルを置くためのフォルダをUnbuntu上に作成する。
      mkdir -p ~/docker/mysql
    

■ コンテナ起動
以下パラメータでコンテナを起動する。
-d バックグラウンドで起動
--name コンテナ名は "mysqldb" とした
-p ポートは3306をマッピング
-e MYSQL_ROOT_PASSWORDにrootパスワード("pswd")を設定
-v データフォルダをコンテナに接続
--networkカスタムネットワーク "docker_nw" を使用
      sudo docker run -d --name mysqldb -p 3306:3306 \
      -e MYSQL_ROOT_PASSWORD=pswd \
      -v ~/docker/mysql:/var/lib/mysql \
      --network docker_nw \
      mysql        
    


WSL, WSL2, Windows Subsystem for Linux, Docker, Container, MySQL

phpMyAdmin:インポートでエラー


phpMyAdminでインポートしようとするもエラー

別環境のphpMyAdminでエクスポートしたSQLファイルを新環境でインポートしようとしたらエラーとなった。
アップロードしようとしたファイルが大きすぎるようです。この制限に関する対策についてはドキュメントをご覧ください。
ドキュメントを見たが英語なので探せなかった。

SQLファイルのサイズは17MB。
おそらくPHPのアップロードサイズ制限に引っかかってるんだろう。

対応

php.iniの "upload_max_filesize"、"post_max_size" の値を変更する。
現在の値はそれぞれ "2M"、"8M" だったので "20M" へ変更し Apacheを再起動。
phpMyAdminのインポート画面を開くと、アップロードファイル最大サイズが"20MiB" と表示されるようになりインポートできた。


PHP, MySQL, phpMyAdmin

Docker:PHP環境を作る 3

前回作成したPHPのDocker環境から別コンテナのMySQLへアクセスできるようにする



環境

Windows 10 21H2 (19044.1348)
Docker Desktop
データベースは Docker上のMySQLを使用
MySQLコンテナの作成手順は以下記事を参照
Docker:MySQLを動かす

手順

1. MySQLコンテナにmysqliをインストール
PHPコンテナに接続しmysqliをインストールし再起動する
docker exec -it php bash
docker-php-ext-install mysqli
exit
docker restart php
    

PHP.iniのextension=mysqliを有効化する必要は無い?


Docker, PHP, MySQL

Docker:MySQLを動かす

Dockerで共通で使えるようなMySQLを動かしてみる


環境

Windows 10 21H2 (19044.1348)
Docker Desktop

ネットワーク作成

MySQLコンテナと別のコンテナを通信させる際、Dockerネットワークを作らないとうまくいかなかったので作成。
今回は "docker_nw" という名前のbridgeネットワークを作成する。
docker network create --driver bridge docker_nw

ホスト側準備

MySQLのデータファイルを格納するフォルダをホスト側に作成。
今回は "D:\userdata\mysql" フォルダを作成した。

MySQLコンテナ実行

1. Dockerイメージダウンロード
docker pull mysql

2. Dockerコンテナ実行
docker run -d --name mysqldb -p 3306:3306 -e MYSQL_ROOT_PASSWORD=pswd -v d:\userdata\mysql:/var/lib/mysql --network docker_nw mysql
パラメータ:
-d … バックグラウンドで実行 --name … コンテナに "mysqldb" の名前を付ける
-p … Dockerのポート3306(MySQLポート)をホストの3306ポートにマッピングしホストからでもアクセス可能とする
-e … 環境変数設定
MYSQL_ROOT_PASSWORD … rootスーパーユーザーアカウントのパスワード。今回は "pswd" とした。
-v … MySQLデータフォルダ(/var/lib/mysql)をローカルのD:\userdata\mysql へマッピング
--network … 作成したDockerネットワーク(docker_nw)を指定


Docker, MySQL

MySQL:コマンドメモ

MySQLコマンドのメモ


1. MySQLコマンドラインツールの起動
mysql -u ユーザー名 -h ホスト名 -pパスワード データベース名
※ "-h ホスト名" は省略可
※ "パスワード" は省略可

2. MySQLコマンド一覧
help;

my.ini


照合順序

照合順序 = 値を並び替えする時のルール
_ci … 大文字と小文字を区別しない
_cs … 大文字と小文字を区別する
_bin … バイナリ比較を行う

データベースの作成

CREATE DATABASE [IF NOT EXISTS] db_name
[create_specification] ...

create_specification:
  [DEFAULT] CHARACTER SET [=] charaset_name
| [DEFAULT] COLLATE [=] collation_name

データベースの選択

使用するデータベースを選択する
USE db_name

ユーザーの作成

CREATE USER 'username'@'host_name' IDENTIFIED WITH auth_plugin BY 'auth_string
auth_plugin には 認証プラグインを指定 (例:mysql_native_password)
認証プラグインを指定しない場合は "... IDENTIFIED BY 'auth_string'" ...

権限

権限のレベル
・グローバルレベル(G)
・データベースレベル(D)
・テーブルレベル(T)
・カラムレベル(C)
・ルーチンレベル(R)
・プロキシユーザー権限(P)

権限の付与
GRANT priv_type[, priv_type] ON priv_level TO user
例) "GRANT ALL ON db_name.* TO user"

Mroonga:DATE列にNULLが登録できない

MroongaのDATE列項目にNULLを登録しようとするが"1970-01-01"になってしまう。


環境

Windows Server 2016 バージョン 1607 (14393.4283)
MariaDB 10.5.8 with Mroonga 11.01 winx64

原因

以下に書いてあった。
https://mroonga.org/ja/docs/reference/limitations.html

5.6.3. カラムの値に関する制限事項
ストレージモードにおいて、カラムの値には制限があります。

MroongaストレージエンジンはNULL値を自動的に補正します。

例えば、 DATE 型や DATETIME 型に指定されたNULL値はMroongaストレージエンジンが日や月の値として0を1へと自動的に補正します。

つまり、0月は1月へ、0日は1日として扱います。

そして、NULL値はUNIX時間の0秒 (1970-01-01)として扱います。

このような自動変換は DATE 型や DATETIME 型に限定されません。

NULL値はカラムのデフォルト値へと変換されます。多くの場合、文字列型であれば空文字列へ、数値型であれば0へと変換されます。

MariaDB #12:時刻が9時間ずれている

OracleからCSV経由でインポートした時刻が9時間ずれていた



環境

Windows Server 2016 1607 14393.1593
MariaDB 10.5 x64

現象

OracleのデータをCSV出力し、MariaDBのLOAD DATAコマンドでロードしたところ
TIMESTAMP型の日時がすべて+9時間されていることに気付いた。
テスト環境ではそんな事なかったんだけど。

原因

system_time_stampとtime_stampを確認してみると・・・
MariaDB [XXX]> select @@system_time_zone; select @@time_zone;
+--------------------+
| @@system_time_zone |
+--------------------+
| Asia/Tokyo         |
+--------------------+
1 row in set (0.000 sec)

+-------------+
| @@time_zone |
+-------------+
| +00:00      |
+-------------+
1 row in set (0.000 sec)
すると、time_zoneが "+00:00" となっていた。
これが原因と思われる。

対応

exitでMySQLコマンドを終了し、もう一度 mysql -u root -p でログインしてみたところ、
time_zone は "SYSTEM" となった。
よく原因わからないが、これでインポートしても日付がずれなくなった。


MariaDB, MySQL

MariaDB #11:日時から日付のみ取得するには?

日時が入ったTIMESTAMP型の値から日付のみ抽出したい



環境

MariaDB 10.5 x64

方法

"CAST(列名 AS DATE)" を使えば良い。

例えば日時列F1が 2021.03.31 以前のレコードを取得する場合:
SELECT * FROM TESTTABLE
WHERE CAST(F1 AS DATE) <= '2021/03/31'


MariaDB, MySQL

MariaDB #10:データファイルを別ドライブへ変更

データファイルを別ドライブに移動するには?



概要

MariaDBを普通にインストールすると C:\Program Files\MariaDB 10.5\data フォルダにデータが格納される。
しかしデータファイルは今後肥大化する訳なので、できれば別ドライブに移動させておきたい。

環境

Windows Server 2016 1607 14393.1593
MariaDB 10.5 x64

手順

C:\Program Files\MariaDB 10.5\data\my.ini ファイルを編集
datadir= の設定があるので、ここに新しいデータパスを指定すれば良い。
例:
[mysqld]
datadir=d:/db
MariaDBのサービスを停止し、C:\Program Files\MariaDB 10.5\data フォルダの中身(my.iniを除くすべて)をINIで指定したフォルダへ移動

そしてMariaDBのサービスを起動・・・
しかし起動しない。

イベントビューアーを確認すると "mysqld.exe: File 'D:\db\aria_log_control" not found (Errorcode: 13 "Permission denied")"
権限が無いっぽいので、移動先のフォルダ(D:\db)を右クリック - プロパティ - [セキュリティ] で "NETWORK SERVICE" を追加し 古コントロール以外の権限を付与した。

これでサービス起動できた。


MariaDB, MySQL

MariaDB #9:CSVファイルインポートでワーニング

LOAD DATAコマンドでCSVファイルのインポートを行ったがワーニングが発生した

※ 前回記事:


現象

LOAD DATAコマンドでCSVファイルをインポートしたがワーニング(警告)が発生した。
MariaDB [xxx]> LOAD DATA LOCAL INFILE "xxx.csv"
    -> INTO TABLE xxx
    -> FIELDS TERMINATED BY ','
    -> OPTIONALLY ENCLOSED BY '"'
    -> LINES TERMINATED BY '\r\n';
Query OK, 5853 rows affected, 33751 warnings (1.757 sec)
Records: 5853  Deleted: 0  Skipped: 0  Warnings: 33751
CSVのレコード数は5853で、とりあえずは全レコードインポート出来ている模様。
でもWarningsが33751って。
しかもワーニングが何なのかよくわからない・・・

確認方法

ワーニングは "SHOW WARNINGS" というコマンドで内容を確認できる。
表示例:
ariaDB [xxx]> show warnings
    -> ;
+---------+------+--------------------------------------------------------------------------------------------+
| Level   | Code | Message                                                                                    |
+---------+------+--------------------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect integer value: '' for column `xxx`.`xxx`.`AAA` at row 1    |
| Warning | 1366 | Incorrect integer value: '' for column `xxx`.`xxx`.`BBB` at row 1     |
| Warning | 1366 | Incorrect integer value: '' for column `xxx`.`xxx`.`CCC` at row 1 |
| Warning | 1265 | Data truncated for column 'DDD' at row 1    

対処方法

今回のワーニングは CSVの "" が問題なようである。
とりあえず "" を NULL へ文字列置換することで警告は無くなった。

MariaDB #8:CSVファイルのインポート

MariaDBでCSVファイルをテーブルにインポートするには?

※ 前回記事:#7:スクリプトファイルの実行


方法

"LOAD DATA" コマンドを使う。
書式:
LOAD DATA INFILE "CSVファイル名"
INTO TABLE テーブル名
FIELDS TERMINATED BY '列区切文字'
OPTIONALLY ENCLOSED BY 'フィールド引用符文字'
LINES TERMINATED BY '行区切り文字'
;

一般的と思われるCSV(Windows)では 列区切りが ","、フィールド引用符が "、行区切りがCRLFと思うので、
LOAD DATA LOCAL INFILE "TEST.csv"
INTO TABLE TEST
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\r\n';
といった感じ。

MariaDB #7:スクリプトファイルの実行

MariaDBでスクリプトファイルを読み込み実行するには?

※ 前回記事:#6:データベース権限


方法

"source"コマンドを使えば良い。
例) source d:\setup\script.txt


MariaDB, MySQL

MariaDB #6:データベース権限

データベースとユーザーを作成したのでユーザーでログインしテーブルを作成したいが…

※ 前回記事:#5:ユーザー作成

権限

"benkyo"データベースを作成し(#2:データベース作成)、"testuser"ユーザーも作成した(#5:ユーザー作成)。
が、権限が無いためtestuserからbenkyoデータベースへアクセスできない。

testuserでログインし "SHOW DATABASES" コマンドを実行しても benkyo データベースは表示されない。
C:\Windows\system32>mysql -u testuser -p
Enter password: ********
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 23
Server version: 10.5.9-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 |
| test               |
+--------------------+
2 rows in set (0.000 sec)
ということでtestuserにbenkyoデータベースの全権限を与えることにする。
コマンドプロンプトからrootユーザーでログインし、以下コマンドを実行する。
"GRANT ALL ON benkyo.* TO testuser@'localhost';" 実行結果:
MariaDB [(none)]> GRANT ALL ON benkyo.* TO testuser@'localhost';
Query OK, 0 rows affected (0.740 sec)
これで権限が付与された筈なので testuserでログインし SHOW DATABASES を実行してみる。
C:\Windows\system32>mysql -u testuser -p
Enter password: ********
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 30
Server version: 10.5.9-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           |
+--------------------+
| benkyo             |
| information_schema |
| test               |
+--------------------+
3 rows in set (0.000 sec)
benkyoが表示された。
"use benkyo" で benkyoデータベースに切り替えテーブルを作成してみる。
MariaDB [(none)]> use benkyo
Database changed
MariaDB [benkyo]> create table testtable (id int, name varchar(10));
Query OK, 0 rows affected (1.210 sec)
作成できた。
SHOW TABLESで確認してみる。
MariaDB [benkyo]> show tables;
+------------------+
| Tables_in_benkyo |
+------------------+
| testtable        |
+------------------+
1 row in set (0.001 sec)
問題なし。


MariaDB, MySQL

Link:MySQLの使い方



MySQLの使い方

既読日 No 記事日付 内容
テーブルの作成
2021.12.01 ユーザーの作成
- ユーザーを作成する(CREATE USER文)
- ユーザーの一覧や設定された権限などユーザーに関する情報を取得する
- 認証プラグインを指定してユーザーを作成する
- 新しいパスワードを設定する(SET PASSWORD 文、ALTER USER文)
- パスワードの有効期限に関する設定
- ユーザー名を変更する(RENAME USER文)
- ユーザーを削除する(DROP USER文)
- ユーザーのロックと解除
- ユーザーに設定できる権限の種類と一覧
- ユーザーに権限を設定する(GRANT文)
- ユーザーから権限を削除する(REVOKE文)
2021.12.01 データベースの作成 - データベースを作成する(CREATE DATABASE文)
- データベースの一覧とデータベースに関する情報を取得する
- 使用するデータベースを選択する(USE文)
- データベースを削除する(DROP DATABASE文)
- データベース属性(文字セットと照合順序)を変更する(ALTER DATABASE文)
2021.12.01 MySQLのデータ型
- 整数型(TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT)
- 浮動小数点数型(FLOAT, DOUBLE)
- 固定小数点数型(DECIMAL, NUMERIC)
- BIT型
- 日付型と時刻型(DATE, TIME, DATETIME, TIMESTAMP, YEAR)
- CHAR型とVARCHAR型
- BINARY型とVARBINARY型
- BLOB型とTEXT型
- ENUM型
- SET型
2021.12.01 MySQLの基本構文
- 文字列や数値の値の入力方法
- 識別子と予約語
- 文字セットと照合順序
- 算術演算子の使い方
- 比較演算子の使い方
- 論理演算子の使い方
- ビット演算子の使い方
- 演算子の優先順位
2021.12.01 設定ファイル(my.ini)の記述
- 設定ファイル(my.ini)の作成と配置
- my.iniファイルの記述方法
- 文字コードに関する設定を記述する
- 照合順序に関する設定を記述する
- デフォルトストレージエンジンに関する設定を記述する
- ユーザー認証に使用する認証プラグインに関する設定を記述する
2021.12.01 MySQLコマンドラインツールの利用 - コマンドラインツールにPATHを設定する
- MySQLコマンドラインツールの起動とMySQLへの接続
- MySQLに接続するユーザー名とパスワードの指定
- MySQLコマンドの一覧とコマンドの実行
- MySQLコマンドラインツールからSQL文を実行する
2021.12.01 2021.06.30 MySQLインストール
- MySQL Community Serverのダウンロード
- MySQL Community Serverのインストール
- MySQLをWindowsサービスに登録する
- MySQLをコマンドラインから起動する
- MySQLのドキュメントを参照する

※ 次回記事:PEAR入門

学習リンク, MySQL

MariaDB #5:ユーザー作成

MariaDBにユーザーを作成してみる

※ 前回記事:


環境

Windows Server 2016 Standard Evaluation 1607 (14393.2248)
MariaDB 10.5

コマンド

ユーザーを作成するには "CREATE USER ユーザー名;" コマンドを使う。
普通はパスワードも同時に指定すると思うので、その際は "IDENTIFIED BY 'パスワード" で指定する。

■ ユーザー名
ユーザー名は "ユーザー名@ホスト名" の組み合わせで指定する。
ユーザ名・ホスト名に"@"などの文字が含まれなければ引用符で囲む必要は無いが、
含む場合は、逆引用符(`)、シングルクォーテーション(')、ダブルクォーテーション(") の何れかで囲む。
また、ユーザー名とホスト名は別々に囲むこと。

■ ホスト名
ホスト名はIPアドレスや"localhost"、ワイルドカード"_"、"%"が指定できる。
"_"は任意の1文字、"%"は任意の長さの文字列と一致する。
ホスト名を省略した場合はすべてのホストから接続可となる。( = "'ユーザー名'@'%'"と同じ意味)

作成してみる

実際にユーザーを作成してみる。

1. MariaDB Client起動
Windowsスタートメニュー - "MariaDB 10.5 (x64)"
- "MySQL Client (MariaDB 10.5 (x64))" を起動
MariaDBセットアップ時に入力したパスワードでログインする。

2. ユーザー作成
ユーザー名:testuser
パスワード:testpass
ホスト名:192.168.2.1 と 192.168.2.2(localhost)
※ 192.168.2.1はWEBサーバーで後で使う予定
以下のコマンドを張り付け実行する。
CREATE USER 'testuser'@'192.168.2.1'
IDENTIFIED BY 'testpass';
CREATE USER 'testuser'@'localhost'
IDENTIFIED BY 'testpass';
実行結果は以下の通り
MariaDB [(none)]> CREATE USER 'testuser'@'192.168.2.1'
    -> IDENTIFIED BY 'testuser';
Query OK, 0 rows affected (0.029 sec)

MariaDB [(none)]> CREATE USER 'testuser'@'192.168.2.2'
    -> IDENTIFIED BY 'testuser';
Query OK, 0 rows affected (0.027 sec)

3. 動作確認
Windowsスタートメニュー - "MariaDB 10.5 (x64)"
- "Command Prompt (MariaDB 10.5 (x64))" を起動

以下のコマンドで作成したユーザーで接続してみる。
mysql -u testuser -p MariaDBセットアップ時に入力したパスワードでログインする。
C:\Windows\system32>mysql -u testuser -p
Enter password: ********
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 19
Server version: 10.5.9-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)]>
ログインできた。


MariaDB, MySQL

MariaDB #4:照合順序

MariaDBでデータベースを作成する際に照合順序という用語が出てくる。 照合順序とは?

※ 前回記事:#3:文字セット


照合順序とは

簡単に言えば、ソートや結合する際のルールをどうするか?ということらしい。
ルールとは、"大文字・小文字を区別するか?" や "半角・全角を区別するか?" など

照合順序の一覧

照合順序の一覧は "SHOW COLLATION;" で確認できるが、
照合順序は文字セット単位に存在し結構な数があるので、文字セットで絞り込んだ方が良い。
例えば utf8mb4 の文字セットを使う場合は "SHOW COLLATION WHERE CHARSET='utf8mb4';" とすれば良い。
MariaDB [(none)]> SHOW COLLATION WHERE CHARSET='utf8mb4';
+------------------------------+---------+------+---------+----------+---------+
| Collation                    | Charset | Id   | Default | Compiled | Sortlen |
+------------------------------+---------+------+---------+----------+---------+
| utf8mb4_general_ci           | utf8mb4 |   45 | Yes     | Yes      |       1 |
| utf8mb4_bin                  | utf8mb4 |   46 |         | Yes      |       1 |
| utf8mb4_unicode_ci           | utf8mb4 |  224 |         | Yes      |       8 |
| utf8mb4_icelandic_ci         | utf8mb4 |  225 |         | Yes      |       8 |
| utf8mb4_latvian_ci           | utf8mb4 |  226 |         | Yes      |       8 |
| utf8mb4_romanian_ci          | utf8mb4 |  227 |         | Yes      |       8 |
| utf8mb4_slovenian_ci         | utf8mb4 |  228 |         | Yes      |       8 |
| utf8mb4_polish_ci            | utf8mb4 |  229 |         | Yes      |       8 |
| utf8mb4_estonian_ci          | utf8mb4 |  230 |         | Yes      |       8 |
| utf8mb4_spanish_ci           | utf8mb4 |  231 |         | Yes      |       8 |
| utf8mb4_swedish_ci           | utf8mb4 |  232 |         | Yes      |       8 |
| utf8mb4_turkish_ci           | utf8mb4 |  233 |         | Yes      |       8 |
| utf8mb4_czech_ci             | utf8mb4 |  234 |         | Yes      |       8 |
| utf8mb4_danish_ci            | utf8mb4 |  235 |         | Yes      |       8 |
| utf8mb4_lithuanian_ci        | utf8mb4 |  236 |         | Yes      |       8 |
| utf8mb4_slovak_ci            | utf8mb4 |  237 |         | Yes      |       8 |
| utf8mb4_spanish2_ci          | utf8mb4 |  238 |         | Yes      |       8 |
| utf8mb4_roman_ci             | utf8mb4 |  239 |         | Yes      |       8 |
| utf8mb4_persian_ci           | utf8mb4 |  240 |         | Yes      |       8 |
| utf8mb4_esperanto_ci         | utf8mb4 |  241 |         | Yes      |       8 |
| utf8mb4_hungarian_ci         | utf8mb4 |  242 |         | Yes      |       8 |
| utf8mb4_sinhala_ci           | utf8mb4 |  243 |         | Yes      |       8 |
| utf8mb4_german2_ci           | utf8mb4 |  244 |         | Yes      |       8 |
| utf8mb4_croatian_mysql561_ci | utf8mb4 |  245 |         | Yes      |       8 |
| utf8mb4_unicode_520_ci       | utf8mb4 |  246 |         | Yes      |       8 |
| utf8mb4_vietnamese_ci        | utf8mb4 |  247 |         | Yes      |       8 |
| utf8mb4_croatian_ci          | utf8mb4 |  608 |         | Yes      |       8 |
| utf8mb4_myanmar_ci           | utf8mb4 |  609 |         | Yes      |       8 |
| utf8mb4_thai_520_w2          | utf8mb4 |  610 |         | Yes      |       4 |
| utf8mb4_general_nopad_ci     | utf8mb4 | 1069 |         | Yes      |       1 |
| utf8mb4_nopad_bin            | utf8mb4 | 1070 |         | Yes      |       1 |
| utf8mb4_unicode_nopad_ci     | utf8mb4 | 1248 |         | Yes      |       8 |
| utf8mb4_unicode_520_nopad_ci | utf8mb4 | 1270 |         | Yes      |       8 |
+------------------------------+---------+------+---------+----------+---------+
33 rows in set (0.001 sec)
照合順序は、文字セット名に続き"言語名"が入るが、日本語の照合順序は存在しないので、
"general"、"bin"、"unicode" のいづれかを使うことになる。
・utf8mb4_general_ci
・utf8mb4_bin
・utf8mb4_unicode_ci
・utf8mb4_unicode_520_ci
・utf8mb4_general_nopad_ci
・utf8mb4_nopad_bin
・utf8mb4_unicode_nopad_ci
・utf8mb4_unicode_520_nopad_ci

"bin" - 英字大小文字を区別したい場合は "bin" を選択する。
bin(バイナリ比較)は英字以外のすべての文字においても厳密に区別する。
あいまい検索を行いたい、といった特別な理由が無ければ、これで良いのでは?と思う。

"general" と "unicode" - 日本語の濁音・半濁音を区別する場合は"general"を使う。
また、ひらがなカタカナ、数字と丸数字 といった文字も "unicode" では同一とみなされる。
日本語あいまい検索を行う以外は "general" で良いと思う。

"ci" - 大小文字を区別しない
"bin"以外にはすべて "ci" が付いているので大小文字は区別しない.
大小文字を区別する場合は "cs" が付く。

"520" - 詳細不明
520とはUnicode照合アルゴリズム(Unicode collation algorithm = UCA)のバージョンを意味するようだ。
"520"では絵文字を区別するが、"520"を付けない場合は区別しない、と思われる。

"nopad" - 詳細不明
末尾スペースを区別するか?を表すようだ。
MariaDB(MySQL)では、末尾スペースは区別しないのが既定らしい。
なのでそれらも区別したい場合は "nopad" を使う。
※ OracleではVARCHAR2の列だと末尾スペースは区別しなかったような??
CHAR列だと区別するので、まぁそれに近い考えなのかな?


MariaDB, MySQL

MariaDB #3:文字セット

MariaDBで使用可能な文字セットについて

※ 前回記事:#2:データベース作成


使用可能な文字セット

MariaDBで使用可能な文字セットは以下コマンドで確認できる。
"SHOW CHARACTER SET;"
MariaDB [(none)]> SHOW CHARACTER SET;
+----------+-----------------------------+---------------------+--------+
| Charset  | Description                 | Default collation   | Maxlen |
+----------+-----------------------------+---------------------+--------+
| big5     | Big5 Traditional Chinese    | big5_chinese_ci     |      2 |
| dec8     | DEC West European           | dec8_swedish_ci     |      1 |
| cp850    | DOS West European           | cp850_general_ci    |      1 |
| hp8      | HP West European            | hp8_english_ci      |      1 |
| koi8r    | KOI8-R Relcom Russian       | koi8r_general_ci    |      1 |
| latin1   | cp1252 West European        | latin1_swedish_ci   |      1 |
| latin2   | ISO 8859-2 Central European | latin2_general_ci   |      1 |
| swe7     | 7bit Swedish                | swe7_swedish_ci     |      1 |
| ascii    | US ASCII                    | ascii_general_ci    |      1 |
| ujis     | EUC-JP Japanese             | ujis_japanese_ci    |      3 |
| sjis     | Shift-JIS Japanese          | sjis_japanese_ci    |      2 |
| hebrew   | ISO 8859-8 Hebrew           | hebrew_general_ci   |      1 |
| tis620   | TIS620 Thai                 | tis620_thai_ci      |      1 |
| euckr    | EUC-KR Korean               | euckr_korean_ci     |      2 |
| koi8u    | KOI8-U Ukrainian            | koi8u_general_ci    |      1 |
| gb2312   | GB2312 Simplified Chinese   | gb2312_chinese_ci   |      2 |
| greek    | ISO 8859-7 Greek            | greek_general_ci    |      1 |
| cp1250   | Windows Central European    | cp1250_general_ci   |      1 |
| gbk      | GBK Simplified Chinese      | gbk_chinese_ci      |      2 |
| latin5   | ISO 8859-9 Turkish          | latin5_turkish_ci   |      1 |
| armscii8 | ARMSCII-8 Armenian          | armscii8_general_ci |      1 |
| utf8     | UTF-8 Unicode               | utf8_general_ci     |      3 |
| ucs2     | UCS-2 Unicode               | ucs2_general_ci     |      2 |
| cp866    | DOS Russian                 | cp866_general_ci    |      1 |
| keybcs2  | DOS Kamenicky Czech-Slovak  | keybcs2_general_ci  |      1 |
| macce    | Mac Central European        | macce_general_ci    |      1 |
| macroman | Mac West European           | macroman_general_ci |      1 |
| cp852    | DOS Central European        | cp852_general_ci    |      1 |
| latin7   | ISO 8859-13 Baltic          | latin7_general_ci   |      1 |
| utf8mb4  | UTF-8 Unicode               | utf8mb4_general_ci  |      4 |
| cp1251   | Windows Cyrillic            | cp1251_general_ci   |      1 |
| utf16    | UTF-16 Unicode              | utf16_general_ci    |      4 |
| utf16le  | UTF-16LE Unicode            | utf16le_general_ci  |      4 |
| cp1256   | Windows Arabic              | cp1256_general_ci   |      1 |
| cp1257   | Windows Baltic              | cp1257_general_ci   |      1 |
| utf32    | UTF-32 Unicode              | utf32_general_ci    |      4 |
| binary   | Binary pseudo charset       | binary              |      1 |
| geostd8  | GEOSTD8 Georgian            | geostd8_general_ci  |      1 |
| cp932    | SJIS for Windows Japanese   | cp932_japanese_ci   |      2 |
| eucjpms  | UJIS for Windows Japanese   | eucjpms_japanese_ci |      3 |
+----------+-----------------------------+---------------------+--------+
40 rows in set (0.000 sec)
文字セットはUnicodeを使った方が良いだろう。
とすると utf16 か utf8 ということになるが、
UTF8を使う場合に選択できる文字セットは "utf8" と "utf8mb4" の2種類存在する。
"utf8"では4バイト文字が扱えないらしいので "utf8mb4" を選んだほうが良い。

現在設定されている文字セット

以下コマンドで確認できる。
"SHOW VARIABLES LIKE 'char%";
MariaDB [(none)]> SHOW VARIABLES LIKE 'char%';
+--------------------------+-----------------------------------------------+
| Variable_name            | Value                                         |
+--------------------------+-----------------------------------------------+
| character_set_client     | cp932                                         |
| character_set_connection | cp932                                         |
| character_set_database   | latin1                                        |
| character_set_filesystem | binary                                        |
| character_set_results    | cp932                                         |
| character_set_server     | latin1                                        |
| character_set_system     | utf8                                          |
| character_sets_dir       | C:\Program Files\MariaDB 10.5\share\charsets\ |
+--------------------------+-----------------------------------------------+
8 rows in set (0.001 sec)


MariaDB, MySQL

MariaDB #2:データベース作成

MariaDBにデータベースを作成してみる

※ 前回記事:#1:インストール


環境

Windows Server 2016 Standard Evaluation 1607 (14393.2248)
MariaDB 10.5

コマンド

データベースを作成するには "CREATE DATABASE データベース名;" コマンドを使う。

作成する際 "文字セット(CJARACTER SET)" と "照合順序(COLLATE)" を指定することができるので、
余計なトラブルを避けるためにもこれらのパラメータは指定した方が良いだろう。
この場合のコマンドは以下のようになる。
CREATE DATABASE データベース名
CHARACTER SET = '文字セット'
COLLATE = '照合順序'; 
コマンドは大小文字どちらでも良いと思うが、MariaDBのヘルプではコマンドは大文字で、
データベース名といったパラメータは小文字で統一しているようだ。

データベースの一覧は "SHOW DATABASES;" コマンドで確認する。

文字セットと照合順序

以下を参照:
#3:文字セット
#4:照合順序

作成してみる

実際にデータベースを作成してみる。

1. MariaDB Client起動
Windowsスタートメニュー - "MariaDB 10.5 (x64)"
- "MySQL Client (MariaDB 10.5 (x64))" を起動
MariaDBセットアップ時に入力したパスワードでログインする。

2. データベース作成
データベース名:bekyo
文字セット:utf8mb4
照合順序:utf8mb4_bin

以下のコマンドを張り付け実行する。
CREATE DATABASE benkyo
CHARACTER SET = 'utf8mb4'
COLLATE = 'utf8mb4_bin';
作成できたか SHOW DATABASES で確認する。
実行結果は以下の通り。
MariaDB [(none)]> CREATE DATABASE benkyo
    -> CHARACTER SET = 'utf8mb4'
    -> COLLATE = 'utf8mb4_bin';
Query OK, 1 row affected (0.002 sec)

MariaDB [(none)]> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| benkyo             |
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
5 rows in set (0.001 sec)


MariaDB, MySQL

その他の記事