MySQL – CSVファイルへのエクスポート

コマンド

以下のコマンドで、指定したテーブルのデータをCSVファイルに書きだす。

エラー対応

下記のようなエラーが出る場合。

グローバル変数を確認する。

この場合、表示されたディレクトリーにのみCSVファイルを書き込むことが可能なので、以下のように指定する。

結果のファイルdata.csvは/var/lib/mysql-filesディレクトリー下に保存される。

 

Java – プリミティブ型 – 最大値・最小値

概要

数値表現可能なプリミティブ型の最大値・最小値は、それぞれのラッパークラスの定数として定義されている。

WrapperClass.MAX_VALUE
WrapperClass.MIN_VALUE

整数型、実数型、文字型で、それぞれの意味が異なる。

整数型の最大値・最小値

整数型の最大値・最小値は、それぞれのビット長で表現可能な符号付整数の最大値(正数)、最小値(負数)。

byte型

short型

int型

long型

整数型のオバーフロー/アンダーフロー

整数型の最大値を超える演算や最小値を下回る演算をすると、その方の範囲内のビットパターンで表現される値になる。

実数型の最大値・最小値

実数型の最大値・最小値は整数型と異なり、次の値。

最大値
正の数で表現できる最大の数
最小値
正の数で表現できる絶対値が最も小さい数

したがって、負の領域で表現可能な最小値は最大値のマイナス、負の領域で表現可能な絶対値が最小の数は最小値のマイナスになる。

float型

double型

実数型のオーバーフロー/アンダーフロー

実数型の最大値を超える演算をするとInfinityまたは-Infinityになる。

実数型の最小値の絶対値を下回る計算をすると、0.0または−0.0になる。

文字型の最大値・最小値

char型

char型の最小値は文字コード0の文字、最大値は文字コード65535の文字。

文字型のオーバーフロー/アンダーフロー

char型の最大値を超える演算や最小値を下回る演算をすると、それで表現可能な整数型に変換される。

 

Java – 演算子 – 算術演算子

概要

算術演算子はbyte型~long型などの整数や実数(float型double型)を対象とした演算子で、文字型のcharも演算対象になる。

<単項演算子>

+a 正符号、意味はない
-a 負符号、正負反転
++a 参照前インクリメント
a++ 参照後インクリメント
--a 参照前デクリメント
a-- 参照後デクリメント

<二項演算子>

a + b 加算
a - b 減算
a * b 乗算
a / b 除算
a % b 剰余

単項演算子

+:正符号

数値リテラルや数値型変数の前に置く。正数・負数とも符号は変わらず、実質意味を持たない。

-:負符号

数値リテラルや数値型変数の前に置き、符号を反転させる。

符号演算子の連続

単項演算子は交互に連続して書くことができて、その結果は負符号’-‘が偶数回なら’+‘と同じ、奇数回なら’-‘と同じ結果になる。

ただしその中に--++のように連続した符号があると、インクリメント/デクリメント演算子と解釈されてエラーになる。

++/–:インクリメント/デクリメント

  • ++を変数の直前に書くと「変数が評価される前に」変数の内容が1増加する
  • ++を変数の後に書くと「変数が評価された後に」変数の内容が1減少する
  • 演算子と変数の間に空白が入ってもよい。

整数の例

以下の例では、演算子が前置された場合は表示前にインクリメント/デクリメントされ、後置された場合は表示後にインクリメント/デクリメントされる。

また、以下の例では二項演算子の項にインクリメント/デクリメント演算子を使った例。

 

上記の例をnの変化で表すと以下の様になる。

3(→4) + →5 – 5(→4) = 3(4)

実数の例

実数の場合も++で1.0増加、--で1.0減少になるが、計算誤差が出る。

char型の例

char型にも適用可能で、インクリメントで1文字進み、デクリメントで1文字戻る。

二項演算子

四則演算

四則演算は多言語と同じ記号で、整数・実数の関係も同じ。整数同士の演算は整数で桁数が多い方に自動的にキャストされ、2項のうちいずれかでも実数なら結果も実数になる。

+:加算

-:減算

*:乗算

/:除算

%:剰余

abで割った時の剰余(余り)をa % bで与える。実数表現でも整数商に対する剰余が計算される。

除数・被除数が小数部を持つ場合、整数商に対する剰余が実数で計算される。

除数・被除数が負数の場合は、商と剰余の以下の式から考える。

(1)    \begin{equation*} a / b = q, \; a \% b = r \quad \Leftrightarrow \quad a = b q + r \end{equation*}

たとえば以下のように。

(2)    \begin{equation*} -7 \% (-2) = -1 \quad \Leftarrow \quad -7 = -2 \times 3  - 1 \end{equation*}

 

ゼロによる除算

整数除算でゼロで割ると実行時例外となる。剰余も除算を行っているので同じ。

浮動小数点演算の場合にゼロで割ると例外にならず、結果はInfinityとなる。剰余計算の場合は結果はNaN

べき乗

べき乗の演算子はなく、必要ならMathpow()メソッドを使う。

 

MySQL – テーブルのカラムの変更

カラム名の変更

changeの場合

カラムの型の変更

changeの場合

ALTER TABLE … CHANGEで変更するが、新しいカラムでも現在のカラム名を指定する必要がある。

modifyの場合

 

MySQL – テーブルのカラムの削除

1つのカラムの削除

複数のカラムの削除

 

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のそれぞれで引数に応じた処理を行わせている。

実行例