character_set_databaseとcharacter_set_serverの違い【MySQL】

違い

character_set_databasecharacter_set_serverの違いは

  • character_set_database
    →データベースを選択した際に使われる文字コード
  • character_set_server
    →MySQLのデフォルトの文字コード

という違いらしい。

 

例えば、最初にMySQLにログインします。

この時点ではcharacter_set_serverの文字コードが使われます。

 

次に

use データベースA

という風に実行してデータベースAを選択すると、character_set_databaseで指定された文字コードにセットされます。

このとき、character_set_databaseが設定されていない場合はcharacter_set_serverの文字コードが使われます。

同じにしておいた方が良い

基本的にcharacter_set_databasecharacter_set_serverは同じ文字コードを指定しておいた方が良いっぽいです。

デフォルトではどちらもlatin1という文字コードが設定されていますが、どう考えても時代に即していないので、どちらも

  • uf8
  • utf8mb4

のどちらかに統一しておいた方が良いと思います。(MySQLのuf8は4バイトのUnicode文字に対応していないらしいので、utf8mb4のほうがベターだと思います)

2つ存在する理由

正直、「なんで2つ必要なんだ?character_set_serverだけでよくね?」って気がするんだけど、なんでなんだろう。

同じMySQL内で

  • データベースAはUTF-8にしたい
  • データベースBはlatin1にしたい

みたいなときにcharacter_set_databaseを使って動的に文字コードを変更する・・・みたいなときに使うんだろうか。

よくわからんね・・。

SQL
スポンサーリンク
この記事を書いた人
penpen

1991生まれ。WEBエンジニア。

技術スタック:TypeScript/Next.js/Express/Docker/AWS

フォローする
フォローする

コメント

タイトルとURLをコピーしました