Ground Sunlight

Windowsで作る - PHPプログラミングの開発環境

ユーザ用ツール

サイト用ツール


mariadb:10.4:system-variables

差分

このページの2つのバージョン間の差分を表示します。

この比較画面にリンクする

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
最新のリビジョン 両方とも次のリビジョン
mariadb:10.4:system-variables [2019/10/23 11:14]
tanaka [文字セット関連のシステム変数]
mariadb:10.4:system-variables [2020/11/20 09:53]
y2sunlight
行 1: 行 1:
-> **本編は投稿中です。しばらくお待ち下さい。**+====== MariaDB10.4 システム変数の参照と変更 ====== 
 +phpMyAdmin 4.9.0.1 (MariaDB 10.4.6)
  
----- 
- 
-====== MariaDB10.4 システム変数の参照と変更 ====== 
  --- //[[http://www.y2sunlight.com|y2sunlight]] 2019-10-15//  --- //[[http://www.y2sunlight.com|y2sunlight]] 2019-10-15//
  
行 9: 行 7:
  
 関連記事 関連記事
-  * [[xampp:7.2|XAMPP7.2のインストール]] 
   * [[mariadb:10.4:phpmyadmin|MariaDB10.4 phpMyAdminの使い方]]   * [[mariadb:10.4:phpmyadmin|MariaDB10.4 phpMyAdminの使い方]]
   * [[mariadb:10.4:mysqli|MariaDB10.4 PHPサンプルプログラム]]   * [[mariadb:10.4:mysqli|MariaDB10.4 PHPサンプルプログラム]]
行 15: 行 12:
   * [[mariadb:10.4:server-info|MariaDB10.4 サーバ情報の取得]]   * [[mariadb:10.4:server-info|MariaDB10.4 サーバ情報の取得]]
   * [[mariadb:10.4:transaction|MariaDB10.4 トランザクション]]   * [[mariadb:10.4:transaction|MariaDB10.4 トランザクション]]
 +
 +以下「MySQL」は「MariaDB」に読み替えて下さい。
  
 ---- ----
 +
 +===== 概要 =====
  
 MySQLサーバには多くのシステム変数があります。システム変数にはデフォルト値が存在しますが、サーバ起動時のコマンドラインオプションや、オプションファイル(my.ini)で設定する事ができます。また、多くのシステム変数はSET文で変更する事ができます。 MySQLサーバには多くのシステム変数があります。システム変数にはデフォルト値が存在しますが、サーバ起動時のコマンドラインオプションや、オプションファイル(my.ini)で設定する事ができます。また、多くのシステム変数はSET文で変更する事ができます。
行 22: 行 23:
 MySQL 4.0.3から、MySQLサーバは2種類のシステム変数(グローバル変数とセッション変数)を保持するようになりました。グローバル変数はサーバ起動時に設定される変数で、SET GLOBAL 文によって変更できます。但し、変更するにはSUPER権限が必要になります。一方、セッション変数は各接続に対して保持される変数で、接続時にグローバル変数によって初期化されます。セッション変数の変更はSET SESSION 文によって変更できます。変更に当たっては特別な権限は必要としませんが、変更できるのは自分のセッション変数だけです。 MySQL 4.0.3から、MySQLサーバは2種類のシステム変数(グローバル変数とセッション変数)を保持するようになりました。グローバル変数はサーバ起動時に設定される変数で、SET GLOBAL 文によって変更できます。但し、変更するにはSUPER権限が必要になります。一方、セッション変数は各接続に対して保持される変数で、接続時にグローバル変数によって初期化されます。セッション変数の変更はSET SESSION 文によって変更できます。変更に当たっては特別な権限は必要としませんが、変更できるのは自分のセッション変数だけです。
  
-==== システム変数 version ====+\\ 
 + 
 +===== システム変数 version =====
  
 システム変数versionを参照します。ブラウザからサンプルプログラム(sqlfile.php)を実行します。 システム変数versionを参照します。ブラウザからサンプルプログラム(sqlfile.php)を実行します。
行 35: 行 38:
 </file> </file>
  
-実行結果+=== 実行結果 ===
  
 [{{:mariadb:10.4:sqlfile02.png?nolink|}}] [{{:mariadb:10.4:sqlfile02.png?nolink|}}]
行 53: 行 56:
  
 最初の構文(SHOW VARIABLES)はMySQL独自のもので、次の構文は(select @@)は他のデータベースとの互換性を保持する為にサポートされています。 最初の構文(SHOW VARIABLES)はMySQL独自のもので、次の構文は(select @@)は他のデータベースとの互換性を保持する為にサポートされています。
-==== システム変数 storage_engine ==== 
  
