20210914のMySQLに関する記事は2件です。

docker + mysql 日本語対応する

はじめに dockerのコンテナの中でmysqlを使用してテーブル表示させたら、日本語で登録しているところが????になっていました。 日本語でちゃんと表示できるように設定します。 解決策 ローカルのアプリのsrc/db/にmy.cnfというファイルを作成して下記の記述をします。 コンテナの中のmysqlの設定ファイルの内容をこのファイルに書いてそれをコンテナのファイルにコピーします。 src/db/my.cnf [mysqld] pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock datadir = /var/lib/mysql secure-file-priv= NULL character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci default-authentication-plugin = mysql_native_password [mysql] default-character-set = utf8mb4 [mysqld] character-set-server=utf8mb4 [client] default-character-set = utf8mb4 docker-compose.ymlのvolumes:に下記を追加します。 docker-compose.yml #~省略~ - ./src/db/my.cnf:/etc/mysql/my.cnf #~省略~ あとはコンテナを立て直してデータベースを見ると日本語で表記されていました。 うまくいかなかったこと この解決策をいろいろ調べていたらdocker-compose.ymlのcommand: に下記の記述を追加すればいいという回答がたくさん出てきました。 docker-compose.yml #~省略~ command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci しかし、うまくいきませんでした。 もし上記のcommandが実行されていた場合にmysqlの設定に記述されるものが先ほど紹介したmy.cnfの中身です。 コマンドで設定するやり方を諦めて、自分で作ってコンテナにコピーといった感じでしょうか。 最後に 日本語表示はうまくいったのですが、コンソールから日本語を入力してもenterを押すと消えてしまいます。 次はそれを解決しなければ。。。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

MySQL で実行したときだけ式の解釈が変わる SQL 文

MySQL のコメントの仕様は標準 SQL と異なっている.これを利用すると,MySQL で実行したときだけ解釈が変わるようなクエリーを書ける. 標準 SQL と MySQL のコメント 標準 SQL においてコメントは -- で始まり行末で終わる.Oracle Database,Microsoft の SQL のサーバー,PostgreSQL および SQLite ではこの形式でコメントを書ける. select * -- This is a comment from t where t.col1 = 1 --and t.col2 = 2 -- Commented out MySQL にはコメントのスタイルがいくつかあるが,-- で始める場合はその直後にスペースが必要となる1.コメントアウトするのが若干面倒になりそうだが,この規則は自動生成のクエリーがおかしくなることを防いでいる. 公式ドキュメンテーションいわく, UPDATE account SET credit=credit-payment というクエリーで payment に -1 などの負数を当てはめると UPDATE account SET credit=credit--1 となる.そうはならんやろここで --1 をコメントとみなすと意図通りの操作にならない.先述の規則によりこれは防がれ,--1 も式の一部として解釈される. そんな C のマクロに括弧をつけ忘れたような置換をする人にお金を管理させるのは心配である. 式の解釈を変える 先述のコメントの規則により,MySQL と他の RDBMS とで式の解釈が異なるようなクエリーを書ける:2 select case 1 --1 when 1 then 'This is not MySQL' when 2 then 'This is MySQL' end as message 標準 SQL では --1 がコメントとみなされ,when 1 then の直後の値が case 式 の結果となる.MySQL では --1 が式の一部とみなされ,1 --1 は 1 - (-1) すなわち 2 に等しい.したがって when 2 then の直後の値が case 式 の結果となる. MySQL では C 言語スタイルのコメント(/* Block comment */)を使えるので,次の方法もある. select case 1 when 1 --0 /* then 'MySQL considered harmful' -- */ then 'I love MySQL' end as message 標準 SQL では -- から行末までが無視される.これに対して MySQL では /* から */ までの範囲が無視される. -- の直後は改行でもいいが,その改行自体でコメントが終わるのであまり実用上の意味はない. ↩ ただし標準 SQL と Oracle Database では select 文の from 句を省略できない.from dual と書き足せば Oracle でも動く. ↩
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む