MySQL – テーブルへのカラムの追加

最後に追加

先頭に追加

指定したカラムの後に挿入

 

複数のカラムを追加

 

なお、複数カラムを特定のカラムの後に挿入する場合、ADD (...) afterではエラーになるため、以下のようなクエリーにする。

MySQL – 文字コード・照合順序

データベース

確認

データベースの文字コード設定と照合順序設定の確認方法。いずれも対象のデータベースをUSEで使っている状態で実行。

文字コード

SHOW VARIABLES LIKE 'char%';

照合順序

SHOW VARIABLES lIKE 'col%';

変数で一度に確認

SELECT @@character_set_database, @@collation_database;

変更

ALTER DATABASE test CHARACTER SET 文字コード COLLATE 照合順序;

テーブル

確認

SELECT TABLE_NAME, TABLE_COLLATION FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='テーブル名';

変更

ALTER TABLE test_table
CONVERT TO CHARACTER SET 文字コード
COLLATE 照合順序;

 

MySQL – 文字コードを変更したのにエラー

概要

MySQLで日本語入力対策でロケールや文字コードを設定変更しても、なお日本語入力でエラーが出ることがある。

これは、設定変更前にデータベースやテーブルを作成し、後から設定を変更してもcharacter_set_databaselatin1のような状態で残ってしまうため。

また、他の環境で作成したデータベースをCSVで取り込もうとしたとき、文字コードを合わせたのにcollation(照合順序)が違うと怒られてインポートできないという場合がある。

ここでは、既作成のデータベースやテーブルの文字コード、照合順序を変更する手順をまとめる。

現象

文字コードを変更したのに入力できない

ロケールも変更して

MySQLの文字コードも変更して

再起動もしたのに、日本語が入力できてもデータベースに登録できない。

確認

character_set

MySQLの文字コードを確認するのにUSEでデータベースを指定する前に確認したが、データベース指定後に確認した結果が以下。

既作成のデータベースでは、作成時の文字コード設定が残っている。

データベースの文字コード

既作成データベースの文字コード確認。文字コードがlatin1になっている。

テーブルの文字コード

既作成テーブルの文字コード確認。こちらも文字コードがlatin1になっている。

対応

データベースを作りなおす

文字コードがlatin1でまだデータ未入力の段階で発覚したようなときは、一旦dropでデータベースを消して新たに作りなおせば、全体の文字コードに従ったデータベース、テーブルが作成される。

設定を変更する

既にデータが入力されているときに設定を変更したいときは、データベース、テーブルの別に文字コードを変更する。

データベースの文字コードセットを変更する。

テーブルの文字コードセットを変更する。

これでやっと日本語の入力のエラーがなくなった。

 

MySQL – 日本語入力ができない

概要

LinuxのMySQLクライアントからMySQLに対して日本語を入力したとき、以下のような状況となった。

  • 変換中は表示されるが、確定のためEnterを押すと消えてしまう
  • 下記のようにデータベースに登録できない

これを解決するため、OSのロケール設定とMySQLの文字コード設定を変更する。

OSのロケール設定

localeコマンドで現在のロケール設定を確認。デフォルトでCロケールが設定されている。

/etc/profileに以下の2行を追加して再読み込みor再起動。=の前後には空白を入れないこと

設定変更後。

MySQLの文字コード設定

確認方法と指定方法

初期状態のMySQLの文字コードは以下のような状況。

my.cnfmysqlセクションとmysqldセクションにそれぞれ以下を追加。my.cnfの場所は以下のような方法で特定。

  • mysql --help | grep my.cnf
  • find / -name my.sql

この結果文字コード設定は以下のようになり、日本語の入力が可能になった。

コンソールの文字コード

なおこのとき、Windowsホスト上のVagrantをコマンドプロンプトで操作していた。コンソールの文字コードは932(shift_jis)だったが、入力時に文字化けはしなかった。

それでも入力できない

なお、この設定変更をしても、変更前に作成したデータベースに対して入力できない場合がある。

そのようなときは、以下の2つのいずれかの方法をとる。

  • 新たな設定の下で、データベースから作りなおす
  • データベースとテーブルの設定を個別に変更する

Linux – shスクリプト

基本形

例として、ファイル名をscript_testとして以下の内容で作成。

1行目は実行するスクリプトの指定(shebang, sha-bang, hashbang, pound-bang)。

ただしこのままでは実行権限がないので、chmodで実行権限をセットする。

実行する場合、パスを通して入ればファイル名のみで実行できるが、パスを通していなければ絶対パス/相対パスでファイル名を指定する。

引数

スクリプト実行時の引数は、変数'1''2'に格納される。参照する場合は$1${1}など。

実行例

条件分岐

以下は条件分岐の例で、ifcaseのそれぞれで引数に応じた処理を行わせている。

実行例

 

MySQL – 起動しない

概要

稼働していたMySQLに突然ログインできなくなり、MySQLサーバーも起動できない状態となった。

これに関しては様々な対応策がネット上にあり、症状によって効くものと効かないものがあるようだ。

今回は、単にMySQLを消してインストールし直したところ元に戻った。

