🙆♀️
【MySQL】構築するときの注意点
MySQLのバージョン
[vagrant@localhost ~]$ mysqld -V
mysqld Ver 5.7.40 for Linux on x86_64 (MySQL Community Server (GPL))
[vagrant@localhost ~]$ mysql -V
mysql Ver 14.14 Distrib 5.7.40, for Linux (x86_64) using EditLine wrapper
設定ファイルが色々あるけど、どういうこと?
- my.iniはwindows用、my.cnfはwindows以外のOS用の設定ファイル
- windowsでもmy.cnfを使用するが、これはmy.iniがどこにあるかを書くだけ
文字コードを統一する必要がある
文字コードを確認
mysql> SHOW VARIABLES like 'char%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
character-set-server
をutf8
に設定
[mysqld]
character-set-server=utf8
文字コードを確認
mysql> SHOW VARIABLES like 'char%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
設定完了かと思い、データベースを選択
use <データベース名>;
character_set_database
がlatin1
に戻る
mysql> SHOW VARIABLES like 'char%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
CHARACTER SET
で指定する必要がある
データベース作成時
CREATE DATABASE <データベース名> CHARACTER SET utf8 COLLATE utf8_general_ci;
後で変更する場合
# character_set_databaseの修正
ALTER DATABASE <データベース名> CHARACTER SET utf8 COLLATE utf8_general_ci;
# 既存テーブルの文字コード変換
ALTER TABLE <テーブル名> CONVERT TO character SET utf8 COLLATE utf8_unicode_ci;
# 既存カラムの文字コード変換
ALTER TABLE <テーブル名> CHANGE <カラム名> <カラム名> VARCHAR(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci;
補足
- MySQLのバージョン5.7と8では設定が色々違う
- latin1のDB(テーブル)には日本語が入らない
- DBの文字集合を変えた場合、クライアントからの接続時にもそれに合わせる
-
SET character_set_database=utf8;
は接続中のセッションだけ変更するコマンド
(再起動すると元に戻るし、再起動は必要なく設定反映される) -
character_set_database
とは
デフォルトデータベースで使用される文字セット
デフォルトのデータベースが変更されるたびに、サーバーはこの変数を設定します
デフォルトデータベースが存在しない場合、変数は character_set_server と同じ値になります
※デフォルトデータベースとは、USEで選択されているデータベースを指す -
character_set_server
とは
サーバーのデフォルト文字セット
Discussion