このページの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 システム変数の参照と変更 ====== | ||
--- // | --- // | ||
行 9: | 行 7: | ||
関連記事 | 関連記事 | ||
- | * [[xampp: | ||
* [[mariadb: | * [[mariadb: | ||
* [[mariadb: | * [[mariadb: | ||
行 15: | 行 12: | ||
* [[mariadb: | * [[mariadb: | ||
* [[mariadb: | * [[mariadb: | ||
+ | |||
+ | 以下「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: | ||
</ | </ | ||
- | 実行結果 | + | === 実行結果 |
[{{: | [{{: | ||
行 53: | 行 56: | ||
最初の構文(SHOW VARIABLES)はMySQL独自のもので、次の構文は(select @@)は他のデータベースとの互換性を保持する為にサポートされています。 | 最初の構文(SHOW VARIABLES)はMySQL独自のもので、次の構文は(select @@)は他のデータベースとの互換性を保持する為にサポートされています。 | ||
- | ==== システム変数 storage_engine ==== | ||
- | システム変数storage_engineを変更してみます。ブラウザからサンプルプログラム(sqlfile.php)を実行します。 | + | \\ |
+ | |||
+ | ===== システム変数 storage_engine ===== | ||
+ | |||
+ | インストールしたMySQLに搭載されているデータベースエンジンを確認してみます。ブラウザからサンプルプログラム(sqlfile.php)を実行します。 | ||
+ | |||
+ | < | ||
+ | http:// | ||
+ | </ | ||
+ | |||
+ | <file sql svinfo1.sql> | ||
+ | SHOW ENGINES; | ||
+ | </ | ||
+ | |||
+ | === 実行結果 === | ||
+ | |||
+ | [{{: | ||
+ | |||
+ | 実行結果から分かるようにInnoDBがデフォルトエンジンとして使用されています。 | ||
+ | |||
+ | 次に、システム変数storage_engineを変更してみます。ブラウザからサンプルプログラム(sqlfile.php)を実行します。 | ||
< | < | ||
行 62: | 行 84: | ||
<file sql syaval2.sql> | <file sql syaval2.sql> | ||
- | SET storage_engine=MyISAM; | + | SET storage_engine=Aria; |
SHOW SESSION VARIABLES LIKE ' | SHOW SESSION VARIABLES LIKE ' | ||
SHOW GLOBAL VARIABLES LIKE ' | SHOW GLOBAL VARIABLES LIKE ' | ||
行 68: | 行 90: | ||
</ | </ | ||
- | ここでは、データベースエンジンをデフォルトのInnoDBからAriaに変更します。AriaはMyISAMの耐障害性やキャッシュ機構などを改善した、モダンなデータベースエンジンで、もともとの名前は**Maria**だった。 | + | ここでは、データベースエンジンをデフォルトのInnoDBからAriaに変更します。AriaはMyISAMの耐障害性やキャッシュ機構などを改善した、モダンなデータベースエンジンで、もともとの名前は**Maria**でした!。 |
- | + | === 実行結果 | |
- | 実行結果 | + | |
[{{: | [{{: | ||
行 77: | 行 98: | ||
システム変数storage_engineはCREATE TABLEで使用されるデフォルトのテーブルタイプです。 | システム変数storage_engineはCREATE TABLEで使用されるデフォルトのテーブルタイプです。 | ||
- | この例では、セッション変数storage_engineをSET文でMyISAMに変更しています。実行結果を見ても分かるようにセッション変数の変更はグローバル変数には影響しません。SETまたはSHOW文で SESSION/ | + | この例では、セッション変数storage_engineをSET文でAriaに変更しています。実行結果を見ても分かるようにセッション変数の変更はグローバル変数には影響しません。SETまたはSHOW文で SESSION/ |
- | ==== 文字セット関連のシステム変数 ==== | + | \\ |
+ | |||
+ | ===== 文字セット関連のシステム変数 | ||
文字セット関連のシステム変数を取得してみます。ブラウザからサンプルプログラム(sqlfile.php)を実行します。 | 文字セット関連のシステム変数を取得してみます。ブラウザからサンプルプログラム(sqlfile.php)を実行します。 | ||
行 86: | 行 109: | ||
http:// | http:// | ||
</ | </ | ||
- | |||
<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_%'; |
</ | </ | ||
- | 実行結果 | + | === 実行結果 |
[{{: | [{{: | ||
- | MySQL 4.1ではサーバーとクライアントがそれぞれの別の文字セットで動作します。従って、現状の文字セット環境を把握しておく事が重要です。 | + | MySQLではサーバーとクライアントがそれぞれの別の文字セットで動作します。従って、現状の文字セット環境を把握しておく事が重要です。 |
- | 筆者の実験では、character_set_system以外のグローバル変数はサーバ起動時のオプション(default-character-set)に設定されました。セッション変数の方は、character_set_databaseはデフォルトデータベース(test)の文字セットになり、character_set_serverはグローバル変数と同じになりました。また、クライアントとの接続に関係する3つのセッション変数(character_set_client, | + | 本例では上記実行結果のようになりました。暗黙の文字セットとなるcharacter_set_serverがlatin1になっています。これをutf8に変更するには、my.iniを以下のように変更します。 |
- | 以下に、それぞれのシステム変数について簡単に説明します。詳細は、以下のURLを参照して下さい。 | + | {{fa> |
+ | <code int my.ini> | ||
+ | [mysqld] | ||
+ | character_set_server=utf8 | ||
+ | </ | ||
- | * [[http://dev.mysql.com/ | + | また、上記実行結果では、クライアントとの接続に関係する3つのセッション変数(character_set_client, |
- | | + | |
+ | 漢字を使用するためには、上で説明したようにmy.iniを編集するか、セッションの初めに '' | ||
+ | |||
+ | === クライアント文字セットをUTF8に設定する === | ||
+ | |||
+ | < | ||
+ | set names utf8; | ||
+ | </ | ||
+ | |||
+ | 本サンプルプログラムでは、sオプションを使用することでデータベースセッションの初めに '' | ||
+ | |||
+ | < | ||
+ | http://localhost/mysql/sqlfile.php? | ||
+ | </ | ||
+ | |||
+ | [{{:mariadb:10.4: | ||
+ | |||
+ | < | ||
| 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 | + | CREATE DATABASE |
</ | </ | ||
行 124: | 行 168: | ||
<code sql> | <code sql> | ||
- | CREATE TABLE syain_sjis | + | CREATE TABLE syain_utf8 |
- | CREATE TABLE syain_sjis | + | CREATE TABLE syain_utf8 |
| | ||
- | syain_name varchar(50) CHARACTER SET sjis , | + | syain_name varchar(50) CHARACTER SET utf8 , |
| | ||
); | ); | ||
</ | </ | ||
- | 文字セットはサーバ、データベース、テーブル、カラムと順に引き継がれます。明示的の指定しない場合は、1つ前のレベルの文字セットが使用されます。 | + | 文字セットはサーバ、データベース、テーブル、カラムと順に引き継がれます。明示的に指定しない場合は、1つ前のレベルの文字セットが使用されます。 |
+ | \\ | ||