MySQL

mysql で SQL の最後をセミコロンではなく\Gにすると

3

mysql で SELECT 文の最後をセミコロンではなくメタコマンドの \G にすると結果を縦に表示してくれる!今まで知りませんでした。カラム数が多い時はかなり便利です。
(続きを読む…)

OpenPNE で画像がアップロードできなくなったときのチェックポイント

1

OpenPNE の画像がアップできない原因はいくつかあります。GD がないとかは他にも参考になるサイトがあるのでそれ以外の場合を書きました。

最初からアップロードできない場合

MySQL の最大パケット転送料に引っかかっている場合があります。以前書いた以下のエントリが参考になるかと思います。
MySQL に大きなデータを送る際に max_allowed_packet を確認した方がいい

急に画像がアップロードできなくなった場合

今回この調査依頼が来て、調査したところ MySQL の最大テーブル長 (Max_data_length)に引っかかっていました。
(続きを読む…)

MySQL に大きなデータを送る際に max_allowed_packet を確認した方がいい

3

MySQL でクライアントからサーバに送ることができるパケットの最大は 16MB です。しかしデフォルトでは 1MB になっています。画像を DB に格納している OpenPNE のようなアプリケーションではこの制限に引っかかってしまうことがあります。
(続きを読む…)

WordPress のデータベースを自動バックアップするプラグイン WP-DB-Backup

1

WordPress で使用しているデータベースを自動で定期的にバックアップしてくれるプラグイン WP-DB-Backup です。
WordPress ? WP-DB-Backup ? WordPress Plugins
(続きを読む…)

MacPorts で phpMyAdmin をインストール

1

MacPorts で phpMyAdmin をインストールしたメモです。

phpMyAdmin インストール

$ sudo port install phpmyadmin

これで /opt/local/www/phpmyadmin 以下にインストールされます。
(続きを読む…)

MacBook に開発環境を入れる

1

Apache + MySQL + PHP を MacPorts で入れてみました。

Apache のインストール

$ sudo port install apache2

しかし、sqlite3 のインストールでエラーになってしまう。
下記を参考に一度 sqlite3 を削除して入れなおしたらうまくいきました。
Mac Ports で Apache2 のインストールエラー – Get crazy

$ sudo port clean --all sqlite3
$ sudo port install sqlite3

(続きを読む…)

WordPress を高速化する5つの方法

17

WordPress を高速化する5つの方法です。

  1. テーマの効率化
  2. PHP の高速化
  3. ページキャッシュプラグインの使用
  4. MySQL クエリキャッシュ
  5. MySQL テーブル最適化

(続きを読む…)

CakePHP MySQL で文字化けを防ぐ設定

4

MySQL で文字化けを防ぐためには
SET NAMES utf8
のように SET NAMES を実行するのが有効なのですが、これを app/config/database.php で設定する方法です。

'encoding'=>'文字コード'
をデータベースの設定項目に追加してやるだけです。

具体的には app/config/database.php が下記のようになります。

var $default = array(
    'driver' => 'mysql',
    'connect' => 'mysql_connect',
    'host' => 'localhost',
    'login' => 'user',
    'password' => 'password',
    'database' => 'dbname',
    'prefix' => '',
    'encoding' => 'utf8'
);


cake/libs/model/dbo/dbo_mysql.php
で下記のように実行されています。

function connect() {
    (略)
    if (isset($config['encoding']) && !empty($config['encoding'])) {
        $this->setEncoding($config['encoding']);
    }

    return $this->connected;
}
function setEncoding($enc) {
    return $this->_execute('SET NAMES ' . $enc) != false;
}

SQL BLOB の容量を計算する方法

1

OpenPNE のカスタマイズをしていて会員毎に画像容量の制限をする必要がでてきました。
quota を使用できれば簡単なのですが、OpenPNE は DB に バイナリデータとして画像を保存しているため使用できません。

そこで SQL で容量を計算する方法を考えました。

LENGTH 関数を使用して
SELECT LENGTH(blobカラム)
とすればバイト数を計算できます。

OpenPNE の場合は c_image というテーブルに画像データが格納されています。
そこで特定の会員の日記に使用した画像の容量を計算するのに下記のようにしてみました。

SELECT SUM(LENGTH(i.bin))
FROM c_image as i
LEFT JOIN c_diary d ON(d.image_filename_1=i.filename OR d.image_filename_2=i.filename OR d.image_filename_3=i.filename)
WHERE d.c_member_id=会員ID

得られる値は byte 数になります。

MySQL で NULL を一番最後にして昇順にソートする

4

2008.2.27 追記
コメントで教えていただきました下記方法で簡単にできました。
is null asc の指定と 通常の asc の指定をするのがポイントですね。

SELECT
  id,
  comment
FROM table
ORDER BY comment IS NULL ASC, comment ASC;

—–追記ここまで—–

MySQL で昇順にソートすると NULL は一番最初に来ます。
それを最後にできないかということで下記のようなSQL を考えてみました。

SELECT
  id,
  comment,
  CASE WHEN comment IS NULL
    THEN 10000
    ELSE ASCII(LEFT(comment,1))
  END AS dummy
FROM table
ORDER BY dummy ASC, COMMENT ASC

comment カラムを昇順でソートして、NULL の場合は一番最後に NULL がきます。
あまりスマートな方法ではないのですが、これで取り合えず NULL を最後にして昇順でソートするということができました。

ORACLE とかだと下記のように簡単にできますね。
ORDER BY comment ASC NULL LAST

NULLS FIRST
NULL 値を順序の最初にするソートを行なう
NULLS LAST
NULL 値を順序の最後にするソートを行なう

Go to Top