【初歩から学ぶMySQL】文字コードと照合順序

こんにちは。

面接でSQL経験皆無は採用できないと言われて悔しかったので勉強中のトイチです。

 

インストールした初日は色んな資料を見ながらやっていたので、

勝手にサーバー立ち上がっていたし、勝手にログインできていたのですが、

2日目ともなるとそうもいきません。

1日目には意識しなくてもうまくいっていた挙動が、急にダメになることがあります。

今回の立ち上げに関する失敗は2点でした。

  1. そもそもサーバーが立ち上がってない
  2. コマンドプロンプトが管理者権限でないために、rootにログイン出来ない

普通にMySQLサーバーが立ち上がっている前提で作業始めようとしていました。

そういえばPCの性能が弱いから、スタートアップの負担を減らそうと、

インストール時に自動立ち上げオフったんだった…

 

おかげで勉強になりました。

  1. → Winアイコンの右クリックから"ターミナル(管理者)"を選択。

この一点で解決しちゃいましたね…これだから初学者は…

それはさておき、今日は文字コードと照合順序について勉強しました。

 

使用する文字コードの話

  1. iniファイルにて、文字コードを設定する部分は[mysql] と[mysqld] の2ヶ所がある。
  2. [mysql] はクライアント側に関する文字コードの設定
  3. [mysqld] はサーバー側に関する文字コードの設定

今回は[mysql] の文字コードには{cp932} を、[mysqld] には{utf8mb4} を設定しました。

[mysql]
# クライアントに関する文字コードの設定 : デフォルト cp932 (Win def)
default-character-set=cp932

[mysqld]
# サーバーに関する文字コードの設定 : デフォルト utf8mb4
character-set-server=utf8mb4

 

照合順序の話

文字コードには照合順序が設定されているとのこと。

照合順序とはなんぞや?

 

※照合順序 - 文字列を比較、ソート、検索する際に、どのように順序付けるかを定義する規則のセット

 

とのこと。

異なる言語や文字セットで記述された文字列を正しく比較するための基準のようなものらしい。

データセットに適した照合順序を指定しない場合、文字列の比較や検索に支障が出る場合があるようです。

このあたりは、とりあえず触るわ~レベルの初学者にはあまり関係なさそうなので、エラーが出たら照合順序の可能性もあるかも!ぐらいの認識で行こうと思います。

 

iniファイルにおいて、明示的に(わざわざ、あえて)記入しない限り、デフォルトの照合順序が適応されます。

show collation where charset = 'utf8mb4';

で'utf8mb4' にデフォルト設定されている照合順序が確認できました。

utf8mb4_0900_ai_ci

らしい。

 

create database mytest;

で実際にデータベースを作成し、

SELECT DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = 'mytest';

で適応中の文字コードと、照合順序を確認していきます。

 

ERROR 1007 (HY000): Can't create database 'mytest'; database exists

エラーが出ました。

どうやら同名のdatabase が既に存在するようです。

そういえば前回のインストールからちょっと触った時に作ったような気が。

消しましょう。それがいい。

DROP DATABASE IF EXISTS mytest;

※IF EXISTS は存在しないデータベースを消そうとしたときにエラーを出さないためのおまじないです。

 → Query OK, 0 rows affected (0.03 sec)

   無事消せたみたいです。

 

create再トライ

 → Query OK, 1 row affected (0.01 sec)

よかった、今回は行けました。

 

で、SELECT DEFA... で確認

無事デフォルト通りであることが確認できました。

 

今回はここまで。

ちなみにデフォルトから変更する際は、ini ファイルの

[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_bin

赤文字部分を編集すればOKらしい。

どうにもソートが期待通りじゃない、みたいな場合は変更を視野に入れてみます。