環境

仮想環境:Vagrant + VirtualBox

OS:bento/freebsd-11.2

MySQL:5.7をpkgでインストール

症状

VagrantのFreeBSD仮想環境にMySQLをインストールして動作していたのに、翌日ログインしようとしたらエラーになった。

導入時にも遭遇した現象で、MySQLサーバーが起動していない。

サーバーを起動しようとするとPIDファイルの更新ができないというエラーで起動できない。これはネット上でも頻出の現象だ。

対応~解決せず

pidファイルが消える

sudo touch.pidファイルをつくってみたが、MySQLサーバーを起動すると同じエラーとなった。起動後に確認すると、つくった.pidファイルがなくなっていた。

プロセスはない

mysql関係のプロセスを見てみたが、実行したgrep以外には動いていない。

pkg clean

/var/chache/pkg下の40ほどのtxzファイルが消されたが、PIDファイルが更新できない、というエラーは変わらない。

対応~解決

MySQLサーバーをアンインストールして、my.cnfを消す。

VagrantをリロードしてMySQLサーバーを再インストール。

この段階ではMySQLサーバーは動いていないが、無事起動に成功。

また、

  • 前に作ったデータベースは残っていた
  • そのままexit→Vagrantリロードすると、サーバーが起動(profileにmysql_enable="YES"を記述しているため)

 

MySQL – ログインとパスワード変更

ログイン

以下のコマンド入力後にパスワードを入力。

mysql -u username -p

たとえばrootで入る場合。”Enter password:”に対してパスワードを入力する。

パスワード変更

OSプロンプトから

OSのプロンプトに対して、以下のコマンド入力後に変更前のパスワードを入力。

mysqladmin password new_password -u root -p

たとえばrootのパスワードを変更する場合。”Enter password:”に対しては変更前のパスワードを入力する。

MySQLログイン中

MySQLのプロンプトで以下のコマンドを入力。

SET PASSWORD FOR user@host=password('new_password');

たとえばrootのパスワードを変更する場合。

 

Vagrant&VirtualBox – 仮想環境構築・利用の流れ

概要

Vagrant、VirtualBoxをインストール済みとして、個別のvirtualboxの仮想環境の導入・利用・削除の流れをまとめる。

Vagrant Cloudのbento/centos-7.7を導入する場合を例にする。

仮想環境の導入

virtualboxの検索と追加

  1. サイトでvirtualboxを探す
    • bento/centos-7.7を確認
  2. virtualboxを加える
    • vagrant box add bento/centos-7.7
      →ここでvirtualboxやvmwareなど複数のプロバイダーの選択肢が出た場合はvirtualboxを選択
  3. 追加後の確認
    • vagrant box list

ディレクトリーの作成と初期化

  1. 仮想環境ディレクトリーを作成
    • mkdir centos7 & cd centos7 
  2. virtualboxの初期化
    • vagrant init bento/centos-7.7
      →Vagrantfileが作成される

仮想環境の利用

仮想環境の起動と接続

  1. 仮想環境ディレクトリーでVagrantを起動
    • vagrant up
  2. 仮想環境に接続
    • vagrant ssh

仮想環境の停止

  1. 仮想環境のOSを終了(exitなど)
  2. vagrant halt

仮想環境の削除

仮想環境の削除

  1. 仮想環境idの確認
    • vagrant global-status
  2. 仮想環境の削除
    • vagrant destroy id

virtualboxの削除

  1. virtualboxの確認
    • vagrant box list
  2. virtualboxの削除
    1. vagrant box remove bento/centos-7.7

 

MySQL – CSVファイルのインポートでエラー

概要

MySQLでデータベースにCSVファイルをインポートしようとしたときに以下のようなエラーが出た。

MySQLのバージョンが新しいと出るらしく、メッセージにあるようにサーバーとクライアントの双方で許可を与える必要があるそうだ。

手順

クライアント側の指定

mysqlのログイン時にオプションでローカルの入力ファイルを許可する。オプションの書き方は以下2通りのいずれか

  • --enable-local-infile
  • --local_infile=1またはon

これを設定しておかないと、後述のグローバルパラメーターを有効にしても、LOAD DATA実行時に以下のようなエラーが出る。

サーバー側の指定

MySQLにログイン後、以下のコマンドでサーバーのlocal_infileの設定を確認すると0(無効)になっている。

local_infileを有効にして、設定が反映されていることを確認。

読み込み成功

 

HTML/CSS – img画像のフィッティングとセンタリング

概要

  • img要素で表示させる画像をdiv要素で囲む
  • div要素でサイズを指定して画像を収める
  • 画像を縦横にセンタリングする
  • 画像のサイズがdiv要素のサイズより大きい場合を想定している(画像の方が小さい場合に伸長はされない)

HTML

画像をdiv要素で囲み、CSSでサイズを設定する。画像ファイルは、CDNによるダミー画像を使っている。

CSS

画像を収めるための設定。画像ファイルより小さい枠のサイズを設定している。ただしこのままでは画像が左寄せか上寄せになる。

上の設定に画像の縦横センタリングを含めた設定。