のくす牧場
コンテンツ
牧場内検索
カウンタ
総計:127,062,752人
昨日:no data人
今日:
最近の注目
人気の最安値情報

    元スレMySQL 総合 Part15

    mysql覧 / PC版 /
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : - insertall + - mregexp + - SSD + 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitter
    102 = :

    timestamp型のカラムの内容を元に、毎日一定の時刻にデータの削除をしたいんですが
    このような事は可能でしょうか?
    また、可能な場合はどのように設定すれば?


    OSはFC6、mysqlは5.1.6です。

    107 = :

    新機能を除けば、5.0より5.1の方が品質は良い
    5.1を使いつつ新機能は当面使わないのが勝ち組

    108 = :

    すみません、色々調査しましたがどうしてもうまく行かないので
    質問させてください。

    下記の様な掲示板データをテーブルに格納しております。
    idは自動的に付与され、resはidの記事に対する返答が
    あった場合、id(親記事)の番号は入ります。

    この構成で、2008-12-18の記事だけ取得するが、
    それに関連する返答も取得したい場合のクエリを
    教えていただきたいと思います。

    下記の構成だと、idの1とidの2が取得できれば良いのですが。。。

    ┌───┬──┬──────┬────────┐
    │id    │res   │ comment   │time     │
    ├───┼──┼──────┼────────┤
    │1     │0    │ あいう     │2008-12-18 00:0 │
    ├───┼──┼──────┼────────┤
    │2    │1    │ かきく     │2008-12-19 00:10│
    ├───┼──┼──────┼────────┤
    │3    │0   │ さしす      │2008-12-19 01:20│
    ├───┼──┼──────┼────────┤
    │4    │3   │ たちつ     │2008-12-19 09:30│
    ├───┼──┼──────┼────────┤
    │5      │3   │ なにぬ    │2008-12-20 10:00 │
    └───┴──┴──────┴────────┘

    109 = :

    >>107
    ふーん、montyは全く逆のこと言ってるね

    110 = :

    >>108
    select * from tbl_test where DATE(time) ='2008-12-18' or res in(select id from tbl_test where DATE(time)='2008-12-18');
    これで出ることは出る

    111 = :

    >>118

    108です。

    ありがとうございます。
    とりあえず抜き出せたことだけでも良かったです。

    本来ならばデータは大量にあるのでスレッドのように抽出出来れば
    いいのですが、こちらはまた考えて見ます。
    既にご存知であればお教えください。


    112 = :

    失礼
    108です

    >>111
    >>110さんへの返答です。

    113 = :

    日本語を入力して、
    データーを取り出してみたら、

    ?????

    になってるんだけど、何が悪かったかな?

    116 = :

    >>115
    起動直後の一発目は速くなるかもしらんけど、
    あとはOSのディスクキャッシュが効くだろうから
    変わらん気がする。
    期待すべきはデータを取り出すほうじゃないかな。

    117 = :

    シフトJISにするとSQLインジェクションに対応できないという
    記事を読んだのですが、UTF-8でデーターベースを設定していても
    シフトJISの文字が入ってきた場合、強制的にシフトJISとして
    流通してしまうのでしょうか?

    118 = :

    http://blog.ohgaki.net/set_namesa_mcb_asc

    SET NAMESは禁止

    MySQLには文字エンコーディングを変更する「SET
    NAMES」SQL文が用意されています。(PostgreSQL
    も同様のSQL文、SET CLIENT_ENCODINGがありま
    す)この機能はSQLコンソールからは使ってよい機能
    ですが、アプリケーションからは使ってはならない機
    能です。 SQLインジェクションに脆弱になる場合があ
    ります。

    119 = :

    >>117
    文字化けしたデータとして流通するでしょ
    知識の問題じゃなく単に分析力の問題じゃん、それ
    UTF-8のところにSJIS無理やり流し込むとか文字化けして当然なんだから
    気にせずサニタイズしたらいい
    ある文章が文字化けしてるのか自然な文章なのかを判別するのは割りと凝った事が必要そう

    120 = :

    つまりデーターベースで使われる文字コード自体を
    utf-8としておけば、シフトJISの文字コードの文字が
    入ってきても、普通にサニタイズすれば問題ないという
    ことですね。

    強制的にセキュリティを破られるのかと思った。

    123 = :

    MySQL 4.1以降での文字の扱い

    MySQLはバージョン4.1以降で文字の扱いが大きく変わりました。

    それまでのMySQLは、クライアント側で使っている文字(バイトの並び)
    がそのままDBに格納され、取得するとそのまま返ってくるという非常
    に単純な挙動でした。従って、クライアント側で使用している文字エ
    ンコーディング(符号化方式)がDBで使用する文字エンコーディングと
    異なる場合は、クライアント側でDBに合わせて変換を行う必要があり
    ました。

    しかし、MySQL 4.1以降ではサーバ側とクライアント側にそれぞれ文字
    エンコーディングが指定できるようになり、ちゃんと設定すればサーバ
    が透過的に変換してくれるので、クライアント側で事前に変換をする必
    要が無くなったのです。

    ここまでなら便利な機能が増えて良かった良かったとなるのですが、現
    実はそうも行かないのでした。

    MySQLはサーバもクライアントもデフォルトでlatin1という文字コード(?)を
    使用します。latin1というのは名前の通りの文字コードで、漢字とかはか
    らっきしダメです。MySQLサーバで何も指定せずにDBを作るとその中の
    テーブルでは基本的にlatin1を使う事になりますので、日本向けのサー
    ビスでMySQLを使用するなら、大抵はujis(EUC-JP),sjis(Shift_JIS),utf8(U
    TF-8)のどれかを指定してDBを作ります。

    DBの文字エンコーディングをUTF-8にして、DBサーバに対してクライアン
    トとなるアプリケーションからUTF-8のINSERT SQLを発行した場合、問
    題なく動きそうですが、MySQLのクライアントは何も設定していなければ
    SQLの文字エンコーディングがlatin1だとサーバに通知するので、サーバ
    ではlatin1からDBの文字エンコーディングであるUTF-8へ変換するルー
    ルを送られてきたUTF-8に適用してしまい、大抵の場合文字化けしてグ
    チャグチャになります。

    4.1より前のバージョンではこういう変換は行われなかったため、その時
    代に書かれたアプリケーションの中には動かなくなるものもあり対策が
    必要になりました。

    125 = :

    「SQLインジェクション対策でプリペアドステートメントを使おう」
    って記事をよく見かけるのですが、
    プリペアドステートメントの使いかたが
    わかりません

    126 = :

    http://jp.php.net/manual/ja/pdo.prepared-statements.php

    ここのページに

    「アプリケーションで明示的にプリペアドステート
    メントを使用するように すれば、SQL インジェク
    ションは決して発生しません」

    って書いてあるのだが、文字コードに
    シフトJISを使っている場合は、
    プリペアドステートメントでも通過されて
    しまうよね?

    127 = :

    SQLインジェクション対策で、
    mysql_real_escape_string を使ってエスケープするのと、
    preparedstatement と使う方法と、
    2種類あるようですが、
    どっちを使うべきなのですか?

    129 = :

    >>126
    >文字コードにシフトJISを使っている場合は、

    何コード使ってようが、関係ないと思う。

    >プリペアドステートメントでも通過されてしまうよね?

    「通過されてしまう」とは?

    >>127
    一般論としては、prepared statement なんだろうけど、
    クエリーキャッシュが効かなくなるとかの難点もある。

    133 = :

    CREATE/DROP TEMPORARY TABLE と、TEMPORARY TABLE への INSERT/UPDATE/DELETE/SELECT
    だけができるようなアクセス権限設定は可能でしょうか?
    CREATE TEMPOARY TABLE テーブル名を決め打ちするくらいしか思いつきませんでした。

    136 = :

    show create database example1;

    137 = :

    >>136
    ちょーさんくすです。

    139 = :

    インストール直後の設定がうまくいかない・・・。

    141 = :

    質問です。
    PHPから操作するときなんだけど,hoge1ていうテーブルをuseするとき,
    mysql_selectdb("hoge1");

    mysql_query("use hoge1");
    って何か違うの?

    142 = :

    最終的にそのPHPスクリプトが掴んでいるMySQLサーバーとのセッション上で
    use hoge1 と同等の処理を実行するという点では同等だと思います >>141

    個人的には MySQL と PHP のどちらに処理を寄せるかの趣味の問題かな、という気が
    しますけれども、どちら派が多いのですかね。SQL文レベルでの紛れを嫌うのであれば
    PHP上で mysql_selectdb を使う方が無難ですかねえ。

    php5-5.2.4 のソースコードを眺めてみましたが、mysql_selectdb の方は最終的に
    MySQL C API の mysql_select_db() を呼び出しているようです。

    mysql_query の方は(当然ながら)引数として何でもありなので最終的には MySQL C API
    の mysql_real_query() を呼び出しているようです。

    mysql-5.0-5.0.51 のソースコードを眺めたところでは mysql_select_db() の
    mysql_real_query() どちらも実質的には(マクロですが) simple_command()
    を発行しているだけかな…最終的にサーバーと通信する際に流れる(MySQLプロ
    トコルの)パケットは同じになるような気がします(けど調べ方がわからない)。


    143 = :

    >>140
    違うよ
    データーベース側の文字コードと、
    クライアント側の文字コードを、同じとみなす、、
    って設定をどうやるのか、って聞いてるの。

    明示的に指定しないと、MySQLは、デフォルトで
    lation-1を勝手にあてはめやがるから。

    144 = :

    WinXPproSP3でMySQL5.0を使用しております

    小一時間ほど前からMySQLを始めたのですがバックアップの項目でつまっています
    何が間違っているか教えていただけないでしょうか?
    mysqldump -uroot -pxxxxxx -hlocalhost test > c:\Documents and Settings\xxxxxx\test.sql
    と入力すると
    ERROR:
    Unknown command '\D'.
    Outfile disabled.
    Outfile disabled.

    と表示されてしまいます
    \Dがひっかかってるのは一目瞭然なのですが、教本ではこれでバックアップが出来てるようです
    ためしに/Dや\d、/dなどに変えてみても(他の\も/に変えてます)同じようにOutfile Disabledと出てしまいます
    何が問題なのでしょうか?

    145 = :

    すみません、自己解決しました
    MySQLのコマンドラインからじゃなくて、Winにくっついてるほうからなんですね

    146 = :

    http://www.google.co.jp/trends?q=MySQL

    MySQL
    じわじわ低下しとる

    147 = :

    3000レコードほどのデータベースを更新する処理を考えています。

    UPDATE hoge SET key = val, key = val, WHERE id = 1
    UPDATE hoge SET key = val, key = val, WHERE id = 2

    と3000個クエリを発行するのと、

    REPLACE hoge (key,key) VALUES (val,val), (val,val)...
    としてひとつのクエリで済ませるのではどちらが早いものなのでしょうか。

    148 = :

    Syntax Errorですね。上のWHEREの前のコンマは不要です。


    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / mysql一覧へ
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : - insertall + - mregexp + - SSD + 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

    類似してるかもしれないスレッド


    トップメニューへ / →のくす牧場書庫について