inet_pton
PHPを4バイト文字列として使用して、IPアドレスを文字列として保存しています。inet_ntoa
mysql を使用して人間が読める表現を作成するには、 MySQLを使用したいのですが、整数値のみを受け入れるようです。
!"#
では、 ( ip32.33.34.35
に対応し、スペースにも注意してください) のような文字列を整数 (539042339
この例では に対応) として読み取るにはどうすればよいでしょうか?
inet_pton
PHPを4バイト文字列として使用して、IPアドレスを文字列として保存しています。inet_ntoa
mysql を使用して人間が読める表現を作成するには、 MySQLを使用したいのですが、整数値のみを受け入れるようです。
!"#
では、 ( ip32.33.34.35
に対応し、スペースにも注意してください) のような文字列を整数 (539042339
この例では に対応) として読み取るにはどうすればよいでしょうか?
SUBSTR()
MySQL < 5.6.3 では、との組み合わせでこれを行うことができますORD()
。
SELECT INET_NTOA(
ORD(SUBSTR(' !"#', 1, 1)) * 16777216 +
ORD(SUBSTR(' !"#', 2, 1)) * 65536 +
ORD(SUBSTR(' !"#', 3, 1)) * 256 +
ORD(SUBSTR(' !"#', 4, 1)))
結果は次のとおりです。
32.33.34.35
また、実際にはすでにそこにいるので、次のようにして自分で文字列を作成することもできますCONCAT()
:
SELECT CONCAT(
ORD(SUBSTR(' !"#', 1, 1)), '.',
ORD(SUBSTR(' !"#', 2, 1)), '.',
ORD(SUBSTR(' !"#', 3, 1)), '.',
ORD(SUBSTR(' !"#', 4, 1)))
末尾のスペースが失われないように、MySQL 5 以降またはバイナリ列で (CHAR ではなく) VARCHAR を使用していることを願っています。
IPv6 をサポートするには、最初にIF
ステートメントで長さを確認し、少し異なる方法で連結する必要があります。
MySQL 5.6.3 では、新しいINET6_NTOA()
関数がこれを直接サポートしています。バイナリ文字列を受け取り、IPv4 と IPv6 の両方をサポートします。
SELECT INET6_NTOA(' !"#')