Note to Self

自分用のメモ置き場

PHP をソースからインストールする

PHPをインストー

# cd /usr/local/src

-- http://php.net/downloads.php から任意のミラーサイトを選択して、ダウンロード
# wget -O php-7.1.7.tar.gz http://php.net/get/php-7.1.7.tar.gz/from/this/mirror

# tar -zxvf php-7.1.7.tar.gz

# cd php-7.1.7

# ./configure

# make && make install


configureで以下のようなエラーが発生する場合

configure: error: xml2-config not found. Please check your libxml2 installation.

libxml2-devel をインストールすると解決

# yum install libxml2-devel

PHPの多重代入

PHPの多重代入

PHPで複数の変数に同じ値を代入する

以下の式を実行すると、全ての変数に 100 が代入される

<?php

$var1 = $var2 = $var3 = 100;

var_dump($var1);
var_dump($var2);
var_dump($var3);

/*
  実行結果

  int(100)
  int(100)
  int(100)
*/
?>


配列の場合は list() を使用する

<?php

list($var1, $var2, $var3) = [1, 2, 3];

var_dump($var1);
var_dump($var2);
var_dump($var3);

/*
  実行結果

  int(1)
  int(2)
  int(3)
*/
?>

文字コードについての基礎知識

文字コードについての基礎知識

Software Design 2016年12月号の特集文字コード攻略マニュアルを読んで、自分用にまとめておく

符号化

文字をビット列で表すこと

例)じゃんけんの種別を符号化したもの

文字 符号
グー 00
チョキ 01
パー 10

文字コード

どの文字をどのようなビット列で表現するか

文字化け

表現と解釈のルールが一致しない場合、情報を正しく扱うことができない

文字コードは視覚的な表現について責務を持たない

その文字がどのように視覚的に表現されるか決定するのはフォント

文字コードの種類

  • ASCII
    American Standard Code for Information Interchangeの略
    文字コードの祖先

  • Unicode
    世界中の文字を1つの符号化文字集合に収めようとする規格
    4バイト

  • EUC-JP
    Extended UNIX Code Packed Format for Japaneseの略
    UNIX上で日本語の文字を扱う場合にもっとも多く利用されている

  • Shift_JISSJISとも呼ばれる)
    かつては日本語環境でのデファクトスタンダード

  • CP932
    MicrosoftによってShift_JISが拡張されたもの
    NEC特殊文字NEC選定IBM拡張文字、IBM拡張文字が含まれる

  • UTF-8
    1文字が1~4バイトで表現される可変長の符号化方式
    1バイト文字はASCIIそのものなので、上位互換として普及
    ひらがなや漢字は3バイトで表現される

MySQLで副問い合わせによって取得した複数のキーでデータを削除する

MySQLで副問い合わせによって取得した複数のキーでデータを削除する

MySQLで副問い合わせによって取得した複数のキーでデータを削除したい

主キー(id)に serialNo を追加し、複合主キーにしようとしたが、serialNo に同じ値が入っており、主キー制約を変更できなかった

重複する項目を削除する際に、少し悩んだのでメモしておく

-- 重複行を特定し、主キーだけのビューを作成
CREATE VIEW v_dummy AS SELECT id, serialNo FROM t_hoge GROUP BY id, serialNo HAVING COUNT(*) > 1;

-- 重複行を削除
DELETE FROM t_hoge WHERE (id, serialNo) IN (SELECT id, serialNo FROM v_dummy);

-- ビューを削除
DROP VIEW v_dummy;


一度ビューを作成する理由は、副問合せで利用したテーブルをそのまま削除することができないため

MySQLでランダムに指定件数分データを取得する

MySQLでランダムに指定件数分データを取得する

ORDER BY に RAND() 関数を使用し、LIMIT 句で取得件数を指定する

例)hoge テーブルからランダムに10件取得する

SELECT * FROM hoge ORDER BY RAND() LIMIT 10;

MySQLでランダムな整数値を取得する方法

ランダムな整数値を取得する方法

MySQLで INT 型のレコードの値をランダムに更新する

例)id列を 0 ~ 10で更新する

UPDATE hoge SET id = ROUND(RAND() * 10);


例)id列を 1 ~ 10で更新する(最低値を1にする)

UPDATE hoge SET id = ROUND(1 + RAND() * 9)

MySQLで空文字を検索できない場合の対処法

MySQLで空文字を検索できない場合の対処法

空文字で検索したが何故かデータが取得できない

SELECT * FROM hoge WHERE title = '';


エスケープシーケンスの\0(ASCII NUL 文字)を使うと検索できた

SELECT * FROM hoge WHERE title = '\0';