MySQLの最近のブログ記事

mysqladmin で hoge-hoge という名前の DB 作って、そいつを mysql 上で扱おうとしたらエラーが・・・

mysql> GRANT ALL ON hoge-hoge.* TO dbuser@localhost;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-hoge.* TO dbuser@localhost' at line 1

どうも、ハイフンが式として判断されてるのか?コマンドの始まりと判断されているのか?・・・と思い、シングルクォーテーションで囲ってみたけど、

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''hoge-hoge'' at line 1

やっぱり駄目。同じエラーだなあ・・・
\ でエスケープしてみたら?

ERROR:
Unknown command '\-'.
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '\-hoge' at line 1

やっぱり駄目。つーか、エラーが増えてるし。(^^;

結局、バッククォーテーションで囲めばよかった。

mysql> GRANT ALL ON `hoge-hoge.*` TO dbuser@localhost;

こんな感じ。
そうかあ。MySQL じゃ、ハイフンを含んだ DB名を使うときは常にバッククォーテーションで囲まないと駄目なのか。ハイフンを含んだ DB名を使うのって今回が初めてなので知らんかった。(^^;

いちいち面倒なので、ハイフン使うのやめて、DBの名前を hoge_hoge に変えちゃった。
これが一番正解。(笑)

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