Closed12

MySQL勉強

bayamasabayamasa
  • 文字セット
    記号とエンコーディングのセット
  • 照合順序
    文字セット内の文字を比較するためのルールを集めたもの
bayamasabayamasa

文字セット

4 文字のアルファベットがあるとします: A, B, a, b。
各文字に数字を付けます: A = 0, B = 1, a = 2, b = 3。
文字 A は記号、数字 0 は A 用の encoding で、4 文字すべてとそのエンコーディングの組合せは文字セットです。

つまり各文字に対して数字を割りふったペアの組み合わせのすべてのことを文字セットと呼ぶ

bayamasabayamasa

照合順序 
mysql内部で文字列を比較 & 並び替えするときのルール
以下のルールで決定する
文字セット_言語名_照合接尾辞
この中でも接尾辞(suffix)がもっとも重要で大文字小文字を区別するかどうかなどが記載される

サフィックス ルール 英名称
_ci 大文字小文字を区別しない Case Insensitive
_cs 大文字小文字を区別する Case sensitive
_bin バイナリ比較 binary
bayamasabayamasa

文字セットの設定はMySQLのクライアントプログラムにも影響を与える。つまりサーバーサイド側でも同じ値を設定する必要がある

bayamasabayamasa

utf8mb4とutf8の違い
mysqlにおけるutf-8は1~3byteまでの数値を扱います
しかしこの場合サロゲートペアやemojiなどの文字を保存できない。

そのため、utf8 multi byte four (多分この省略だと思っている)を扱う

bayamasabayamasa

charset collateはスキーマ, テーブル, カラムに設定できる
優先はカラム > テーブル > スキーマであり特に何も記載していない場合もこの順序で確定する

基本的にテーブルに書いておけば大丈夫そう。
もしcharsetのdefaultのcollateであっても明記したほうがよい。
version upなどで変更の可能性があるので

bayamasabayamasa

imageも削除
docker-compose down --rmi all
キャッシュを使う
docker-compose up --no-cache

このスクラップは2022/07/04にクローズされました