0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

MySQL の charset について

Posted at

よく忘れるので。

これはmysqlクライアント(WEBサーバー側)の話です。
mysqlサーバー(DBサーバー側)の話ではないです。

単語について

ステートメント:クエリ(DML)やDDLなどの総称

クライアントのcharset、サーバーのcharset

  • クライアント:ステートメント送信、DBサーバーに到達したステートメントの解釈、DBサーバーが返す結果
  • サーバー:データベースやテーブルを作成する際のデフォルト値。webサーバーからDMLを発行する際には関係なく、DDLを発行する際に考慮するもの。

例えば2台のwebサーバーの文字コードが違う場合、クライアントはそれぞれのサーバーに合わせてwebサーバー単位(もしくはセッション単位)で設定する。

一方データベースやテーブルのデフォルト値であるサーバーは、どのwebサーバーからでも同じ値が指定されておくべきもの。

ステートメントでの設定確認

show variables like "chara%";

注:
この確認方法は、そのクライアント(もしくはセッション)における設定値の確認。
クライアントAからと、クライアントBからでは、それぞれの設定に従った結果が返る。

クライアント

  • character_set_client
    クライアントがステートメントを送信する際の文字セット。

  • character_set_connection
    サーバーが、クライアントから送信されたステートメントをこの文字セットに変換する。

  • character_set_results
    サーバーが、クライアントにクエリー結果を返信するときに使用する文字セット。
    これには、カラム値などの結果データと、カラム名やエラーメッセージなどの結果メタデータが含まれます。

サーバー

  • character_set_database
    デフォルトデータベースで使用される文字セット。デフォルトデータベースが存在しない場合、変数は character_set_server と同じ値になります。

  • character_set_server
    データベース作成時にデフォルトで使用される文字コード。

設定ファイル my.conf

linuxではmy.conf。windowsではmy.ini

ファイルの場所の確認方法

 mysql --help | grep my.cnf

設定方法

[mysql]

# character_set_client
# character_set_connection
# character_set_results
default-character-set=utf-8

# character_set_database
# character_set_server
character-set-server=utf-8

クエリによる動的な指定方法

クエリで指定することで、セッション単位で指定ができる。

参照

SET NAMES utf8
  • character_set_client
  • character_set_connection
  • character_set_results
SET CHARACTER SET utf8
  • character_set_client
  • character_set_results
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?