-システム変数storage_engineを変更してみます。ブラウザからサンプルプログラム(sqlfile.php)を実行します。+\\ 
 + 
 +===== システム変数 storage_engine ===== 
 + 
 +インストールしたMySQLに搭載されているデータベースエンジンを確認してみます。ブラウザからサンプルプログラム(sqlfile.php)を実行します。 
 + 
 +<code> 
 +http://localhost/mysql/sqlfile.php?f=svinfo1.sql 
 +</code> 
 + 
 +<file sql svinfo1.sql> 
 +SHOW ENGINES; 
 +</file> 
 + 
 +=== 実行結果 === 
 + 
 +[{{:mariadb:10.4:sqlfile05.png?nolink|}}] 
 + 
 +実行結果から分かるようにInnoDBがデフォルトエンジンとして使用されています。 
 + 
 +次に、システム変数storage_engineを変更してみます。ブラウザからサンプルプログラム(sqlfile.php)を実行します。
  
 <code> <code>
行 62: 行 84:
  
 <file sql syaval2.sql> <file sql syaval2.sql>
-SET storage_engine=MyISAM;+SET storage_engine=Aria;
 SHOW SESSION VARIABLES LIKE 'storage_engine'; SHOW SESSION VARIABLES LIKE 'storage_engine';
 SHOW GLOBAL VARIABLES LIKE 'storage_engine'; SHOW GLOBAL VARIABLES LIKE 'storage_engine';
行 68: 行 90:
 </file> </file>
  
-ここでは、データベースエンジンをデフォルトのInnoDBからAriaに変更します。AriaはMyISAMの耐障害性やキャッシュ機構などを改善した、モダンなデータベースエンジンで、もともとの名前は**Maria**だった。+ここでは、データベースエンジンをデフォルトのInnoDBからAriaに変更します。AriaはMyISAMの耐障害性やキャッシュ機構などを改善した、モダンなデータベースエンジンで、もともとの名前は**Maria**でし
  
- +=== 実行結果 ===
-実行結果+
  
 [{{:mariadb:10.4:sqlfile03.png?nolink|}}] [{{:mariadb:10.4:sqlfile03.png?nolink|}}]
行 77: 行 98:
 システム変数storage_engineはCREATE TABLEで使用されるデフォルトのテーブルタイプです。 システム変数storage_engineはCREATE TABLEで使用されるデフォルトのテーブルタイプです。
  
-この例では、セッション変数storage_engineをSET文でMyISAMに変更しています。実行結果を見ても分かるようにセッション変数の変更はグローバル変数には影響しません。SETまたはSHOW文で SESSION/GLOBALを省略するとSESSIONとして扱われます。SHOWでlike節を省略すると全ての変数を表示します。+この例では、セッション変数storage_engineをSET文でAriaに変更しています。実行結果を見ても分かるようにセッション変数の変更はグローバル変数には影響しません。SETまたはSHOW文で SESSION/GLOBALを省略するとSESSIONとして扱われます。SHOWでlike節を省略すると全ての変数を表示します。
  
-==== 文字セット関連のシステム変数 ====+\\ 
 + 
 +===== 文字セット関連のシステム変数 =====
  
 文字セット関連のシステム変数を取得してみます。ブラウザからサンプルプログラム(sqlfile.php)を実行します。 文字セット関連のシステム変数を取得してみます。ブラウザからサンプルプログラム(sqlfile.php)を実行します。
行 86: 行 109:
 http://localhost/mysql/sqlfile.php?f=syaval3.sql http://localhost/mysql/sqlfile.php?f=syaval3.sql
 </code> </code>
- 
  
 <file sql syaval3.sql> <file sql syaval3.sql>
-SHOW GLOBAL VARIABLES LIKE 'character\_set\_%'; +SHOW GLOBAL VARIABLES LIKE 'character_set_%'; 
-SHOW SESSION VARIABLES LIKE 'character\_set\_%';+SHOW SESSION VARIABLES LIKE 'character_set_%';
 </file> </file>
  
-実行結果+=== 実行結果 ===
  
 [{{:mariadb:10.4:sqlfile04.png?nolink|}}] [{{:mariadb:10.4:sqlfile04.png?nolink|}}]
  
-MySQL 4.1ではサーバーとクライアントがそれぞれの別の文字セットで動作します。従って、現状の文字セット環境を把握しておく事が重要です。+MySQLではサーバーとクライアントがそれぞれの別の文字セットで動作します。従って、現状の文字セット環境を把握しておく事が重要です。
  
-筆者の実験では、character_set_system以外グローバル変数はサーバ起動時のオプション(default-character-set)設定されました。セッション変数の方は、character_set_databaseはデフォルトデータベース(test)の文字セットになり、character_set_serverはグローバル変数同じにりました。また、クライアントとの接続に関係す3つのセッション変数(character_set_client, character_set_results, character_set_connection)はlatin1になっています。これは、クライアントライブラリにり設定されたものと思われます。latin1はASCIIコード西ヨーロッパ諸国のアルファベットや記号を追加た8ビット系のコードです。このまの状態では漢字の使用ができません。要注意です。+本例では上記実行結果ようなりました。暗黙の文字セットとなるcharacter_set_serverがlatin1になっています。これをutf8に変更するには、my.iniを以下の変更します。
  
