MySQL: 2008年12月アーカイブ

OpenPNE の DB を移行するため、旧サーバで

mysqldump -u hoge -phogehoge pne_db > pne_db_backup_20081230

で吸い上げたデータを、新サーバで

mysql -u hoge -phogehoge pne_db < pne_db_backup_20081230

したら、

ERROR at line 415: Unknown command '\'.

とエラーに。
ああ・・・新しいサーバの MySQL の default-character-set は utf8 だった。
つーことで、明示的に、

mysql -u hoge -phogehoge --default-character-set=sjis pne_db < pne_db_backup_20081230

と default-character-set を指定してやればOK。

ああ、そういえば昔、別の仕事で同じようなエラーが出た時は、エラーになった行の \ を、\\ と全部エスケープして登録したな。
今時は、UTF-8 をディフォルトの文字コードに指定していることが多いだろう。
Shift_JIS で作ってる DB を移行するときは、--default-character-set=sjis を忘れるなということだな。

ずっと Oracle ばかり使ってると、「あり?ROWNUM って MySQL で、どうすんだっけ?」となっちゃうので(すまんのお、最近記憶力がなくて)メモっとく。

20件目から10件表示なら、

SELECT
    *
FROM
    hogehoge
LIMIT
    20, 10

でね。LIMIT を使いましょう。

最後の 10件を、降順に ORDER BY せずに抜くために、

SELECT
    *
FROM
    c_access_log
LIMIT
    (
        SELECT 
            COUNT(*) - 10
        FROM 
            c_access_log
    ), 10

とかやってみたけど、You have an error in your SQL syntax と怒られちゃって駄目。LIMIT のところにサブクエリの値は突っ込めないのか?

MySQL で、並び順を変えずにラスト10件を取得するスマートな方法ってどうすんだろう?

<参考>
MySQLとApacheのもやもや情報
http://pagerank.cocolog-nifty.com/blog/2007/12/mysqloraclerown_4c4f.html