設定
- ONLY_FULL_GROUP_BY: バグの元となる曖昧なSQLを抑制
サーバの状態を出力
show processlist;
いろいろ
- データベース一覧を出力:
show databases;
- 変数を出力:
show variables;
- 絞る時はlikeを使用する。例:
show variables like %char%;
- 絞る時はlikeを使用する。例:
- テーブル一覧を出力:
show tables;
- テーブル定義を出力:
show create table テーブル名;
最後のセミコロンの代わりに \G
で終わることで、縦長に表示します。
TIMESTAMPとDATETIMEの違い
- TIMESTAMP = Unix Time
- DATETIME = 独自
DATETIMEは'0000-00-00’を許容するなど怪しいが、2038年以降のことを考えると、通常はDATETIMEの方がいいかも。
区切りはハイフンとアンダースコアどちらでも構わない
MySQL :: MySQL 5.6 リファレンスマニュアル :: 4.2.8 プログラム変数の設定へのオプションの使用より、
お好みで、変数名内の下線をダッシュとして指定できます。
変数設定
- 表示用SQL:
show variables like '変数名'
変数 | 設定内容 |
---|---|
character_set_client | クライアントから到達するステートメントの文字コード |
character_set_connection | サーバが処理するための文字コード(らしい) |
character_set_database | データベースの文字コード |
character_set_filesystem | ファイルシステムの文字コード(要するにファイル名ですね) |
character_set_results | 結果をクライアントに返すための文字コード |
character_set_server | サーバのデフォルト文字コード |
max_connections | 最大接続数 |
innodb_lock_wait_timeout | 行ロックが解除されるまでトランザクションが待機する時間の長さ(秒) |
結局UTF-8を使うにはどうすればいいのか?
パラメータが多すぎて分かりません。 ネットで検索しても微妙に書いてあることが違うので。
ただ、ヒントとなる設定は以下の公式サイトのFAQにあります。
確認手順として、以下の文が書かれています。
SHOW VARIABLES LIKE 'char%';
あと、最後に以下の記述例があります。 big5になっていますが、これをutf8にしても問題なさそうです。
[mysqld]
character-set-server=big5
[client]
default-character-set=big5
あと、collation-server = utf8_general_ci
あたりもあると良さそうです。
ソースは、MariaDB 5.5のDockerのサンプルにあったからです。
最近はutf8よりは、utf8mb4の方が良さそうです。
参考: MySQLの文字コード事情
Collation
個人的にはutf8_binまたはutf8mb4_binがいいと思います。
理由は「大文字小文字を区別しない」のが必要な場合は少なく、むしろバグの元になるからです。
公式サイト
- MySQL 5.1 リファレンスマニュアル(PDF)
- MySQL :: MySQL 5.6 リファレンスマニュアル
- MySQL :: MySQL 5.6 リファレンスマニュアル :: 5.1.4 サーバーシステム変数
- MySQL :: MySQL 5.6 リファレンスマニュアル :: 13.7.5.40 SHOW VARIABLES 構文
外部サイト
- MySQLで大文字・小文字を区別する方法
- 【MySQL】照合順序とは? - Qiita
- MySQLのCollationを理解するためにまとめてみた。 - 6VOX
- MySQLで桁が足りない分を0で埋める - Qiita
- MySQLのトランザクション制御がキモい話 - なからなLife
- 稼働中のMySQLを無停止でレプリケーション環境を構築する - Qiita