2014年10月26日

MySQL:IPアドレスを保存するカラムのデータ型

MySQLにクライアントのIPv4アドレスを保存する必要ができました。そこでテーブルを作ることになりましたが、IPアドレス用カラムはどのデータ型が良いか疑問に思ったので調べてみました。

今までの仕事で何度か稼働中のMySQLを使うことはありましたが、ほとんどの場合、IPアドレスはVARCHAR型で保存していました。(他の人の設計)

VARCHAR型でも問題ありませんでしたが、今回はPostgreSQLに専用のデータ型があることを思い出してしまいました。そのため、MySQLにも無いのかな?と疑問に思い、調べてみることにしました。

例 PostgreSQLのIPアドレス用のデータ型
ネットワークアドレス型 (PostgreSQL 9.3.2文書)

調べた結果、MySQLは文字列以外だとUNSIGNED INTEGERか、VARBINARY(4)で、INET_ATON()やINET_NTOA()関数と一緒に使うのが良さそうでした。
INET_ATON() (MySQL 5.6 Reference Manual)

IPv6の場合は、データ型にVARCHAR(16)を指定して、INET6_ATON()とINET6_NTOA()関数を使うようです。ただし、INET6_ATON()とINET6_NTOA()はMySQL 5.6.3から追加されました。そのため、5.6.3以前のバージョンでは使用できないそうです。試しに5.1でINET6_ATON()を使うとエラーになりました。
mysql> SELECT INET6_ATON('::1');
ERROR 1305 (42000): FUNCTION test.INET6_ATON does not exist

参考
IPv6 and internationalized domain (IDNA) functions for MySQL
Changes in MySQL 5.6.3 (2011-10-03, Milestone 6)

これらの結果は以下にまとめました。
MySQL IPアドレス用カラム

追記
MySQLへのIPv4アドレス保存を、PHPで試してみました。また、PHPにもIPv4アドレスの文字列、整数変換用の関数ip2long()、long2ip()がありますので、合わせてテストしてみました。
ip2long、long2ipのテスト
posted by jun1 at 14:21| Comment(0) | TrackBack(0) | データベース

2014年10月13日

Google DNSが。。。

今日8時ごろ、急にネットが繋がらなくなりました。Firefoxの下側に表示されるメッセージを見ていると、名前解決で待ち状態になっているので、Windowsのコマンドプロンプトからnslookupで確認すると、名前解決で応答が無いような状態でした。

そこで、nslookup の参照DNSサーバーを、Google DNSに変更してみました。
以下のように確認しましたが、応答が帰ってきません。
> nslookup yahoo.co.jp 8.8.8.8

何かDNS関係でトラぶっているようなので、ネットはあきらめて晩飯にすることにしました。晩飯を食べ終わったあと、ネットを確認すると、いつのまにか正常になっていました。

何が起こったのか調べると、原因はGoogle DNSだったようです。。。
【注意】google DNSが死亡 ネットに繋がらないなど障害が発生中 10月13日(NAVERまとめ)

あれ?

ルーターのDNSサーバーはプロバイダーから取得するように設定してたはずじゃなかったかな?と思いましたが、よくよく思い出すとルーターの設定を変更していました。

以前、プロバイダのDNSサーバーがトラぶったことがあり、そのときにルーターのDNSサーバーをGoogle DNSの8.8.8.8に変更したままでした。。。

とりあえず、また同じ間違いを犯さないように、ルーターのDNSサーバーの設定変更と、Google DNS以外のPublic DNSを調べました。

Google DNS以外のPublic DNSを調べると、もっと速いのがあるようです。
「8.8.8.8,8.8.4.4」より速い「129.250.35.250」

とりあえず、以下をメモしておきます。
・129.250.35.250
・129.250.35.251

2014年10月06日

Eclipseからバッチファイルを実行する(2)

久しぶりにEclipseからバッチファイルを実行しようとしたら、やり方をすっかり忘れていました。そこで、以前ブログに書いた以下を参考に、バッチファイルを書いていると、疑問が起こったのでちょっと調べてみました。
Eclipseからバッチファイルを実行する

疑問が起こった個所は、バッチファイルの先頭に、以下の2行を書くところです。
%~d0
cd %~p0

これらがどういう意味だったかはっきりしなかったので調べてみました。
すると、以下のページが見つかりました。
%~dp0 とは

このページによると、以下のような意味になります。
%~d0 %0 をドライブ文字だけに展開
%~p0 %0 をパスだけに展開

%0がバッチファイルのフルパスになるので、バッチファイルが D:\batch\test.bat とすると、以下のようになります。
%~d0   =>  D:    =>  バッチファイルのあるドライブへ移動
cd %~p0  =>  cd \batch\  =>  バッチファイルのあるディレクトリへ移動


また忘れたらいけないので、以下にまとめました。
Windows・Eclipseでバッチファイルを実行
posted by jun1 at 23:31| Comment(0) | TrackBack(0) | ソフト

2014年10月04日

Linux版Oracle 11g XEの文字コードをシフトJISに変更(2)

この前、Linux版 Oracle 11g XEで、データベースのキャラクタセットをシフトJISに変更しました。
Linux版Oracle 11g XE 文字コードをシフトJISに変更

そのときに使用したpfileやデータベース作成スクリプトですが、中身が良く分からない状態で作成したので、ちょっと調べてみました。また、データベース作成スクリプトで、ディスク容量を少なくしたものも試してみました。

以下、そのときのまとめ
Oracle 11g XE データベース作成用スクリプト
Linux版Oracle 11g XEの設定など

とりあえず、Oracleを試すのに問題がないので、これ以上の深入りはやめときます。
posted by jun1 at 10:04| Comment(0) | TrackBack(0) | データベース