-以下に、それぞれのシステム変数について簡単に説明します。詳細は、以下のURLを参照して下さい。+{{fa>file-o}} ''{XAMPP Install Folder}/mysql/bin/my.ini'' 
 +<code int my.ini> 
 +[mysqld] 
 +character_set_server=utf8 
 +</code>
  
-  * [[http://dev.mysql.com/doc/mysql/en/server-system-variables.html]] +また、上記実行結果では、クライアントとの接続に関係する3つのセッション変数(character_set_client, character_set_results, character_set_connection)はlatin1になっています。latin1はASCIIコードに西ヨーロッパ諸国のアルファベットや記号を追加した8ビット系のコードです。このままの状態では漢字の使用ができません。 
-  [[http://dev.mysql.com/doc/mysql/en/charset-defaults.html]]+ 
 +漢字を使用するためには、上で説明したようにmy.iniを編集するか、セッションの初めに ''set names'' を実行します。 
 + 
 +=== クライアント文字セットをUTF8に設定する === 
 + 
 +<code> 
 +set names utf8; 
 +</code> 
 + 
 +本サンプルプログラムでは、sオプションを使用することでデータベースセッションの初めに ''set names'' を実行できます。 
 + 
 +<code> 
 +http://localhost/mysql/sqlfile.php?f=syaval3.sql&s=1 
 +</code> 
 + 
 +[{{:mariadb:10.4:sqlfile04a.png?nolink|}}] 
 + 
 +<nowiki>set names</nowiki> の実行は上例でもわかるように character_set_client、character_set_connection、character_set_results を設定します。
  
 | character_set_client | クライアントの使用する文字セットです。サーバへのSQL文はこの文字セットで送信します。 | | character_set_client | クライアントの使用する文字セットです。サーバへのSQL文はこの文字セットで送信します。 |
行 110: 行 153:
 | character_set_database | デフォルトデータベースの文字セットです。USE文などでデフォルトデータベースを変更するとこの変数の値も変わります。データベースの文字セットについては以下を参照して下さい。 | | character_set_database | デフォルトデータベースの文字セットです。USE文などでデフォルトデータベースを変更するとこの変数の値も変わります。データベースの文字セットについては以下を参照して下さい。 |
 | character_set_results | サーバからクライアントに返される検索結果などに使用される文字セットです。 | | character_set_results | サーバからクライアントに返される検索結果などに使用される文字セットです。 |
-| character_set_server | サーバの文字セットです。上のcharacter_set_databaseで説明したように、この文字セットは、データベース作成時の暗黙の文字セットとして使用されます。この変数はサーバ起動時のオプションとして初期設定できます。本編では、サーバオプションファイル(my.ini)の[mysqld]セクションで、 \\ default-character-set=utf8 \\ として設定しています。 |+| character_set_server | サーバの文字セットです。この文字セットは、データベース作成時の暗黙の文字セットとして使用されます。この変数は上で説明したように、サーバ起動時(my.ini)のオプションとして初期設定できます。 |
 | character_set_system | システムの使用する文字セットで常にutf8が使用されています。 | | character_set_system | システムの使用する文字セットで常にutf8が使用されています。 |
  
-データベースの文字セット 
  
-データベースの文字セットはデータベースの作成時に決まります。この場合暗黙の文字セットはサーバの文字セット(character_set_server)です。これを変更するにはCREATE DATABASE文で明示的に指定します:+=== データベースの文字セット === 
 + 
 +データベースの文字セットはデータベースの作成時に決まります。この場合暗黙の文字セットはサーバの文字セット(character_set_server)です。これを変更するにはCREATE DATABASE文で明示的に指定します:
  
 <code sql> <code sql>
-CREATE DATABASE test_sjis DEFAULT CHARACTER SET sjis;+CREATE DATABASE test_utf8 DEFAULT CHARACTER SET utf8;
 </code> </code>
  
行 124: 行 168:
  
 <code sql> <code sql>
-CREATE TABLE syain_sjis ( ・・・ ) DEFAULT CHARACTER SET sjis+CREATE TABLE syain_utf8 ( ・・・ ) DEFAULT CHARACTER SET utf8
-CREATE TABLE syain_sjis (+CREATE TABLE syain_utf8 (
   ・・・   ・・・
-  syain_name varchar(50) CHARACTER SET sjis ,+  syain_name varchar(50) CHARACTER SET utf8 ,
   ・・・   ・・・
 ); );
 </code> </code>
  
-文字セットはサーバ、データベース、テーブル、カラムと順に引き継がれます。明示的指定しない場合は、1つ前のレベルの文字セットが使用されます。+文字セットはサーバ、データベース、テーブル、カラムと順に引き継がれます。明示的指定しない場合は、1つ前のレベルの文字セットが使用されます。
  
 +\\
  
mariadb/10.4/system-variables.txt · 最終更新: 2020/11/20 09:58 by y2sunlight