5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

【この先一体】MySQL 総合 Part15【どうなるの】

1 :NAME IS NULL:2009/04/21(火) 14:21:05 ID:???
オラクル社製(予定)RDBMS、MySQL の総合スレです。
MySQL 総合 Part15 http://pc11.2ch.net/test/read.cgi/db/1227475230/
[関連スレと過去ログ]
http://find.2ch.net/index.php?STR=MySQL
http://makimo.to/cgi-bin/search/search.cgi?D=db&q=MySQL&sf=0&link2ch=on

[MySQL Developer Zone] http://dev.mysql.com/
[MySQL 日本語リファレンスマニュアル] http://dev.mysql.com/doc/refman/5.1/ja/index.html
[MySQL Internals Manual] http://dev.mysql.com/doc/internals/en/

[MyNA] http://www.mysql.gr.jp/
[MLja] http://lists.mysql.com/mysql-ja

ここで質問をする前に、MyNAでのFAQを最初に確認しましょう。
http://www.mysql.gr.jp/frame/modules/bwiki/?FAQ
MyNAでの「心得の条」
http://www.mysql.gr.jp/frame/modules/bwiki/index.php?%BB%A8%B3%D8%2F%BF%B4%C6%C0

・関連ツール及びユーティリティ
・関連書籍
>>2

2 :NAME IS NULL:2009/04/21(火) 14:21:36 ID:???
【関連ツール及びユーティリティ】

[phpMyAdmin] http://www.phpmyadmin.net/
[phpMyBackupPro] http://www.phpmybackuppro.net/
[MySQLCC] http://www.mysql.com/products/mysqlcc/
[MySQL-Front] http://www.mysqlfront.de/
[mytop] http://jeremy.zawodny.com/mysql/mytop/
[Common SQL Environment] http://www.hi-ho.ne.jp/tsumiki/cse_1.html

MySQL ABでの各種GUIツールはMySQL GUI Toolsとして統合されています
(WorkbenchはGUI Toolsから独立しました。)
http://dev.mysql.com/downloads/gui-tools/5.0.html
・MySQL Administrator
・MySQL Query Browser
・MySQL Migration Toolkit

http://dev.mysql.com/downloads/gui-tools/5.0.html#Workbench
・MySQL Workbench

【関連書籍】

[MySQL Books]
http://dev.mysql.com/books/
http://www.amazon.co.jp/exec/obidos/search-handle-url/ix=books-jp&fqp=keywords%01MySQL
http://www.amazon.co.jp/exec/obidos/search-handle-url/ix=books-us&fqp=keywords%01MySQL

3 :NAME IS NULL:2009/04/21(火) 14:22:11 ID:???
パート16じゃぼけえ!


mysqlの歴史は15で終わりじゃ・・・。

4 :NAME IS NULL:2009/04/21(火) 16:04:44 ID:TwIH4wEs
>>1


mySQLがOracleになっちゃった。泣

★ネガティブな考え方
もうmySQLはOracleの体験版とか実験版みたいな位置づけなのか。
しかもそのうち有料になるかも。

★ポジティブな考え方
これでアホ企業のOracle絶対主義のバカ共もmySQLを見直すかも。


5 :NAME IS NULL:2009/04/21(火) 16:11:29 ID:???
これで完全にポストグレは終わった

6 :NAME IS NULL:2009/04/21(火) 17:03:26 ID:???
逆だろ。
これでMysqlは終わった。
もっとも今の性能で良いのなら良いんだろうけど
RDBはBDBM系程枯れていないからな。
開発リソースをじょじょに減らしていかれて、
終には挽回不能な差を付けるようにコントロールするのがOracleの戦術になるだろ。


7 :NAME IS NULL:2009/04/21(火) 17:12:04 ID:???
オラクルのサン買収後の戦略を発表
ほとんどのフリー製品を有料化。
2009/04/21

サンを買収したオラクルは、買収後のサンのソフトウェア製品についての基本戦略を発表した。
これはSun が持つソフトウェア製品をオラクルデータベース製品体系に
組み込み、相乗効果による収益の拡大を狙うというものだ。
Java, Solaris はそれぞれ、OracleScript、OracleOS と名称を変更し、
今後オラクルデータベースに最適化、統合化されていく。
OpenSolaris は OracleOSLite として有料化する。
MySQL に関しては、OracleLite として有料化し、今後は、Oracle との下位互換性のための
更新のみを一年程度続けた後、開発を収束させる。
OracleLite 購入ユーザには、Oralce へのアップグレードを用意する。
これら有料化する製品に関しては、2009年7月までの猶予期間が設けられる。
現在のユーザは使用の停止か、製品版の購入のどちらかを選択することになる。
フリー版の使用は、商用私用を問わず、禁止されることになる。
「これらの戦略により、サンの収益体質を改善し、オラクルの製品体系を強化する。
 システムソフトウェアやデーターベースの無償提供は、ビジネスとして成立しないことが
 サンの失敗により証明された。しかしながら、サンの持つこれらの製品群は、
 ユーザにとって非常に有用なものであり多くの支持を集めている。
 我々は健全な販売戦略によってこれらの製品を市場に提供しつづけることにより、
 市場のニーズにより完全に応えていけるものと信じている。」
とオラクルのスポークスマンは昨晩夢をみた。

8 :NAME IS NULL:2009/04/21(火) 17:39:23 ID:4/3o227t
前スレ>>971
>なんだかマシンが重くなるし
起動時は重いけどね(mallocとemの起動。特に後者)
#emは起動後手動でもいいんじゃない?

>GUIはよくわからんし
emだったら、前提知識無いと使えないと思う
admin以外は、SQLDeveloper でいいんじゃない?

9 :NAME IS NULL:2009/04/21(火) 17:41:38 ID:4/3o227t
項目が多いから、試行錯誤だと 大変かなという意味で・・・

10 :NAME IS NULL:2009/04/21(火) 22:27:48 ID:???
つーことはMYSQLが有料化されたら
MMORPGとか無料で提供していくのはきついのですね

11 :NAME IS NULL:2009/04/21(火) 23:15:07 ID:???
ポスグレベンダーが儲かる

12 :NAME IS NULL:2009/04/21(火) 23:25:03 ID:508JdpKb
さあ、Oracle Liteであなたもデータベースをはじめましょう!







みたいな

13 :NAME IS NULL:2009/04/21(火) 23:34:45 ID:???
当たり前だが、MySQLはOracle有利な開発になるだろーね
それもMySQL自体は今のシェアを維持する形のね
生かさず殺さずって言った感じ?

14 :NAME IS NULL:2009/04/22(水) 00:35:05 ID:???
MySQLとJavaが無料?
ネット系企業は改修の嵐ですかね?
>7 みたいな未来がくる??

15 :NAME IS NULL:2009/04/22(水) 02:37:19 ID:???
MySQLとJavaはオープンソースだし、DrizzleやIcedTeaあるし、全然平気。

16 :NAME IS NULL:2009/04/22(水) 04:13:57 ID:???
なんかどさくに紛れて(?)version5.4なるのが出てる(betaだけど)。

17 :NAME IS NULL:2009/04/22(水) 04:44:06 ID:???
実際MySQLが使えなくなってPostgresに移行するとして、運用などで
困る事って具体的にどんな事があるのでしょうか?
(SQLの互換性に関してはとりあえず無視で。元々標準SQLからほど遠い
ところで好き勝手やっていたのはMySQLの方ですし)

18 :NAME IS NULL:2009/04/22(水) 05:06:31 ID:???
この合併でデータベースの完全独占状態になるわけだけど独禁法は適用されないんですか?

19 :NAME IS NULL:2009/04/22(水) 06:01:19 ID:wKTBWyJq
MSのWindows支配にくらべればまだまし。

20 :NAME IS NULL:2009/04/22(水) 07:22:18 ID:bDgJ3bNf
AdobeのCS支配にくらべればまだまし

21 :NAME IS NULL:2009/04/22(水) 08:26:48 ID:???
>>17
MyISAMべったりなアプリは移植に苦労するかも。
あとはMySQLのレプリケーションと同じことを他の製品でやろうとすると結構大変。

22 :NAME IS NULL:2009/04/22(水) 10:52:52 ID:???
Oracleがうるさい競合製品のMySQLを生かし続ける理由はない
ttp://www.itmedia.co.jp/news/articles/0904/21/news072.html

MySQLはSunの下にいたときのように今後もフリーであり続けるかどうかはわからない
ttp://journal.mycom.co.jp/news/2009/04/21/052/

昔からOracleは嫌いだったが、これで益々嫌いになりそうだぜ
ふぅ・・・

23 :NAME IS NULL:2009/04/22(水) 13:32:21 ID:???
>>21
MySQLのPostgreSQLに対する大きなアドバンテージはレプリケーションだけ
だからねぇ。

PostgreSQLにもpgpool等いろいろな実装は出てきてはいるけど、決定版がない。

しっかし、今回の件で、海外ではMySQLからの代替がないという感じで混乱して
いるのを見て、PostgreSQLやFirebirdの扱いの軽さには驚いた。

24 :NAME IS NULL:2009/04/22(水) 14:26:28 ID:1zCLPW15
>>23
過去、いろんなところで書かれていた
・海外では Oracle VS. MySQL であること
・Postgres は日本以外では、あまり使われていない
を実感って感じでしょうか?

レプリケーションも大きいんだろうけど
myisam で相度を稼ぐことができないこと
MySQLの手抜きなSQLのコンバージョンの工数がでかそうなこと
MySQLのみ対象としたプロダクトが多いこと(それ以外しらねーよ みたいな)
も影響があるのかな と


25 :NAME IS NULL:2009/04/22(水) 16:49:29 ID:???
オープンソースMySQLプロジェクトで役目を果たす用意がある」---Sunを離れた“MySQLの父”がOracleに提案
http://itpro.nikkeibp.co.jp/article/NEWS/20090422/328907/

26 :NAME IS NULL:2009/04/22(水) 17:13:25 ID:???
OracleのSun買収で、MySQLの運命は?
ttp://www.itmedia.co.jp/news/articles/0904/22/news060.html

27 :NAME IS NULL:2009/04/22(水) 17:21:42 ID:???
正直、MyISAMで済むのならSQLiteでもつかっていろって感じもするけど、
SQLiteのようなライブラリによるファイル操作ではなく、マネージメント
システムが動いてそこで排他処理をしてくれるというのが重要なんだろうなぁ。

とはいえ、LDAPやらなんやらのバックエンドにMySQLってわけがわからんし、
他のアプリでもとりあえずMySQL使っとけというのが多すぎ。

これを機に、なんでもかんでもMySQLという流れが変わってほしいもんだ。

28 :NAME IS NULL:2009/04/22(水) 20:29:19 ID:???
何でもバークレイDB

29 :NAME IS NULL:2009/04/22(水) 23:25:54 ID:???
>>23-24
なんで海外でPostgreSQLがあまり使われてないのかが分からないな−。
ほとんどの用途なら、MySQLでもPostgreSQLでも機能も性能も大差ないっしょ。

ただ単にPostgreSQLという選択肢があると言うことが
広く知られてないだけなんじゃないだろうか。

PostgreSQLのメイン開発者って確かカナダと日本だから、
欧米でアピールする機会が極端に少なかったのかもしれない。

30 :NAME IS NULL:2009/04/22(水) 23:58:09 ID:???
>>29
大昔のPostgreSQLの性能の低さも影響しているのも知れない。
そして、ある程度差がつくとサポートベンダの有無が効いてきて、
海外での圧倒的な差になったんじゃないかな。

日本ではSRAがあったけど、海外でPostgreSQLの商用サポート
受けようと思ったら…

31 :NAME IS NULL:2009/04/23(木) 11:39:24 ID:???
MySQLってソースフォージで開発されてる?
その場合、デュアルライセンスはどう処理されてるの?
ソースフォージってデュアルライセンスって選べるの?

32 :NAME IS NULL:2009/04/23(木) 12:28:14 ID:???
MySQLはBazaar。
https://code.launchpad.net/mysql
ここから拾ったものはGPL。

33 :NAME IS NULL:2009/04/23(木) 17:18:20 ID:???
postgreって実はシェアかなり少なかったんだね

34 :NAME IS NULL:2009/04/23(木) 17:27:58 ID:???
firebirdってMySQLの代わりになりません?

35 :NAME IS NULL:2009/04/23(木) 17:44:21 ID:cXNPfnaF
>>33
Windowsネイティブ版が遅かったというのもあるかもしれない
cygwin環境でのインストールの記事はあるにはあったけどね

>>34
@ITのDBセクション見てみれば?
小規模な組み込み用途が多いような印象を受けてる
innodbの代替のfalconの開発者はFirebirdの中核っぽい人じゃなかったっけ?

36 :NAME IS NULL:2009/04/23(木) 19:08:45 ID:???
ポストグレは完全に散ったな

37 :NAME IS NULL:2009/04/23(木) 21:03:09 ID:???
>>36

> ポストグレは完全に散ったな

何故そういう結論になるのかしりたい

38 :NAME IS NULL:2009/04/23(木) 21:33:24 ID:nqF0XbwY
>>37
禿同。
案件に合うか、合わないかじゃねーの

39 :NAME IS NULL:2009/04/24(金) 03:02:07 ID:???
ポスグレ厨が居る限り存続しうる!安泰じゃ!

40 :NAME IS NULL:2009/04/24(金) 03:14:11 ID:???
PostgreSQLは8が出るのが遅すぎた。
不人気の理由は他にないような。

41 :NAME IS NULL:2009/04/24(金) 03:43:16 ID:???
MySQLのような尖った特長がなかった。

42 :NAME IS NULL:2009/04/24(金) 03:48:44 ID:???
MySQLの尖ったところってどこだろう。

43 :NAME IS NULL:2009/04/24(金) 03:56:51 ID:???
36みたいなショックで発狂しちゃった人を触るなよ

44 :34:2009/04/24(金) 11:02:51 ID:???
>>35
なんか微妙すね。当面はMySQL使ってDrizzleが使えるようになったら乗り換えるかな。

45 :NAME IS NULL:2009/04/24(金) 12:40:50 ID:N4I7I0BX
儚くもポストグレが完全に散った。
もう今から始める奴はポストグレを選ばない。

MYSQLがOracleになったからIT系専門学校ではMYSQLを教え、
書店にはMYSQL関連の参考書がさらに並ぶ。
そういう利用者がネットでMYSQLを語り
それを見た奴がMYSQLでデータベースを始める。
MYSQLとOracleに共通性が出れば就職にも有利。

完全にポストグレは蚊帳の外。
終わった。象は絶滅だ。

46 :NAME IS NULL:2009/04/24(金) 13:49:39 ID:JUI0rWl8
>>45
多分DB触ったことがない奴が言ってもねーーーー
#触ったことがあるなら、そういう発言にはなりえないよ
#触っていってるなら、仕事やめたほうがいいよ

47 :NAME IS NULL:2009/04/24(金) 15:47:47 ID:???
33=36=45はキチガイ荒らしでおそらく同一人物放置推奨。
そもそも、postgreとかポストグレとか言っている時点で…

48 :NAME IS NULL:2009/04/24(金) 16:49:53 ID:???
両方使ってたし、二者択一ってわけでもないからなにがどうでもいいと思うがなー。

だがSQLserver貴様は別だ。オープン系メインでやってたら貴様の出る幕はないけんの。

49 :NAME IS NULL:2009/04/24(金) 17:45:26 ID:???
>>46
激同
ただMySQLのシェアが更に広がるのは間違いない

50 :NAME IS NULL:2009/04/24(金) 18:41:40 ID:???
>>49
そうかなぁ。日本国内ではPostgresが徐々に増えそうな気がする。
個人的には、MySQLはちょっと方言がきつくて、気に入らない。
海外ではMySQL以外では何が人気なんだろうね、Firebird?


51 :NAME IS NULL:2009/04/24(金) 19:02:16 ID:???
今のうちにmysqlダウンロードしておいた方がいい?
いきなり有料になったりするんじゃね

52 :NAME IS NULL:2009/04/24(金) 21:19:15 ID:???
mysqlのデータフォルダを丸ごと定期的に別のドライブにコピーしてバックアップしてます。
これを他のPCに移した場合、ちゃんと機能する場合とmysqlがエラーになり立ち上がらない場合があるのですが
これは本来よくない方法なのでしょうか?
たまたま自分の別のPCでも読み込めるだけで
本来は動かなくて当然で推奨されないことなのでしょうか。
dumpより楽なのでこの様なコピーをしているのですが。

53 :NAME IS NULL:2009/04/24(金) 21:20:19 ID:???
お前は何を言ってるんだ

54 :NAME IS NULL:2009/04/24(金) 21:47:26 ID:???
MySQLが飼い殺されるどさくさに紛れてperconaが主流になったりして。

55 :NAME IS NULL:2009/04/24(金) 21:55:44 ID:???
>>52
Linux 上で使っているなら lvm mysql スナップショット
あたりでググれ。

Windows の場合は VSS Writer がないので VSS 対応のバックアップ
ソフトでバックアップを開始する直前直後にLinux の場合と同じことをす
れば出来るかもね。 まあ面倒なので素直に dump だな。


56 :NAME IS NULL:2009/04/24(金) 22:02:08 ID:???
>>52
エキノコックスに罹ってるぞ

57 :NAME IS NULL:2009/04/25(土) 21:43:44 ID:zIrsT6ri
文字だけしか入っていないレコードから
ランダムに一つ取り出すにはどうすればいい?
やっぱり数字用のカラムを作るべき?

58 :NAME IS NULL:2009/04/25(土) 21:57:58 ID:???
order by rand() limit 0, 1

59 :NAME IS NULL:2009/04/25(土) 22:35:20 ID:???
国際情勢に例えると

Oracle = アメリカ
MYSQL = 日本
ポストグレ = 北朝鮮

OracleとMYSQLの同盟により
ポストグレは完全に終わった

60 :NAME IS NULL:2009/04/26(日) 00:39:50 ID:FjN1BGTg
>>59
なるほど。イエローモンキーと馬鹿にされているわけだ
Oracleのいいなりになるしかないから、その点では正しいなw
Postgresは危機感をあおってはいないが
昔は攻撃的だったのはMySQL側だったのだが(とMLで書いてた人がいたよ)

61 :NAME IS NULL:2009/04/26(日) 06:37:59 ID:???
>>59
包茎くん乙。
お前にせめて自分が生きる悪臭公害と言われていることに気づけるぐらいの
知能があればよかったのにな。

62 :NAME IS NULL:2009/04/26(日) 06:42:37 ID:???
どっちかというとMySQL飼い殺しor値上げにより
PostgreSQLキター じゃないの?
すくなくともうちの会社はそう。

63 :NAME IS NULL:2009/04/26(日) 08:29:57 ID:FjN1BGTg
>>62
買収しようと思っていたコンペジターだから、これまでと同じ
というのはありえん気がする
free系使えるなら、Postgresな人だから、自分にはあまり関係ないが

64 :MySQLの父:2009/04/26(日) 13:05:30 ID:???
暇なんでMySQLみたいだけど嫌Oracle民向きのRDBソフトつーのを作ってみるわ。
もちろんGPL2ライセンスな。少しまちなー。

65 :NAME IS NULL:2009/04/26(日) 18:22:44 ID:???
ようするに象はイルカに負けたって事だろ?

66 :NAME IS NULL:2009/04/26(日) 21:28:00 ID:???
ぶっちゃけポスグレの利点が分からないよな?

67 :NAME IS NULL:2009/04/27(月) 00:13:56 ID:???
あつかましいのですが、どなたかツリー構造のサンプル作っていただけませんか?
親IDと子IDをどのように扱えばいいのか・・・
あぁ混乱します

68 :NAME IS NULL:2009/04/27(月) 00:32:32 ID:???
ぐぐれば星の数ほど出てくるだろ

69 :NAME IS NULL:2009/04/27(月) 00:54:30 ID:+QFX8mPI
BLOBのfieldにバイナリを入れた場合エラーになる原因として
●文字コードの違い
●データ量が大きすぎる
以外で何か考えられますか?
いつも決まって特定のファイルが入らないのですが、文字コードは合わせてるしデータ量も少ないのですが。

70 :NAME IS NULL:2009/04/27(月) 02:49:26 ID:???
●エラー文を読む

71 :NAME IS NULL:2009/04/27(月) 06:31:00 ID:4KD78JzF
>>64
後のSQL64の開発者ですねわかります

72 :NAME IS NULL:2009/04/27(月) 07:50:04 ID:9YyqFg03
>>67
MySQLでWith〜 が使えるか探してみたら?
#ぱっとみ、なさなそうな感じだけど>マニュアル確認してくれいw
VBでリカーシブなコード書いて出したことはあるけど遅い(SQLのみに比べて)
ADO.NET使えるなら、DATAtableにつっこんで、リカーシブで探せば早いかな
#元データでかいと、ある意味嫌だけどw
joinで書いてるのは、階層数決め打ちだから案件によりけりだと思うよ
自分の場合は使えなかった

73 :NAME IS NULL:2009/04/27(月) 08:17:07 ID:???
ライセンス形態はPostgresがいい

74 :NAME IS NULL:2009/04/27(月) 10:01:04 ID:+QFX8mPI
いつからsunはOracleになるの?今年度中?

75 :NAME IS NULL:2009/04/27(月) 16:07:51 ID:???
InnoDBのレコード累計をカウントするのを速くする改善をOracleスタッフに望む(切実)

76 :NAME IS NULL:2009/04/27(月) 18:09:26 ID:???
そんなタダ働きするわけねーだろ
するとしても有料版だけだ

77 :NAME IS NULL:2009/04/27(月) 21:07:38 ID:???
じゃあもうMySQLの進化は止まるってこと?

78 :NAME IS NULL:2009/04/27(月) 21:09:04 ID:???
オラクルのサイトのラインナップ (歴史博物館) に飾られて…

79 :NAME IS NULL:2009/04/27(月) 22:29:08 ID:???
INSERTとDELETEにトリガでも仕掛けたらいいんじゃないの

80 :NAME IS NULL:2009/04/27(月) 22:47:33 ID:Up4sYX/B
1000万件くらいのレコードの入ってる簡単なデータベースがあって、
メンバID(Int)、メンバデータ1(double)、メンバデータ1(double)、メンバデータ2(double)、メンバデータ3(double)
というスキーマになってます。メンバIDをキーにして、
SELECT * FROM *** WHERE メンバID=12345;
みたいな処理をよくやるんですが、INDEXを作っても作らなくても所要時間が差がありません。
(2〜3秒くらい)
ここからもっと処理を速めようとすると、どうすればよいですか?



81 :NAME IS NULL:2009/04/27(月) 23:02:50 ID:9YyqFg03
indexがきくのは、対象が5%位っていわれてなかったっけ?
1件だけだと、テーブルスキャンになってるんじゃないかなと・・・
#実行計画見てみたら mysql explain ぐぐれば見つかる

82 :NAME IS NULL:2009/04/27(月) 23:12:01 ID:???
>>80
IDっていうくらいだから当然ユニークだよね?
あと、NOT NULL ならすこーし速くなる
あとはexplainの結果次第かな

83 :NAME IS NULL:2009/04/28(火) 00:23:48 ID:aHnBfSXl
>>81-82
ありがとうです。
Index張ってExplainしてみました。
mysql> select * from shain_master where Code=8324;
<データ出力。省略>
2281 rows in set (2.65 sec)

mysql> explain select * from shain_master where Code=8324;
+----+-------------+--------------+------+---------------+------+---------+------+---------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+--------------+------+---------------+------+---------+------+---------+-------------+
| 1 | SIMPLE | shain_master | ALL | NULL | NULL | NULL | NULL | 8222579 | Using where |
+----+-------------+--------------+------+---------------+------+---------+------+---------+-------------+
1 row in set (0.00 sec)


mysql> create index Code_Index on shain_master (Code);
Query OK, 8222579 rows affected (3 min 1.96 sec)
Records: 8222579 Duplicates: 0 Warnings: 0

mysql> explain select * from shain_master where Code=8324;
+----+-------------+--------------+------+---------------+------+---------+------+---------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+--------------+------+---------------+------+---------+------+---------+-------------+
| 1 | SIMPLE | shain_master | ALL | Code_Index | NULL | NULL | NULL | 8222579 | Using where |
+----+-------------+--------------+------+---------------+------+---------+------+---------+-------------+
1 row in set (0.00 sec)

mysql> select * from shain_master where Code=8324;
<データ出力。省略>
2281 rows in set (2.47 sec)

結局2.65秒から2.47秒になったのですが、(7%ほど速くなった)
これ以上はできないと思いますか?

Code(メンバIDのことです)はユニークです(プライマリキーになってます)
NOT NULLについては、プライマリキーになってるなら、NOT NULLですよね?
アドバイス等もらえたら有難いです。
よろしくお願いします。


84 :NAME IS NULL:2009/04/28(火) 01:09:06 ID:aHnBfSXl
すいません、Codeはユニークではありませんでした。
Codeとあと2つの数字をあわせて、ようやくプライマリーキーでした。
(なので、プライマリーキーは3個)
複合キーで試してみます。
失礼しました。


85 :NAME IS NULL:2009/04/28(火) 01:47:12 ID:aHnBfSXl
3個の複合キーを張っても、単純な先のSelectはほとんど時間同じだったです。
ただ、サブクエリを含むSQLは速くなった。
3分まっても帰ってこなかったSQLが、1分以内で帰ってきたよ。

DBはデータのメンテが楽だから使ってるんだけど、SQLをどう書き換えたら性能が
どうかわるのか分かりにくい。

86 :NAME IS NULL:2009/04/28(火) 05:34:52 ID:???
>>83 は何も改善されてないね。
analyze table shain_master;
をしてもう一度試してみて。

それでだめなら以下のようにINDEXを強制。
select * from shain_master force index (Code_Index);

あと >>85 のEXPLAIN結果と、
show create table shain_master\G
をみせてほしい

87 :NAME IS NULL:2009/04/28(火) 21:17:53 ID:v5jCnHuN
ロックしてdumpしてる時はDBの更新ってできるのですか?
サーバーを止めずに50GB位をdumpしたいのですが。

88 :NAME IS NULL:2009/04/28(火) 22:02:41 ID:???
ZFSのsnapshotを使ったら良いんじゃないの

89 :NAME IS NULL:2009/04/28(火) 22:21:24 ID:???
スナップショットだけで実現できるわけないだろw
スナップショットは、コピーコマンドの代替に過ぎない。
DB側がきちんとオンラインバックアップの準備をしないと。


90 :NAME IS NULL:2009/04/28(火) 22:24:41 ID:ZrsNSBAo
>>87
ロックしてるのに、どうして更新できるのかと・・・・

91 :NAME IS NULL:2009/04/29(水) 05:49:58 ID:???
>>89
ファイルのスナップショットがとれても、メモリのスナップショットが取れる
わけではないからねぇ。

VMwareでメモリイメージをファイル化するようになっていて、それがZFSの上で
動いている場合なら話は別だけど。

92 :NAME IS NULL:2009/04/29(水) 10:02:54 ID:???
ちょっとちょっと

93 :NAME IS NULL:2009/04/29(水) 12:30:00 ID:???
アクセスが多いサーバーの場合MySQL一本でいくのと
他のDBソフトも入れてそれぞれで分担してさばくのとどっちが効率いい?

94 :NAME IS NULL:2009/04/29(水) 13:54:40 ID:???
MySQLをたくさんいれればいいんじゃないの

95 :NAME IS NULL:2009/04/29(水) 14:50:05 ID:???
>>89
>スナップショットは、コピーコマンドの代替に過ぎない。

厳密には違うよ。ZFSのスナップショットはアトミックに
データを複製出来るから、ストレージエンジンがデータ
ファイルの一貫性を保って書き込みしていれば問題無い。
これは>>91についても同じ。

96 :NAME IS NULL:2009/04/29(水) 14:51:18 ID:???
マイエスキューエルなお兄さん達に質問があります。

MAX ALLOWED packetをPHPのスクリプト上で変更した場合の有効期限っていつまでですか?

大きなバイナリを入れる前にMAX ALLOWED packetをクエリを送り大きくしてるのですが
入れた後に再度小さく戻す必要があるのでしょうか?

97 :NAME IS NULL:2009/04/29(水) 15:00:53 ID:???
>>95
スナップショット?ZFSってそんなこと出来るの

98 :NAME IS NULL:2009/04/29(水) 16:16:48 ID:???
出来るよ。実際には即座にデータが複製される訳ではなく、
COWでそう見せているだけだけど、実用上は同じことです。

99 :NAME IS NULL:2009/04/29(水) 17:54:05 ID:goBvMPts
すみません、お聞きしたいことがあります。
カタカナひらがなは同一視するけど、濁点と普通の文字は同一視しない照合順序って
ありませんか?

現在utf8_general_ciでひらがなとカタカナを同一視させることはできたのですが、
濁点と普通の文字が同一視されて困っています。(「が」=「か」等)

100 :NAME IS NULL:2009/04/29(水) 18:21:02 ID:???
↑少し間違えました。
utf8_general_ci→utf8_unicode_ci


101 :NAME IS NULL:2009/04/29(水) 19:11:00 ID:???
MySQLのインデックスについて質問させてください。

例として「name」「type」という2つのカラムにインデックスを張る場合、

(name, type)
のように2つセットでインデックスを張る場合と、

(name)
(type)

と2つに分けてインデックスを張る場合と、パフォーマンスに差は出てくるのでしょうか。
ちなみに検索は、「name」のみ、または「name」「type」2つセット、の2通りで検索します。

もしパフォーマンスがかわらないのであれば、今後仕様が変わっても「type」のみでも検索ができるので、
後者を選択したほうがよいと思っています。

よろしくお願いします。

102 :NAME IS NULL:2009/04/29(水) 20:23:50 ID:???
>>95
はぁ?
データベースが論理的に一貫性保っていることと、データファイルが一貫性持っていることは別だろが。
そこになんらかの調停役をするものが必要だろ。
それについては、各DBによって仕様がまちまちだから、ZFS側だけで一貫性が保てるなんてことはあり得ない。


103 :NAME IS NULL:2009/04/29(水) 20:37:50 ID:???
>>102
一貫性じゃなくて整合性だったな。クラッシュリカバリ出来る
ストレージエンジンなら>>95の通りだよ。例えば InnoDB を
使っているなら ZFS の恩恵をフルに享受出来る。Maria や
Falcon みたいな最近のストレージエンジンでも同じだと思う。

104 :NAME IS NULL:2009/04/29(水) 21:09:28 ID:720E2UER
>>101
explain で実行計画確認した方がいいと思うよ
http://sdc.sun.co.jp/news/2009/04/feature01.html とか
まぁ mysql マルチカラムインデックス でさがしてみそ

105 :NAME IS NULL:2009/04/29(水) 21:11:44 ID:???
マルチカラムインデックスだと、(a,b,c)にインデックス作ったら
bとcはインデックスにならないんだよね。

106 :NAME IS NULL:2009/04/30(木) 17:00:32 ID:???
>>101
それぞれのシーンで有効なインデックスは、
「name」のみ・・・(name)または(name, type)
「name」「type」2つセット・・・(name, type)
「type」のみ・・・(type)

全てに対応したいなら、
(name, type)と(type)の2つのインデックスを付与。

107 :NAME IS NULL:2009/04/30(木) 22:54:00 ID:???
Oracle検定があるんだからMySQL検定も作ってほしい

108 :NAME IS NULL:2009/04/30(木) 23:23:58 ID:???
>>107
ありますよ。ちなみに自分も今度受けて来る予定です。

http://www-jp.mysql.com/certification/

109 :NAME IS NULL:2009/05/01(金) 14:11:46 ID:???
>>106
最近はインデックスマージで、同時に複数のインデックスを使用可能。

110 :sage:2009/05/01(金) 14:27:19 ID:8dcd/ec9
>>109

インデックスマージ便利ですね。

「name」「type」2つセット・・・(name, type)
「name」「type」2つセット・・・(type) (name)

は速度差はあるんだろうか?

111 :NAME IS NULL:2009/05/01(金) 15:57:15 ID:???
インデックスマージは複合インデックスよりは遅いよ

112 :110:2009/05/01(金) 16:10:08 ID:???
>>111

おぉ、ありがとうございます。
じゃあ
 「name」のみ・「type」のみ・「name」「type」2つセット
のスピードアップには
 (type) (name) (name, type)
の3つインデックス用意するのがいいんですね。

名前にsageしてた Orz

113 :NAME IS NULL:2009/05/01(金) 16:24:13 ID:???
(name, type)があれば
(name)はいらないよ

114 :NAME IS NULL:2009/05/02(土) 01:10:43 ID:???
質問させて下さい

sqlファイルをsshを使ってphpmyadminへインポートしたいのですが、
どのようにコマンドを書いてあげればいいでしょうか?
アドバイスをお願いします

115 :NAME IS NULL:2009/05/02(土) 05:36:23 ID:???
消えろ

116 :NAME IS NULL:2009/05/02(土) 11:47:30 ID:sAcX2g2P
MYSQLに画像を1000枚位入れてブラウザに一覧表示にして
ダウンロードソフトのirvineで一気に1000枚落とそうとしたら
MYSQLが不安定になり接続できなくなりました

一応MYSQLは動いていまして再起動させたら元に戻りました。
こういう不具合は設定でなんとかできますか?
ちなみにローカルのPC内でのテストです。

117 :NAME IS NULL:2009/05/02(土) 14:04:33 ID:BrjlIbgF
そのあたりは、チューニング本見ながら調べないといかんのじゃない?
#unix系なら、iostat,memstat,netstat とか見ながら、ボトルネック探すんだろうけどね
詳しい説明とかどう対処するかはパフォチュー本以外で説明してるのって中々ない気がする

118 :NAME IS NULL:2009/05/02(土) 15:10:05 ID:1rG19lPd
超初心者的な質問で恐縮ですが、

MySQLには、Oracleのような表領域とか容量計算とかはあるのでしょうか?
あと、主キーを2項目設定しようとすると『ERROR 1068 (42000) Multiple primary key defined』と出るのですが、どうしたらよいのでしょうか?



119 :NAME IS NULL:2009/05/03(日) 09:15:04 ID:???
Oracleと同じ仕組みはない
MyISAMなら1テーブル1ファイル
InnoDBなら全部まとめて1ファイルか、1テーブル1ファイル

主キーは1個しかないから主キーなんだぞ
これはOracleでも同じ

120 :NAME IS NULL:2009/05/03(日) 11:12:44 ID:???
ファイルごとに別パーティションに置いたりすれば、
テーブル領域はかなり自由。

121 :NAME IS NULL:2009/05/03(日) 13:32:27 ID:???
I/Oの最適化まで考えると、「全部まとめて1ファイル」「1テーブル1ファイル」のどっちも難しくなるな。
もっとも、ストレージまで含めると、表領域概念があっても複雑になるけど。


122 :NAME IS NULL:2009/05/03(日) 18:41:52 ID:???
>>114
460 名前:名無しさん@お腹いっぱい。[sage] 投稿日:2009/04/30(木) 00:27:39
mysql [ENT]
で、mysqlのコンソールが実行できることをまず確認
できないならmysqlが入ってない

できるのにそのエラーが出るなら、<以降のファイルの指定

123 :NAME IS NULL:2009/05/03(日) 18:47:24 ID:IRQUoHF0
もうMySQLは終りだから別のDB勉強したほうがいいよ

124 :NAME IS NULL:2009/05/04(月) 05:40:01 ID:???
max_allowed_packetについて質問です。

今、ローカルの環境で、画像等のバイナリを格納するDBを組もうとしているのですが、
一定以上のサイズ(1MB以上)のデータをINSERTする時に、例によって
Got a packet bigger than 'max_allowed_packet' bytes
のエラーが出力されて、格納出来ません。

そこで、max_allowed_packetの値を大きくするのですが、ちょっとよく分からない現象に遭遇してます。

まず接続して、show variables like 'max_a%'で読むとデフォルトの1MB、
set (session) max_allowed_packet = 4194304 で4MBにセットして、show variables
でちゃんと4MBになっているのを確認し、バイナリのINSERTをかけても、
やはり’Got a packet・・’のエラーが出て、格納できず。(これは、php perlのスクリプト中からやってます。)

次に、接続中に set global max_allow・・・で同様に4MBにセット、show variables では1MBのまま(これは仕様どおり)、
一旦接続断してから再接続で、INSERTをかけるとINSERT成功。その後はGLOBAL設定が効いているので問題なく成功。

125 :つづきです:2009/05/04(月) 05:41:14 ID:???
その次は、GLOBALが4MBの状態時に、スクリプト中で set session max_allow・・・=1048576(1MB) にセット、
show variablesで1MBを確認後、1MB以上の画像をINSERT実行で、成功してしまいます。

公式のマニュアルには、'globalは次回接続以後、sessionはその時点から、同じ変数に別の値をセットするか接続断まで'
と書いてありますが、globalのほうはその通りなんですが、sessionでmax_allowed_packetを変更しても、
その時点で効いてないようです。

今はローカル環境で試していますので、my.cnf(my.ini)での設定や、rootでグローバル権限を持っているので
なんとかなるのですが、じつはこれを外部のレンサバで動かすことを考えているので、
my.cnfやグローバル権限がない状態で、この変更は不可能なのでしょうか?

ちなみに試した環境は、
WinXpsp3 + 5.0.78 5.0.79
Linux/CentOS + 5.0.79 5.0.80
ファイルサイズ約1.5MBの画像ファイルで、いずれも同様の結果となります。

126 :追記です:2009/05/04(月) 07:51:55 ID:???
その後、色々ググったりPHPのマニュアル漁ったりしたところ、
mysqli関数でmax_allowed_packet越えのINSERTが出来るようになりました。
しかし、残念ながら稼動予定のレンサバのphpは、mysqli関数が未サポートのようで使用出来ません。
(phpinfoでも出てこないし、実際connectだけ書いたスクリプトもエラーになってしまいます)

うーん、なんとかやる方法はないものか・・・。

127 :NAME IS NULL:2009/05/04(月) 08:27:28 ID:7kTTuHSt
なんで企業はOracleを好むの?
高いのに。社長さんは自分でできないからサポートがあるOracleにしてるのかな?
ってゆうかそれバカじゃん。無知。IT無知。
データベースの操作くらい今時チンパンジーでもできるよね。
チンパンジー以下だね。間違いなく包茎。
Oracle利用者は包茎。
短小包茎。

そんなバカ共と、何でも自分で解決する努力家のMYSQLユーザーが同じに扱われたくないよ。

128 :NAME IS NULL:2009/05/04(月) 10:33:09 ID:???
いちど72CPU144コアのUNIXサーバでMySQL動かしてみたらいいよ
このへんでまともに動くのはOracleとDB2だけ

129 :NAME IS NULL:2009/05/04(月) 11:29:01 ID:L8iXHRu1
適材適所でいいんじゃね?
他を否定する奴って、実務経験ない奴なんだろうなぁ・・・
といつも思う
>>128
自分には縁がなさげな規模だw

130 :NAME IS NULL:2009/05/04(月) 13:51:26 ID:???
>>128
PostgreSQLは試した?
8.1 8.2 でかなりマルチCPUへの対応を強化してるはずだけど。
12CPU以上でも性能伸びるってさ。

131 :NAME IS NULL:2009/05/04(月) 18:11:28 ID:???
>そんなバカ共と、何でも自分で解決する努力家のMYSQLユーザーが同じに扱われたくないよ。

ぶっちゃけ、SybaseとかDB2とかHiRDBの方がMySQLより情報が少なくて
エンジニアがスゲー努力していると思うけど。

132 :124ですが:2009/05/05(火) 01:05:32 ID:???
さらにその後色々調べて見ましたが、どうやらmax_allowed_packetを
sessionレベルで変更することは無理なようだと結論付けることにしました。
このあたりを参考にしました。
http://bugs.mysql.com/bug.php?id=22891
http://bugs.mysql.com/bug.php?id=14180

ちなみに、http://d.hatena.ne.jp/mir/20060201
ここによると、大きなサイズのクエリでも、max_allowed_packet以下のサイズに分割し、
何度も送信を繰り返すような実装があれば可能なようですが、
ここにある C/J や C APIを直接叩くような自前のコード以外には、
今のところphpのmysqli(拡張版のほう)関数以外には見つけられませんでした。

>>126での通り、その鯖ではmysqli関数が利用できませんし、
perl-DBIのほうにはそれらしいことが出来ない(?)ようなので、
現状、システムのmy.cnfの編集や、root等グローバル(スーパー)権限を持たない
ユーザーしか使えない環境では、サイズ制限を1MBまでにすることにします。

なにか他の方策や、「こうやれば出来る」みたいなことをご存知の方がおられましたら、
是非ともお教え頂きたいと思います。

133 :NAME IS NULL:2009/05/05(火) 01:27:34 ID:???
一括で入れられないなら、テーブル構成変えて分割で入れたら?

134 :NAME IS NULL:2009/05/05(火) 01:42:40 ID:VyNefM6q
DBの話じゃなくてシステムとして考えた場合、
画像データをDBにつっこむ意味ってあるの?

画像データはファイルのまま適当なディレクトリにつっこんで、
ファイル名と保管ディレクトリだけDBにINSERTしておくのが合理的な気がするが。


135 :132:2009/05/05(火) 03:35:33 ID:???
ご意見ありがとうございます。

実は、あまり言いたくはなかったのですが、ある知人からの紹介で依頼を受けることになってしまって、
(正規のWeb作成業者等より)格安で請けることになったものでした。
私自身は、3,4年前からテキストベースの検索エンジン的なサイト等をいくつか運営しているのですが、
実はバイナリ(BLOB)型のデータを扱うのは今回が初めてでした。

その依頼者さんの希望として、
・アップローダ的な機能がほしい
・そのバイナリをDBに格納したい
・その閲覧やダウンの可否を制御したい
・Web領域にはバイナリを直接置きたくない
・依頼者さんが借りているレン鯖上で(しかもいくつかの複数の業者で同様に)動作するようにしたい
のような要望がありまして、とりあえずそのように作成しているところです。

特に閲覧制御については、会員登録やパスワードの設定等もDBの別カラムに格納し、
それをもって制御したいとのことです。あと領域に関しては、Web領域とDB領域が別になってるようなので、
Web領域を食わなくてもいいというような見地もあるようです。

私自身は、もし自前で運営するなら、>>134さんのおっしゃるようなシステム構成にすると思います。
前にそのようなことを提案したんですが、どうもDB内に格納することにこだわっているようです。
あと、恐らくはその依頼者さんが、管理の面で、連番になったidとファイル名などの照合などが面倒なのと、
削除する時(Web領域にはFTPで接続するようですが)間違って消したり、上書きされたりすることを
懸念されているのでは、と邪推しております。

>>133
!、確かにその手はありかもしれません。(視界が狭くなってました)
その依頼者さんが、どうしてももっと大きいサイズがほしいと希望するなら、
その方法でやってみます。どうもありがとうございます。

136 :NAME IS NULL:2009/05/05(火) 07:13:32 ID:???
BLOB型をマジで使ったことないけど、たとえばセッションが10000個くらいあって
ダウンするファイルが10MBだった場合、100GBくらいメモリ消費するイメージがあるんだけど。

137 :NAME IS NULL:2009/05/05(火) 12:17:38 ID:VyNefM6q
DBに画像つっこむのは絶対アホだと思うが、
無理にやるならmy.cnfの設定変えればいいんじゃね?
SETでちまちまやるより。
まさかmy.cnfも変更できないなんて話はないよな

138 :NAME IS NULL:2009/05/05(火) 23:49:19 ID:???
>>136
現実的に考えて、135が作るようなコンテンツでセッションが
一万いくなんてありえると思ってるの?
100すらありえないだろう。

139 :NAME IS NULL:2009/05/06(水) 15:41:53 ID:???
>>129-131
凄く勉強になりました

140 :NAME IS NULL:2009/05/06(水) 17:04:58 ID:???
買収で盛り上がってきたのに再び過疎になったね

141 :NAME IS NULL:2009/05/06(水) 17:19:25 ID:???
何でデータベースは検索が速いのかが疑問なんですが
仕組みについてやさしく書かれているサイトは無いでしょうか?

142 :NAME IS NULL:2009/05/06(水) 17:28:14 ID:???
>>141

まずはB-treeについて勉強したらいいよ。


143 :NAME IS NULL:2009/05/06(水) 17:37:32 ID:dE2L58df
ちょっと古いけど「RDBMS解剖学」を立ち読みしてみる とか

144 :NAME IS NULL:2009/05/07(木) 15:23:38 ID:DlYqT5Bu
innoDBよりISAMの方が検索速いってマジ?

145 :NAME IS NULL:2009/05/07(木) 16:40:58 ID:???
検索だけならMyISAMは早い。
GoogleがMyISAMの改造版を使ってるという記事を読んだことがあるな。

146 :NAME IS NULL:2009/05/07(木) 16:44:48 ID:Olr/5NnF
ところでさMySQLはオプソなんだから、
クローンプロジェクトで管理していってもかまわんのじゃない?
それともフリーなだけでオープンじゃなかったわけ。

147 :NAME IS NULL:2009/05/07(木) 17:05:29 ID:3pzQ/ytL
forkはできるが、信頼できる組織か個人がやらないとダメだろう。
そこらの無名の人間がforkしても誰も使わないだろ。

MySQL創始者のmontyは会社はじめてるし、彼がやるならOKと思うが、innodbがOracleの物だからMyISAMしかダメなのはつらいかもな。もちろんforkしたらinnodbが使えないかどうかは知らんが
ユーザーからすればあまりに危険なんでforkしたやつではinnodb使う奴はそうそういないだろう。

Falconはどうもダメっぽい。っていうかinnodbのかわりになるほど完成度があがるとは思えん。

ま、なんだ
もともとinnodbがOracleに握られた段階でMySQLはキンタマつかまれてたわけで、その前のOracleによるMySQL買収交渉の時点でOracleの対MySQL戦略は決まってたはずだ。
つまりMySQLに先はない。forkに期待するのもいいが、別のDB使う検討をはじめるのが普通のエンジニアのリスク管理だと思うがな。


148 :NAME IS NULL:2009/05/07(木) 21:09:46 ID:???
>>147
InnoDB も GPL だから、使いつづけることはできる。

149 :NAME IS NULL:2009/05/07(木) 23:48:45 ID:3pzQ/ytL
>>148
それは知ってるが、forkしてOracleと対立しながらinnodb使い続けるのってリスキーだろ、て話し



150 :NAME IS NULL:2009/05/07(木) 23:57:52 ID:???
以前まで動いていた、MySQLが動かなくなってしまったのですが、どうにも
解決しないので、どうかお力を貸してください。

OS:CentOS5
MySQL5

MySQLを開始しようとするとエラーがでてしまいます。

エラー内容:
mysqld failed. The error was:MySQL データベースを初期化中:
Neither host '自宅サーバーのホスト名' nor 'localhost' could be looked up with
/usr/bin/resolveip
Please configure the 'hostname' command to return a correct hostname.
if you want to solve this at a later stage , restart this script with the --force option
[失敗]

どうか御教示ください。お願いします。


151 :NAME IS NULL:2009/05/08(金) 00:01:37 ID:???
エラーメッセージも読まないのか。


152 :NAME IS NULL:2009/05/08(金) 10:06:15 ID:???
>>149
それが実際に問題になるなら、Innoもフォークすることになる。
GPLの最大の特徴は、誰も排他的権利を持ち得ないことなんだから。

153 :NAME IS NULL:2009/05/08(金) 14:38:43 ID:???
でも、結局はInnoDBからforkせずにFalconをスクラッチから書いたわけだしなぁ。

154 :NAME IS NULL:2009/05/08(金) 21:15:35 ID:23A0Mz+F
InnoDBってなんて読むの?
イノディービー?
もう一つはマイイザム?

155 :NAME IS NULL:2009/05/08(金) 21:16:23 ID:???
好きなように読めばw

156 :NAME IS NULL:2009/05/08(金) 21:40:31 ID:???
MySQLにしても、InnoDBにしても、厳密にはGPLとはちょっと違うじゃん
デュアルライセンスなんだし、Oracleなり、MySQL ABなりに御布施すればGPL免除でしょ?
MySQL Enterpriseなんて、登場した時から既にGPL制限の無いアプリだし
これからはMySQL Community ServerとMySQL Enterpriseの差が、
どんどん開いてゆくだろう事は想像に難くない

でも一番の問題は、昔はGPL汚染に躊躇してMySQLが採用されない事例を回避する為に
「MySQL ABに寄付してくれればGPL回避出来ますよ」的な意味合いのデュアルライセンスだったのに
今では、というかMySQL Enterpriseが出た辺りからだんだんと、「おまえ(Community Server)のものは
俺(MySQL Enterprise)のもの、俺のものは俺のもの」的なジャイアニズム全開なデュアルライセンス
に意味が変わったことだね

とはいえ>>147も触れてるとおり、MySQLは創始者自身がforkしたし、
InnoDBも去年forkしたExtraDBってのがあるにはある

先行きは明るくないとは思うけど、MySQLを捨てるのはまだ早いと思うよ

157 :NAME IS NULL:2009/05/08(金) 21:48:58 ID:???
2chのサーバー会社にウイルス
http://tsushima.2ch.net/test/read.cgi/news/1241785943/

2009/05/08 20:23 maido3.com ホームページについてご報告いたします

maido3.com ホームページについてご報告いたします。

2009年5月7日、お客様のご指摘により http://www.maido3.com/
にアクセスするとセキュリティソフトによりサイトの閲覧が
遮断されるとのご指摘を頂きました。
ありがとうございました。

確認の結果、http://www.maido3.com/ 以下のHTMLファイルに
不正なJavaスクリプトが埋め込まれている事が確認されましたので、
急きょページの表示を停止しました。

その後の調査の結果、HTMLファイルが書き換えられたのは、
2009年5月4日午後3時30分ごろと思われます。

http://www.maido3.com/ にアクセスされたお客様は、
ご利用のパソコンの安全をご確認ください。

現在弊社では、新しいサーバーに maido3.com を移転しており、
新しいHTMLファイルにて順次ページの表示を再開しています。

全サービスのチェックおよびサービスの再開は2009年5月11日午後6時の予定です。
新しい情報が入りましたら改めてご連絡いたします。

http://www.maido3.cc/server/release/2009/200905082023.html

158 :NAME IS NULL:2009/05/09(土) 01:08:49 ID:???
>>154
イノデービー
マイアイサム

159 :NAME IS NULL:2009/05/10(日) 01:13:28 ID:???
>>154
いのちゃん
あいさむ

160 :NAME IS NULL:2009/05/10(日) 13:05:23 ID:???
データはインサートできても
チンコはインサートできないんだなぁ

みつを

161 :NAME IS NULL:2009/05/11(月) 01:05:08 ID:HP0cpXb+
バックアップについてちょっと聞きたいんだけどここでいいのかな?
サーバーAとBがあって、サーバーA(XP)は今まで使っていたサーバーで
サーバーB(Fedora)はバックアップ専用で立てたサーバー
サーバーAからSELECT * INTO OUTFILEしてデータを取り出して
サーバーBにSELECT * INTO OUTFILEするとバックアップ完了であってる?

162 :NAME IS NULL:2009/05/11(月) 03:01:24 ID:???
no

163 :NAME IS NULL:2009/05/11(月) 11:11:14 ID:???
>>161
レプリケーション使え。

164 :NAME IS NULL:2009/05/11(月) 14:29:49 ID:GmKXaVZf
ハッカーを刺激してフリー版のMYSQLが一段と強くなると思う
gpg、ssl、appacheなどソフトはフリーのほうが優秀だよ。
それは当然であって、社内の限られた研究者が世界中のハッカーに
勝てるわけがないのね。数が違うから。

165 :NAME IS NULL:2009/05/11(月) 16:28:44 ID:7jKYx7be
>>164
可能性としてはあるかもしれないけど、まぁないと思うよ
興味あることの実装と、それを安定して使えるようにする
というのは別物だし。
オプソの弱点のはそこだ ともいわれているしね
コアだった開発者がどこまで集まるかはじゃないかな
#アーキテクト含めて


166 :NAME IS NULL:2009/05/11(月) 17:57:18 ID:???
>>164
そうだな、そうであればうれしいな。
でも、>>165の意見に賛同する部分が多いよ。

我侭なユーザーに怒らずに頑張れるのが金なんだよな。
MySQLも皆の為に頑張るよっていうすげぇ素晴らしい人
ばかりだったらSunすら買えなかっただろう。

2年くらい経ったらNetscape並の黒歴史入りかもな。

167 :NAME IS NULL:2009/05/11(月) 22:37:42 ID:sWkB5gaT
>2年くらい経ったらNetscape並の黒歴史入りかもな。
Netscapeの血筋がthunderbirdとfirefoxをひっさげて
ものすごい復活劇になってるね。


168 :NAME IS NULL:2009/05/11(月) 23:07:13 ID:???
>>167
そうなったらいいね。
firefox並に復活してきたらいいなぁ。
でも、そん時はMySQLって名ではないのだなぁ。

サーベルタイガーあたりの名前で復活してくれ。

169 :NAME IS NULL:2009/05/13(水) 02:02:16 ID:LXnOWi0q
久々に仕事でLAMPのシステムを納めることになったんだが、
ライセンスはMySQL Enterpriseてのを買わなきゃいかんのか。
これって年毎に買わなければいけない?
教えてエロイ人。


170 :NAME IS NULL:2009/05/13(水) 02:24:57 ID:???
なくてもいい

171 :NAME IS NULL:2009/05/13(水) 11:57:14 ID:???
>>169
GPLにして再配布可能にしちまえ

172 :169:2009/05/13(水) 12:14:37 ID:oQtcNrJ7
>>170
そのへん詳しく書かれているソースとかあったら教えてもらえるとありがたいです。
ぐぐっていろんなとこ見ても、イマイチよくわからない・・・

>>171
仕事なのでムリっすねぇ。

173 :NAME IS NULL:2009/05/13(水) 15:32:31 ID:???
仕事ならoracleでも使っとけ

174 :NAME IS NULL:2009/05/13(水) 15:46:12 ID:???
ライセンスに悩むのならBSDLなPostgreSQLにすべきだろうな

175 :NAME IS NULL:2009/05/13(水) 19:50:01 ID:raTYNme4
質問させてください。
複合インデックスを作成する際のキーの順番って関係ありますか?
またその場合はカーディナリティの高い順にするべきでしょうか?
よろしくお願いします

176 :175:2009/05/13(水) 21:13:27 ID:???
もしかしてスレ違いでしたか?
質疑高等スレで出直してきます。

177 :NAME IS NULL:2009/05/14(木) 03:43:58 ID:0wBwjegy
MySQLでCREATE TABLEする際に、CONSTRAINT CHECK(条件);って効かないのですか?
主キー制約と外部キー制約は効いているのですが。

178 :NAME IS NULL:2009/05/14(木) 11:51:18 ID:IkGVegOI
>>177
バージョンは?

って、MySQLはCHECK実装してないけどなw

こんな変なDB使ってるやつは馬鹿だぞ、別のDBにしとけ

179 :NAME IS NULL:2009/05/14(木) 13:47:39 ID:???
外部キーよりチェックの方が使う機会多いと思うのにな。

180 :NAME IS NULL:2009/05/14(木) 14:05:21 ID:pUvkUN/J
早くこのDB無くならないかなぁ


181 :NAME IS NULL:2009/05/14(木) 22:46:20 ID:IkGVegOI
>>179
その外部キーだってInnoDBだけだからな
MyISAMでは使えない



182 :NAME IS NULL:2009/05/14(木) 23:48:28 ID:???
>>180

それをわざわざこのスレに言いに来る意味があんのか?
俺としては、買収前にOracle社そのものがなくなって欲しかったわ。
Oracleを盲信してるやつらがうざい。

183 :NAME IS NULL:2009/05/15(金) 03:04:14 ID:???
SUNの株主がOracleへの売り渡しに抵抗しているみたいだから、
もしかしたらSunの買収話は消えるかもよ

MySQLだけOracleに譲渡とかなw

184 :NAME IS NULL:2009/05/15(金) 03:19:34 ID:???
>>182
hagedo

185 :NAME IS NULL:2009/05/15(金) 16:59:15 ID:???
MyISAM+fulltextインデックスを使用して全文検索を行っているのですが、
レコードの量が増えるにつれInsertがどんどん、遅くなっていきます。
ある程度は、覚悟していたのですが、あまりにも遅く…。
今後もレコードは増え続けるのですが、どう対応してよいのやら…。

ある程度のところで、新しい全く同じレイアウトのテーブルを
作成し、そのテーブルにデータを追加していき、selectするときは、
既存のテーブルと元のテーブルをunion?

しかし、テーブルを分けてしまうと、重複レコードが…。

通常、こういった場合、どのように対応するのでしょうか?
ご教授していただけないでしょうか。
よろしくお願いします。m(_ _)m

186 :NAME IS NULL:2009/05/16(土) 14:47:22 ID:???
http://www.atmarkit.co.jp/news/200905/14/mysql.html
よし、まだまだ大丈夫

187 :NAME IS NULL:2009/05/16(土) 15:28:04 ID:???
更新はときどきまとめて行うことにして
1) fulltextインデックス削除
2) INSERT
3) fulltextインデックス作成
とか?
いろいろ制限はついてしまうけど。

188 :NAME IS NULL:2009/05/16(土) 16:03:01 ID:???
単純に定期的に最適化してないってわけじゃなくて?

189 :NAME IS NULL:2009/05/16(土) 17:30:52 ID:qEI7Vk1N
>>186
Falconがどうなったか思い出せ


190 :NAME IS NULL:2009/05/16(土) 21:15:26 ID:zYBZo2FJ
>>189
firebirdの例もあるけどね
#使ったことはないけどw

191 :NAME IS NULL:2009/05/17(日) 00:32:30 ID:???
>>186

MySQLの思いつきみたいな機能追加と変更はまともな技術者のなせる技ではない。
MySQLはmontyしかforkできないが、montyの技術力じゃ維持しつづけるのは無理。
よって終了

192 :NAME IS NULL:2009/05/17(日) 08:33:41 ID:???
>>191
ばかだこいつwwww

193 :NAME IS NULL:2009/05/17(日) 12:57:48 ID:???
前半は同意

194 :NAME IS NULL:2009/05/17(日) 13:38:57 ID:???
10年くらい、今のバージョンのままでいいよ

195 :NAME IS NULL:2009/05/17(日) 14:22:37 ID:???
機能追加は無しで、バグフィックス程度はね。

196 :NAME IS NULL:2009/05/17(日) 15:49:44 ID:IAxxUei2
でもストアドは弱すぎない?
5.xの見てる感じだけど

197 :NAME IS NULL:2009/05/17(日) 16:43:23 ID:???
MySQLを生かすも殺すもOracleの思いのままになった時点でMySQLは終了だ。
Oracleには期待するな。OracleがMySQLを生かそうとするならそれはローエンドのユーザから金をむしり取る場合だけだ。
無料という意味でのフリーウエアとしてはMySQLは終わったんだ。

モンティがforkするMariaSQLはだめだ。マイナーバージョンアップですらゴタゴタする思いつき開発しかできない奴に、
ここまでひろまってしまったプロダクトの舵取りさせたら混乱するだけ。
しかし、モンティに逆らって別プロジェクト立ち上げる人間も、それについていく人間もいないだろう。
強いてあげればGoogleくらいか。GoogleSQLとしてforkすれば移行する人間も多いだろう。しかしGoogleがMySQLを使い続けるだろうが、
それをオープンにしてメンテしつづける意味はまったくない。よってGoogleSQLはない。

つまりMySQLは終わったんだ。


198 :NAME IS NULL:2009/05/17(日) 17:19:54 ID:IAxxUei2
>>197
IBMのwebsphereのfree版の方は買収した奴だと思った
他の流れるくらいならと、少しはメンテはあるかもしれんかなと

199 :NAME IS NULL:2009/05/17(日) 23:32:38 ID:2v0ewY/l
トリガを使ってテーブルの更新をWEB画面に反映させることは可能でしょうか

200 :NAME IS NULL:2009/05/18(月) 03:08:12 ID:???
>>199
トリガとWEBについて1から勉強しなおし

201 :NAME IS NULL:2009/05/18(月) 14:47:29 ID:???
>>197
>モンティがforkするMariaSQLはだめだ。マイナーバージョンアップですらゴタゴタする思いつき開発しかできない奴に、
>ここまでひろまってしまったプロダクトの舵取りさせたら混乱するだけ。
こういう思い込みなところが多いから、お前の言うことは説得力に欠ける

202 :NAME IS NULL:2009/05/18(月) 15:19:28 ID:???
>レコードの量が増えるにつれInsertがどんどん、遅くなっていきます。
インサートはオーバフローに一旦入るから遅いよ。
適当な件数でコミットすべし。
途中でしんだらバックアウトすべし、または手作業バックアウトすべし。


203 :NAME IS NULL:2009/05/19(火) 10:48:21 ID:???
CentOS5 の mysql 5.0.45 を利用してます。

他のサーバから、/var/lib/mysql 以下のデータベース実体ファイルをコピーして来ました。
mysqlで、コピーして来たデータベースを use するところまでは問題無いのですが、
適当な検索文を走らせると

 mysql> select * from hogehoge where no = 123123;
 ERROR 1017 (HY000): Can't find file: './hogehoge/aaa.frm' (errno: 13)

というエラーが出てしまいます。
パスの指定などを行わなければ行けないのでしょうか?

204 :NAME IS NULL:2009/05/19(火) 11:41:59 ID:???
203です。
mysqld_safe で起動すると読み込めますが、
service mysqld start から起動すると依然としてNGです。この差はなんなのでしょうか・・

パーミッションなどは問題無いようです。

205 :NAME IS NULL:2009/05/19(火) 11:43:39 ID:???
問題無いと思っているところが問題なんだろうな。

206 :NAME IS NULL:2009/05/19(火) 11:51:50 ID:xhLm6cZW
203です

コピーして来た物でないデータベースは、現在も問題無く認識できていて、
それと同じパーミッション・所有者としているので問題無いと思います。



207 :NAME IS NULL:2009/05/19(火) 12:39:29 ID:???
mysql> select * from hogehoge where no = 123123;
 ERROR 1017 (HY000): Can't find file: './hogehoge/aaa.frm' (errno: 13)

hogehogeデータベースなのかhogehogeテーブルなのかわからん
エラーメッセージはそのままかこう

208 :NAME IS NULL:2009/05/19(火) 13:08:05 ID:xhLm6cZW
紛らわしくて済みません。

 mysql> select * from hogehoge where no = 123123;
 ERROR 1017 (HY000): Can't find file: './test/aaa.frm' (errno: 13)

test : データベース  hogehoge : テーブル
です。

209 :NAME IS NULL:2009/05/19(火) 15:55:09 ID:???
 mysql> select * from hogehoge where no = 123123;
 ERROR 1017 (HY000): Can't find file: './test/hogehoge.frm' (errno: 13)

ですね・・すみません。

210 :NAME IS NULL:2009/05/19(火) 16:46:49 ID:???
my.iniを修正してサービスを再起動すると、エラーが出て起動できない
修正前のmy.iniに戻すとサービス起動できる

これは一体どういうことなんでしょう?
バージョンは5.1.34です

211 :NAME IS NULL:2009/05/19(火) 16:55:11 ID:???
はい、次。

212 :NAME IS NULL:2009/05/20(水) 01:56:07 ID:???
GPLのMySQLとPHPを使ってるんだけど、GPLだから何も問題ないよな。

213 :NAME IS NULL:2009/05/20(水) 18:29:03 ID:???
>>212
GPLとPHPライセンスは互換性がないから基本アウトだけど、
FOSS License Exceptionのおかげでセーフ。

ttp://nippondanji.blogspot.com/2009/05/foss-license-exception.html

214 :NAME IS NULL:2009/05/20(水) 23:55:36 ID:XwWNlez2
ちょっと相談に乗ってもらいたい。

WEBシステムでMySQL使ってて、
1日に1回、他システムからCSV形式でデータが送られてくる。
CSVは約10テーブル分。
WEBとは別のバックグラウンド処理で取り込んでる。
WEB側(PHP)からは、これらのテーブルに対する更新はない。
10テーブルのうち、delete&insertの全件入替えと、
replaceによる差分入れ替えが混在している。

こういう場合、テーブルのエンジンはMyISAMとInnoDBのどっちがよいだろうか?



215 :214:2009/05/20(水) 23:58:19 ID:???
ちょっと補足。
全件入替えのテーブルは、件数が多いもので約10万件です。
差分の場合、対象テーブルには多いもので数百万件のレコードがあり、
差分で入ってくるものは大体100件程度です。

216 :NAME IS NULL:2009/05/20(水) 23:59:47 ID:???
>>214-215

どうも頭が高いな。

トランザクションが要るか要らないかでどちらのストレージエンジンを使うかを
判断すればいいと思うが。



217 :NAME IS NULL:2009/05/21(木) 13:27:56 ID:???
>>212 >>213

PHPで書いたソースをどうするかが
キモになるかと思ってたんだが、違うのかな?

218 :NAME IS NULL:2009/05/21(木) 21:45:42 ID:???
>>214
更新しないならMyISAMでいいと思うよ。
InnoDBが有利になるとしたら、主キーによる範囲検索を頻繁に行う場合ぐらいか?

219 :NAME IS NULL:2009/05/22(金) 06:21:53 ID:???
つうか
もしも更新失敗したらとか考えないのかMySQL使ってる奴らは

バッチ処理の最中になんらかのトラブルがおこったらどうすんの


220 :NAME IS NULL:2009/05/22(金) 07:25:11 ID:???
業務的な使い方でバッチ処理云々を言うなら、失敗したらやりなおしだろ。

221 :NAME IS NULL:2009/05/22(金) 10:02:38 ID:???
>>214と同じような事をしているがISAMではタイミングによっては更新がされない等の問題が出たからInnoにしている
replaceを使っているならいざという時でもISAMで大丈夫かもしれないが…
確実な更新が必要だったらトランザクションがあるInnoが安心だと思う

222 :NAME IS NULL:2009/05/22(金) 11:55:17 ID:???
最近、サーバーが重くなってプロセスを調べてみたら
mysql 2437 12.6 0.9 117408 20248 ? S May15 1354:21 /usr/sbin/mysqld --basedir=/ --data
こういうのがCPUを喰っていました。
mysqldのリロードや再起動を試みたのですが消えません。
これはなんなのでしょうか?
phpMyAdminのプロセスを見ても該当するのはないようです・・・。

223 :NAME IS NULL:2009/05/22(金) 13:25:50 ID:???
???
MySQLサーバの本体でしょ?
あなたの作ったアプリケーションが遅いか
大人気でアクセスが多いんでしょう

224 :NAME IS NULL:2009/05/22(金) 13:29:06 ID:???
いや、そうなんですけど、アクセスがほとんどないと思われる時間帯でも同じぐらいCPUを喰ってるんですよね・・・

225 :NAME IS NULL:2009/05/22(金) 13:37:03 ID:???
>アクセスがほとんどないと思われる
いや実際にアクセスがあったのか確認するとか、
アクセス遮断しても同様なのかとか

226 :NAME IS NULL:2009/05/24(日) 10:31:57 ID:???
220 :NAME IS NULL:2009/05/22(金) 07:25:11 ID:???
業務的な使い方でバッチ処理云々を言うなら、失敗したらやりなおしだろ。

馬鹿発見
ほんとにMySQLしか知らんやつらはw
業務系でDB使う意味っつか
DBが開発された意味すら分かってないんだなw


227 :NAME IS NULL:2009/05/24(日) 12:51:12 ID:???
ホストで動いているDBとかは、バッチが失敗したら素でやり直してるな。

つか業務系とか単語出すヤツは現実に無職なヤツだろ。

228 :NAME IS NULL:2009/05/24(日) 21:20:24 ID:???
MySQLってWEB系でしか
使われてないの?

229 :NAME IS NULL:2009/05/25(月) 17:02:11 ID:???
MySQLを学習するに当たって、有用な参考書や、参考サイトがあったら、教えてください。
学校で、MySQLを学習するのですが、何分触るのが初めてなもので、どのように学習を進めていけばいいのかわかりません・・・。

230 :NAME IS NULL:2009/05/25(月) 20:39:00 ID:+IuRrIp9
SQLのみなのか、管理面も含めてやるのかによって違うと思う
どんな教科書使う予定なのか まず書くことが先決だと思う

231 :NAME IS NULL:2009/05/26(火) 01:38:17 ID:???
>>229
個人的なお薦めは公式サイトにあるマニュアルを読む事。
あれはよく出来ていると思う。

長く使うのならどうせいずれ何度も見る事になる物だし、
読んで損する事は無いと思うよ。

232 :NAME IS NULL:2009/05/26(火) 04:53:14 ID:???
>>229
PHP + MySQL?

233 :NAME IS NULL:2009/05/26(火) 05:58:47 ID:???
MySQL 5.1 MyISAM @レンタル鯖で、
i-mode用にデータを指定件数毎にページ分けして表示させようとしてまつ。
データテーブル: d_datas
設定テーブル: m_setting (code, par_page) primary key(code)

SELECT *
FROM d_datas
WHERE foo=xxx
ORDER BY order_key
LIMIT (SELECT par_page FROM m_setting WHERE code=1) * 何ページ目 , (SELECT par_page FROM m_setting WHERE code=1);
の様にサブクエリを使ってみたのですがエラーで動きませんでした。

何が悪いのかさっぱり分からんとです。 LIMITにはサブクエリは使えないとですか?

234 :NAME IS NULL:2009/05/26(火) 14:44:18 ID:???
rollbackがないmyisamは怖くて使えない

235 :NAME IS NULL:2009/05/26(火) 20:50:50 ID:???
>>233
サブクエリじゃなくてプレースホルダで埋め込め。

236 :NAME IS NULL:2009/05/27(水) 10:11:19 ID:???
>>233
つーかmyisamにサブクエリって重いから使わない方がいいかと

237 :NAME IS NULL:2009/05/27(水) 11:28:13 ID:???
MySQL6終了のお知らせが来たね
今後は5.4を発展させるそうでつ
Oracleに近づこうとする新機能は抹殺w

238 :NAME IS NULL:2009/05/28(木) 11:19:43 ID:55S4kKZW
今DBにSJISとEUCで格納してますがこれをUTF-8にしたい
既に入っているデータの文字コードを全部一度に変換するSQL文ってある?

239 :NAME IS NULL:2009/05/28(木) 11:28:26 ID:???
ダンプして入れる、でいいじゃない

240 :NAME IS NULL:2009/05/28(木) 13:00:25 ID:55S4kKZW
>>239
それだとDBがたくさんありすぎて大変なので
SQL文だけでなんとか変換できませんか?

241 :NAME IS NULL:2009/05/28(木) 13:39:12 ID:???
SQLでもしできても、そっちのが工数多いと思うが・・・
変換失敗したときのためにダンプしておくのは同じだし。

242 :NAME IS NULL:2009/05/28(木) 14:15:17 ID:???
>>237
マジっすか?ソースどこ?

243 :NAME IS NULL:2009/05/28(木) 21:21:49 ID:???
>>242
http://nippondanji.blogspot.com/2009/05/good-bye-mysql-60.html

244 :NAME IS NULL:2009/05/28(木) 21:25:30 ID:???
>>238
ALTER TABLE tbl_name CONVERT TO CHARACTER SET charset_name;


245 :NAME IS NULL:2009/05/28(木) 22:44:02 ID:z1ctR8/+
>>242
http://www.atmarkit.co.jp/fdb/rensai/dbwatch2009/dbwatch20095_02.html

246 :238:2009/05/29(金) 00:50:27 ID:Tc3W7H//
>>244
ありがとうございます。
これならPHPのループでテーブル名だけ入れ替えれば簡単に終わりそうです。

これ
ALTER TABLE じゃなくて
ALTER DATABASE とかでDB丸ごと変換できませんか?

247 :NAME IS NULL:2009/05/29(金) 02:51:06 ID:wLSuWYoV
mysql5.0.45です。

update `regist` set `loginId`='hoge@hoge.com', `loginPass`='xxxx', `day1`='2009-05-28' where `uId`=3
というクエリをPHP5で実行したら、
#1054 - Unknown column 'day1' in 'field list'
と言われました、カラムday1は存在していて、型も問題ありません。

自分なりに調べたら、leftJOINをするときに起こりがちな問題ということですが、見ての通りjoinしてません
何が原因なのでしょうか。お手数おかけしますがアドバイスお願いします。

248 :233:2009/05/29(金) 03:07:40 ID:???
>>235 >>236
トン。

249 :NAME IS NULL:2009/05/29(金) 07:56:16 ID:???
>247
そのday1っていう名前を予約語っぽくないものに変更してみたらどうなんの?


250 :NAME IS NULL:2009/05/29(金) 07:58:11 ID:l0KxXPVG
`無しで"update〜3" じゃ駄目?

251 :242 :2009/05/29(金) 09:31:08 ID:???
>>243 >>245
サンスコ

252 :NAME IS NULL:2009/05/29(金) 09:48:04 ID:???
データベースをいくつか用意し、データを分散、必要なデータを適時読み取るってことできますか?

253 :NAME IS NULL:2009/05/29(金) 12:15:08 ID:wLSuWYoV
>>249
ありがとうございます
日本語をまじえた名前に変えてみたんですが上手く行かないんです
なんでだろ… バージョンあげたら良いのかなぁ

254 :NAME IS NULL:2009/05/31(日) 16:02:55 ID:???
primary keyとunique keyをはっているidを見たのですが、これってprimarykeyのみと比べて検索速度に違いは出ますか?
primarykeyはuniquekeyをかねると記憶していたので検証された方いらっしゃいましたらご教示ください。

255 :NAME IS NULL:2009/05/31(日) 19:18:49 ID:???
気になるなら自分で試せばいいのに

256 :254:2009/05/31(日) 21:26:17 ID:???
試してみたいですが差を認識できるほど大規模な検証は時間がかかるので試したかたがいればとおもいました

一般的にはprimaryのみという認識であってますか?

257 :NAME IS NULL:2009/05/31(日) 22:15:24 ID:???
INDEXなんてもし同じものに2つ以上ついていても
1つしか使われないんだから一緒だろう。

そもそも制約と索引の違いもわかってないのにそこを気にするのは間違ってるな。



258 :NAME IS NULL:2009/06/02(火) 16:33:55 ID:kUrXdzVL
質問なのですが
シフトJISのwebページで半角の¥をデータベースに入れると取り出す時に全角のバックスラッシュになって表示されます。
ソとか表とかで終わる文も文字コードの関係で入りません。

ですのでwebページに他の文字コードを使えば解決する問題ですが
2chはシフトJISですよね。
データベースは何使ってるか分かりませんが
シフトJISでも実は問題なくできるという事だと思います。

で、こういう問題はどの様に対処するのが正しいのでしょうか?
どうすればシフトJISでソとか表とか半角の¥とか入りますか?

259 :NAME IS NULL:2009/06/02(火) 20:15:25 ID:???
>>258
フォームで受け取る時、ウェブに表示するときに変換汁。

260 :NAME IS NULL:2009/06/02(火) 21:56:28 ID:???
>>258
データベースの文字コードをシフトJISにする。

261 :NAME IS NULL:2009/06/02(火) 23:10:47 ID:???
何で接続しているか知らんが、たとえば、JDBCとかだとユニコードに一旦変換されたりするんじゃね?

262 :NAME IS NULL:2009/06/03(水) 00:43:19 ID:t6kRRUCU
>>237
もう俺は移行済み。むしろMySQLは早く無くなってほしいくらいw


263 :258:2009/06/03(水) 02:13:29 ID:maHUNQLQ
>>259-261
レスありがとうございます。

2chの場合を考えると、シフトJISで投稿されて、文末に「ソ」とかある文章でも投稿できてDBに入りますよね。
という事は、CGIスクリプトでDBに入れる前に別の文字コードに変換して入れてるのでしょうか?
それともDBやテーブルの文字コードのデフォルトをシフトJISにすれば
問題なく入るのでしょうか。
でもDBにinsertする直前にSET NAMES SJISのクエリを送れば
デフォルトでシフトJISなのと同じ事ではないのですか?
それでもinsertできません。

264 :NAME IS NULL:2009/06/03(水) 04:02:37 ID:???
>>263
escapeだとか、prepareステートメントとか分かってる?

なんの言語つこてるか知らんけど、たいがいの言語のDB-driverには
それらの機能あるはずなんで、そこらへんちゃんと勉強しましょう。

265 :NAME IS NULL:2009/06/03(水) 12:32:56 ID:maHUNQLQ
テーブルを作るときにデフォルトの文字コードをEUCに決めて
insertの時にset mame sjisとした場合
insertされる文字はEUCとsjisのどっちで保存されるんですか?

266 :NAME IS NULL:2009/06/03(水) 12:48:26 ID:???
サーバ(DB)の文字コードとクライアントの文字コードの違いをよく考えよう

267 :NAME IS NULL:2009/06/03(水) 13:48:16 ID:maHUNQLQ
ということは

set names sjis送ってもそれはクライアント側からsjisで受け取りますっていうだけで
保存はテーブルのデフォルトコードが採用されるって事?

268 :NAME IS NULL:2009/06/03(水) 14:15:28 ID:???
ttp://www.y2sunlight.com/ground/?MySQL4.1%2F9.MySQL%A4%CE%BC%C2%B8%B3%2F3.%B4%C1%BB%FA%A4%CE%BB%C8%CD%D1

269 :NAME IS NULL:2009/06/03(水) 20:07:23 ID:???
テーブルの文字コードっていったい何だと思っているのか

270 :NAME IS NULL:2009/06/04(木) 12:24:34 ID:???
2chの掲示板がMySQLつかってるとは思えない

271 :NAME IS NULL:2009/06/04(木) 22:56:19 ID:TuMdbt3U
character_set_connectionの意味が理解できないのでわかる方いましたら教えてください.

クライアントからサーバにinsertなどでデータを渡した後に,
データの文字コードはcharacter_set_clientからcharacter_set_connectionに
変換されるのでしょうか?
とすれば文字コードの自動変換とは,このことを言うんでしょうか?

また,character_set_connectionとcharacter_set_databaseが異なる場合,
ある文字コードで設定されたデータベースに文字コードの異なるデータが
入るということになるんでしょうか?

272 :NAME IS NULL:2009/06/05(金) 01:08:22 ID:???
character_set_connectionは、
データベースにデータを格納しないSQLで使われるキャラクタセット。

mysql> set character_set_connection = cp932;
Query OK, 0 rows affected (0.00 sec)

mysql> select length('あ');
+---------------+
| length('あ') |
+---------------+
| 2 |
+---------------+
1 row in set (0.04 sec)

mysql> set character_set_connection = utf8;
Query OK, 0 rows affected (0.00 sec)

mysql> select length('あ');
+---------------+
| length('あ') |
+---------------+
| 3 |
+---------------+
1 row in set (0.00 sec)


273 :NAME IS NULL:2009/06/05(金) 01:14:08 ID:???
> また,character_set_connectionとcharacter_set_databaseが異なる場合,
> ある文字コードで設定されたデータベースに文字コードの異なるデータが
> 入るということになるんでしょうか?

(1) character_set_database
(2) show create databaseで出てくるcharacter set
(3) show create tableで出てくるdefault charset
(4) show create tableで出てくるカラムごとに設定したcharset

まずこの(1)、(2)、(3)、(4)は個別に設定できるので注意。
(1)は(2)で上書きされる。
(2)は(3)で上書きされる。
(3)は(4)で上書きされる。

格納時はcharacter_set_connectionが何だろうと、
(4)で格納される。(4)が設定してなければ(3)で格納される。

一度テーブルを作ってから(1)や(2)を変更して再起動しても
すでに格納したデータは変わらない。

274 :271:2009/06/05(金) 02:11:41 ID:???
>>272-273
ありがとうございました!!リファレンスマニュアルに
「クライアントから送られたステートメントをcharacter_set_client からcharacter_set_connection に変換します(ただし_latin1 あるいは_utf8のようなイントロデューサのある文字列リテラルは除く).」
と書かれていて混乱していました.
>>272のバイト長の例がわかりやすかったです.

>>273は文字コードが(4)(設定されてなければ(3),(2),(1))に変換されて格納されるということですよね.

275 :NAME IS NULL:2009/06/05(金) 20:39:52 ID:oLyVZQ1P
ダンプをしたりするのをコマンドプロンプトでやってるのですが
オプション指定とかいろいろ知識も必要で手間もかかるので
ダンプとかダンプしたデータを戻したりができるフリーソフトってないですか?
Windowsです。

276 :NAME IS NULL:2009/06/05(金) 21:41:50 ID:???
>>258
2ちゃんねるはデーターベースは使ってない。
ファイルで管理している。

277 :NAME IS NULL:2009/06/06(土) 12:49:40 ID:???
>>275
こんなん?
http://help.matsubarasystems.com/dbUtil/

278 :NAME IS NULL:2009/06/06(土) 16:58:59 ID:9rrlV8Y0
2chってファイルで管理してたらサーバーがファイルだらけになるんじゃないの?
DB使わずにファイルで管理するメリットあるの?

279 :NAME IS NULL:2009/06/06(土) 17:11:43 ID:???
ファイルだらけで何か問題?
ファイルシステムで済む事にDBを使うメリットは無いでしょ。

280 :NAME IS NULL:2009/06/06(土) 20:08:39 ID:???
>>276
はいって何だよ。出来んのかよ。さっきから何度も。何がはいなんだよ。
出来もしねえ奴が軽々しくはいなんて言うんじゃねえよ。
わかってんのかよ。はいって言う事の責任の重さを。
社会勉強のつもりでやってんだったら辞めろおまえ。

281 :NAME IS NULL:2009/06/06(土) 20:16:08 ID:???
>>280

なんだなんだ!?


282 :NAME IS NULL:2009/06/06(土) 23:04:36 ID:???
2chの場合は明らかにファイルシステムの方が向いているだろ。

と言うか2chをデータベースで管理していると考えたり、例えてたり
する方が正直どうか?と思うが。

283 :NAME IS NULL:2009/06/07(日) 05:22:03 ID:???
その明らかな理由を教えてください

284 :NAME IS NULL:2009/06/07(日) 06:18:01 ID:???
1スレッド最大1000コメントで、順次アクセスと追記だけ。
コメント間のリンクの管理もやらない。
これのどこにDBが必要になるんだよ。

285 :NAME IS NULL:2009/06/07(日) 10:02:44 ID:H5yYzBMm
書き込みが多い(激しい)スレだと、ファイルロックじゃ持たないでしょ?
昔から、カウンタなんかでよく出た話
#落ちてもたいしたデータじゃないと言えばそれまでw
スレ一覧の更新順に表記なんかは、DBの方が楽だという発想がないの?

286 :NAME IS NULL:2009/06/07(日) 10:46:50 ID:???
>書き込みが多い(激しい)スレだと、ファイルロックじゃ持たないでしょ?

現に2chが持っている事実について

>スレ一覧の更新順に表記なんかは、DBの方が楽だという発想がないの?

現実にはファイルシステムの方が楽な点について


正直>>285みたいな発想できるほうがエンジニアとしては致命的だと思うが。


287 :NAME IS NULL:2009/06/07(日) 11:28:59 ID:???
まあエラーが出たら書き込む側がリトライするし、その程度の信頼性でいいからな。

288 :NAME IS NULL:2009/06/07(日) 11:34:06 ID:???
2chならむしろファイルシステムのが向いてるんじゃね

289 :NAME IS NULL:2009/06/07(日) 13:33:10 ID:???
2chならむしろ存在しない方がいいわけで

290 :NAME IS NULL:2009/06/07(日) 19:03:15 ID:???
>まあエラーが出たら書き込む側がリトライするし、その程度の信頼性でいいからな。

MySQLスレでこんな発言を聞くと凄くマヌケに感じる。
RDBMSを使ってトランザクション制御しようが、2chの仕様の「追記オンリー、1スレッド1000コメント」
の前にはRDBMS使う必然がないだろ。

つか、RDBMSで最新50取得とか次100とか全部読むをSQLを発行して結果セット取得しながら
HTMLに変換とかやるくらいなら、ファイルシステムを読みながら変換したほうが効率いい。

291 :NAME IS NULL:2009/06/07(日) 19:33:05 ID:???
RDBMS覚えたてだと何でもDBに突っ込みたくなる物さ
わざわざDBを使って同期書き込みしたら、それこそ持たないと思うけどね

292 :NAME IS NULL:2009/06/07(日) 22:57:18 ID:???
>>285
中の人じゃないので「今」の仕様は知らないけど。
数年前は mmap() してた。
(だからdatサイズ制限とか{ある|あった})
最近はRAMDISK上に置いてるので、鯖落ちするとdatは
電子の藻屑になるケースが多い。
※↑は書き込みの多い実況系の設定
※普通の板はファイルキャッシュで間に合うらしい

293 :NAME IS NULL:2009/06/08(月) 08:33:58 ID:???
2chはRDBMSの方が向いていると主張するヤツは試しに
実況鯖とかをMySQLで実装してみればいいんじゃね。

おそらく、マッハで鯖が落ちる。

294 :NAME IS NULL:2009/06/08(月) 10:48:41 ID:???
>>290
一斉に書き込むとタイムアウトするし、たまに1000超えてるときあるだろ?
銀行の預金じゃないんだからその程度でいいんだよ。

295 :NAME IS NULL:2009/06/08(月) 10:54:08 ID:???
>>293がしょぼいプログラムを書くから落ちるんだよ。

296 :NAME IS NULL:2009/06/08(月) 19:34:29 ID:GzH14Amh
カウンターの数字を
ファイルに書き込むのとデータベースに書き込むのは
どっちが速いですか?

297 :NAME IS NULL:2009/06/08(月) 19:57:45 ID:???
>>296
・カウンターってウェブページに表示するアクセスカウンターの事?
・データベースはプレーンな InnoDB を使うと考えて良いの?
・ファイルシステムは何を使っても良いの?
・どんなサイトで、可用性はどの程度まで担保すれば良いの?
・サーバの実装は単発の CGI なの? それとも永続的なプロセス?

プロセスのメモリ上に置いておいてどこにも書き出さないのが一番速いよ。

298 :NAME IS NULL:2009/06/08(月) 22:00:42 ID:???
でサーバーのプロセスに障害が発生するとカウンターが飛ぶワケだな。

ロックを判断しながらOSのファイルシステムに読み書きするのと、
RDBMSでトランザクション使いながら読み書きするのとだと、
当然だけど前者の方が速い。

299 :NAME IS NULL:2009/06/08(月) 22:57:53 ID:???
耐障害性能の要件が無いからそれで十分。

プロセス障害が気になるならマルチプロセスにしてデータを共有しておけ。
それでも心配なら 10 分に一回 tmpfs に書き込んでおけ。
まだ不安なら 1 時間に一回 tmpfs からローカルディスクにコピーしろ。
どうしても安心出来ないなら 1 日に一回リモートマシンにバックアップしろ。

300 :NAME IS NULL:2009/06/08(月) 23:31:51 ID:zsXNZrVF
MySQLの応答が突然遅くなりました。
MySQLとやりとりするプロセスが通常数秒で終了するところ何十分もかかっています。
mysqlクライアントのログインに数十秒かかります。
topで見てもmysqldのCPU使用率、メモリ使用率も高くありません。
show processlistでも長時間かかっているQueryはありません。
どのような原因が考えられるでしょうか?

301 :NAME IS NULL:2009/06/08(月) 23:40:45 ID:???
>>300
それだけじゃ何とも…

単純な SELECT 文でも時間が掛かるの?
telnet や ssh は遅くなってない?
ローカルホストから接続しても遅いの?
ファイルシステムはいっぱいになってない?
I/O はきちんと処理出来てる?
mysqld 以外に何かプロセスが動いてない?
応答が遅くなる前に何か操作しなかった?
OS は Linux 系?
etc.

302 :NAME IS NULL:2009/06/09(火) 00:01:42 ID:I15GJ2dD
>>301
申し訳ないです。

1件のSELECTとINSERTをしてみましたがいつもは一瞬のところが数秒かかります。
sshでmysqldが動いているホストにログインしてmysqlクライアントで操作していますが
mysql以外のコマンドは全く遅くなっていません。
ファイルシステムの空きは十分ありIOに問題はありません。
mysqld以外にもプロセスは動いていますがtopで確認しても負荷の高いものはありません。
突然と書きましたが、応答が遅くなる前に大量の更新処理をしていました。

303 :NAME IS NULL:2009/06/09(火) 00:17:37 ID:???
MySQL単体の問題みたいだけど、エラーも出ない、ログイン時間が掛かる
というのは不思議ですね…

304 :NAME IS NULL:2009/06/09(火) 08:04:23 ID:???
DNSで名前がひけなくなるとそうなるかなー
skip-name-resolveとか

305 :NAME IS NULL:2009/06/09(火) 10:08:10 ID:???
>>302
エラーログに何も出ていないなら、テーブルスペースフルとかでもないんだよね。
単純に件数が増えて遅くなっているならexplainとかを使ってクエリの中身とか
インデックスの張り方を工夫してみると良いと思う。ファイルソートになってる
とか、インデックスを使えてない可能性もあるから。

306 :NAME IS NULL:2009/06/09(火) 13:00:57 ID:???
>>303-305
アドバイスありがとうございます。
explainなど試してみます。

307 :NAME IS NULL:2009/06/09(火) 13:58:46 ID:???
MySQL 5 を使い始めました。

PostgreSQL には vacuum がありますが、
MySQL には同様のものはありますか?

308 :NAME IS NULL:2009/06/09(火) 14:28:52 ID:???
そんなものはいらないない。

309 :307:2009/06/09(火) 14:36:49 ID:???
>>308
ありがと。すばらしい。

310 :NAME IS NULL:2009/06/09(火) 19:53:16 ID:???
あれ? 2chはファイルシステム有利とか言ってた約1名は逃げた?

2chがDB使ってないのは、元々の仕様でそうなっていたからだろ?
要するにDB管理の掲示板じゃなかったから。

DB版掲示板の無料レンタルなんて当時ほぼ無いだろうが
スレ内検索なんかにはDBの方が有利だな。CPUに負荷もかからんし。

311 :NAME IS NULL:2009/06/09(火) 20:22:04 ID:???
それで思い出したけど、カウンタの質問してた人は質問投げっ放しか。
疑問は解けたのかな。

312 :NAME IS NULL:2009/06/09(火) 20:46:27 ID:???
>>310
スレ内検索…

313 :NAME IS NULL:2009/06/09(火) 21:13:50 ID:???
ってゆうか2ちゃんってひろゆきが作ったんじゃないの?
ひろゆきプログラマー?

314 :NAME IS NULL:2009/06/09(火) 21:27:22 ID:???
お手軽ででかいシステムだとファイルシステムがいい
金かけまくってとことん突きつめるとDBになるがコストパフォーマンスが…

315 :NAME IS NULL:2009/06/09(火) 21:27:54 ID:???
>スレ内検索なんかにはDBの方が有利だな。CPUに負荷もかからんし。

真性のヴァカ発見

つかRDBMS覚えたて厨房はさっさと2chをMySQLで構築してみりゃいいじゃねーか。

316 :NAME IS NULL:2009/06/09(火) 21:30:04 ID:???
>>310
本気でそう思っているなら運営板にでもいって鯖管理でもやらせてもらえば。

UNIX板あたりの住人に「バカ発見」と言われるのがオチだろうけど。

317 :NAME IS NULL:2009/06/09(火) 21:41:17 ID:???
DBに入れると魔法の力で計算量が激減すると思ってるのかもね。
元々の仕様がなんでそうなったのかとか、検索用のインデックスを
張るコストとか、深く考えてないんじゃないかな。

318 :NAME IS NULL:2009/06/09(火) 21:44:30 ID:???
その理由は?

319 :NAME IS NULL:2009/06/09(火) 21:57:24 ID:???
>>314
RDBMS相当の機能を自前で実装しようとすると、もっとお金が掛かるよ〜

2chの書き込みをわざわざSQLを使って格納するのは無駄だし、ACID特性も
必要無いし、RDBMSを使う意味は無いよね。

320 :NAME IS NULL:2009/06/09(火) 21:59:23 ID:???
mixiはデータベース管理だお

321 :NAME IS NULL:2009/06/09(火) 22:01:49 ID:???
2chはファイルシステム管理だお

技術要件が違うんだから適材適所

322 :NAME IS NULL:2009/06/09(火) 22:35:10 ID:???
ファイルシステム管理とか変だろ。
ただのベタファイルだろ。

323 :NAME IS NULL:2009/06/09(火) 23:12:57 ID:???
たいていのブログもDBじゃね?
ファイルで管理とか初心者すぎだろ

324 :NAME IS NULL:2009/06/09(火) 23:13:14 ID:???
そのベタファイルをファイルシステムで管理してるんだよ。
ディレクトリとかキャッシュとかタイムスタンプとかアクセス権減とか、
その他のメタデータとか、実装をきちんと理解していれば変ではない。

325 :NAME IS NULL:2009/06/09(火) 23:42:44 ID:???
ファイルでの管理の問題点は、ファイル内を検索する速度の速い遅いではなく
同じディレクトリ内に大量のファイルを置くとそのファイルを探すのに時間がかかる事。

326 :NAME IS NULL:2009/06/09(火) 23:46:52 ID:???
>>319
?2chでもACID特性は重要だろ。
でなきゃ同時に書き込みしたらレスが混じるとか、行数制限を越えた
書き込みをした時にレスが半分だけ書かれるなどということが
起きかねない。

327 :NAME IS NULL:2009/06/10(水) 00:02:11 ID:???
>>325
板毎にディレクトリは分かれてると思うけど、読み書き可能なスレッドだけ
なら大量というほどの事は無いでしょ。ファイル名のキャッシュもあるし。
もしファイル数が問題なら、ある程度のスレッド数毎にディレクトリを
分ければいいだけだし。

>>326
程度の問題だけど、2chはレスを書き込む度にいちいちfsync()しないと
いけないサイトではないでしょ。永続性は限定的で十分。

328 :NAME IS NULL:2009/06/10(水) 00:05:35 ID:???
楽観的ロックという考え方もあるしな。


329 :NAME IS NULL:2009/06/10(水) 00:32:16 ID:???
あれ?>>310は(ry

330 :NAME IS NULL:2009/06/10(水) 01:00:58 ID:???
>>327
なぜその文脈でfsyncだの永続性だのといった単語が出てくる?

331 :NAME IS NULL:2009/06/10(水) 05:22:08 ID:???
>>319
だから、同等の機能はそもそもアキラメル

332 :NAME IS NULL:2009/06/10(水) 05:23:18 ID:???
ちなみにとことん突きつめると全データオンメモリとか
そんなもんw

333 :NAME IS NULL:2009/06/10(水) 11:28:53 ID:???
>>327
だからファイルで管理する場合ディレクトリを分けなきゃいけないって事でしょ

334 :NAME IS NULL:2009/06/10(水) 11:29:40 ID:???
スレ内検索は、全文検索だから
転地インデックスにするか、grepみたいに全部見るしかないんじゃね?

335 :NAME IS NULL:2009/06/10(水) 12:27:47 ID:???
>>330
理解出来なかったのならACIDのDについて調べてみよう。

>>333
2chのスレ数なら>>325の問題はそもそも気にしなくて良いという事。

336 :NAME IS NULL:2009/06/10(水) 13:59:16 ID:???
そういえば「したらば」もデータベースって聞いた事あるよ。

337 :NAME IS NULL:2009/06/10(水) 14:36:36 ID:???
掲示板にDBを使う主な理由はこのどちらかだけど、

・データを連携させて高度な機能を実現したい
・性能を多少犠牲にしても、データの管理を丸投げしたい

「2ch」はどちらにも当て嵌まらないんだよね。

338 :NAME IS NULL:2009/06/10(水) 15:36:27 ID:???
>>336
何処で聞いたんだ?したらばも2chとほぼ同じ仕掛けだったと思うが。
まあ、今話しているのはスレッドの管理のことで、
板自体の管理にDBを使ってる可能性は否定しない。
2chブラウザの仕組みを知ってるならスレッドの管理にDBを使ってないのは明白だろ。

339 :NAME IS NULL:2009/06/10(水) 15:50:01 ID:???
2chがどうとか言う話になってるから便乗して質問したいのだが
sennaってどうなの?
仕組みがよく分からないのだが、効率よく分かち書きしてくれるって事?

340 :NAME IS NULL:2009/06/10(水) 16:29:18 ID:???
N-GRAMかMeCabつかった分かち書きだから、Sennaの肝は転置インデックスでの検索でしょう

341 :NAME IS NULL:2009/06/10(水) 21:03:54 ID:???
2ちゃんがデータベースだろうが何だろうがかまわないが
FOX★がハゲすぎてるのが気になる

342 :NAME IS NULL:2009/06/11(木) 15:32:27 ID:???
InnoDBってどうやって読むのでしょうか?
インノデービーで合ってます?

MyISAMはマイアイサムで合ってますよね?

343 :NAME IS NULL:2009/06/11(木) 15:59:04 ID:???
マィイサム

344 :NAME IS NULL:2009/06/11(木) 15:59:57 ID:???
猪野出武威

345 :NAME IS NULL:2009/06/11(木) 16:02:49 ID:???
えー、イノデブイとマイイサムなんですか‥‥。


346 :NAME IS NULL:2009/06/11(木) 22:13:18 ID:???
イノデービーとマイイザム

347 :NAME IS NULL:2009/06/12(金) 01:01:19 ID:???
http://www.youtube.com/watch?v=RpC1BMOZeAs

0:37 で『インノディービー』って言ってるね。
日本では『イノデービー』と呼んでる人が多いと思う。

348 :NAME IS NULL:2009/06/12(金) 12:08:04 ID:???
mysql+phpで、例えばmysqlに
A123A456A789
って文字が格納されてるローがあって、
これからA456てのを削除して、A123A789を残したいってときには、
まずselectして、そこのローをみて、str_replaceしてupdate set
する方法しかないかな?
sql文だけで便利なものありませんか

349 :NAME IS NULL:2009/06/12(金) 12:11:46 ID:???
と思って調べたらREPLACE関数ってのがあった
お騒がせしました

350 :NAME IS NULL:2009/06/14(日) 08:31:28 ID:???
解決できずモヤモヤしてます。
初心者すぎてめっちゃ恥ずかしいですが、よろしくお願いします。
バージョンは 5.1.22-rc です。

TESTテーブルにある、SUUJIというカラムの構造を変更する文を書いてみました。

ALTER TABLE `TEST` CHANGE `SUUJI` `SUUJI` INT( 4 )

INT型は4byte必要と知ったので、INT(4) としてはみたものの、INT(1)でもINT(5)でもエラーが出ません。
INT(1)にしたあと、試しに数字を保存(999999.....と大きめな数を入力)してみたのですが
通常の最大値2147483647まで保存可能なようです。
INT( xx ) の指定には意味があるのでしょうか。そして、本来どう指定するのが正しいのでしょうか?

351 :NAME IS NULL:2009/06/14(日) 11:13:51 ID:???
そりゃおめぇ、()の中はいくつの箱を用意するかの指定だからw


352 :NAME IS NULL:2009/06/14(日) 11:20:15 ID:???
つまり、そのデータをいじったり、保管したりするには、メモリ及びディスク上に、INTであれば、(非圧縮で)4×n byte分のスペースが必要になるってことだ。

353 :NAME IS NULL:2009/06/14(日) 13:54:59 ID:???
>>350
>本来どう指定するのが正しいのでしょうか?

最終的に何を実現したいのかな?

INT(4) は、表示する時に最低 4 桁出力するという意味です。
指定しているのは表示する桁数であって、格納するデータのサイズ
ではありません。格納するデータのサイズを指定したい場合は、
そのサイズに合わせて TINYINT, SMALLINT, MEDIUMINT, INT,
BIGINT を使い分けます。BIGINT を使うと 8bytes までの数字を
扱うことが出来ます。

http://dev.mysql.com/doc/refman/5.1/ja/numeric-types.html

354 :NAME IS NULL:2009/06/15(月) 00:03:12 ID:???
>>353 みなさま
表示幅の設定だったとは。根本的に間違ってたんですね。
自分の場合は小さい数字をPHPで取り出す目的だったので
あまり意識しなくてもよさそうです。
ありがとうございました!

355 :NAME IS NULL:2009/06/15(月) 17:22:54 ID:???
サーバに多数のコネクションを張ってupdateかけるデーモン書いたら
lock wait timeout exceededって怒られるようになりました。
ググったら
"他のスレッドが保持しているロックをinnodb_lock_wait_timeout秒間待っても獲得出来なかった場合に発生する。 "
と出てきました。
ここの"スレッドが保持しているロック"というのを調べる方法はないでしょうか?
webサービスなので今のところタイムアウトの秒数を増やすといった解決方法は考えていません。
また、もし似たような場面に遭遇したといったことがあればヒントをいただけませんか?

対象となるテーブルはInnoDB、テーブルのロックは見たところ無いように見えてしまっています。

356 :NAME IS NULL:2009/06/15(月) 19:32:08 ID:???
show engine innodb statusで、待たされている様子はわかる
誰がどのロックをつかんでいるかは
MySQL 5.1+InnoDB Pluginを入れるとわかる
かなり難しいけどね

357 :NAME IS NULL:2009/06/15(月) 23:19:48 ID:2p3b4L8V
dumpする時ロックをかけるけど、webサーバーだとそんな事してる余裕無い
そうするとwebサーバーってそもそもdumpしないのか?RAIDだけ?

358 :NAME IS NULL:2009/06/15(月) 23:27:05 ID:???
>>357
バックアップの話なら、サイトによって様々でしょ。
例えばレプリケーションしてその先でダンプするとか、
ボリューム管理ソフトやストレージのスナップショット
機能を使うとか、色々。

359 :NAME IS NULL:2009/06/16(火) 01:44:07 ID:???
WinXPにApacheとMySQL5.1.35を入れてphpMyAdmin起動して、
テーブル作成するため参考書CDに入ってたダンプと思われるtxtインポートしたら
--で始まるコメントの行がSyntax Errorになりますた。
試行錯誤の末、コメント行を全部消して食わせたらちゃんと食ってくれました。
最近のバージョンではコメントの書き方が変わってたりするんでしょうか?

360 :NAME IS NULL:2009/06/16(火) 01:50:48 ID:???
追記
--のコメント行が全部エラーになっているのではないようで、
一行だけ
------------------------------------------
みたいになっている行があって、その行を消すとインポートできました。
そういう行があるとエラーになるようになったのでしょうか?

361 :355:2009/06/16(火) 08:02:31 ID:???
>>356
情報ありがとうございます、難航しそうでがーんですがちょっと調べてきます。

>>359
普通のsqlも----------を突っ込んだらコメントに扱ってくれなかったよ。
今まで気にしてなかったけど--の後にスペースが必要なのかな。

362 :NAME IS NULL:2009/06/16(火) 12:25:54 ID:r17qwjCX
MySQL3.23で質問です。

掲示板の書き込みで、スレ用のテーブル「thre」、レス用のテーブル「res」があります。
resには、所属スレIDを表す「tid」、投稿日付を表す「d」がDATETIME型で入っています。

ここで、最新のレス書き込みから30日以上放置されてしまったスレ(thre)を取得したいと思っています。
スレは重複がないように取り出したいです。
30日以上放置されたレスは

3456000 < UNIX_TIMESTAMP() - UNIX_TIMESTAMP(res.d)

という条件で取得可能かと思いますが、1つのクエリでスレ(thre)のリストを取得するにはどう書けば良いのでしょうか?
サブクエリが使えないので、MAX()が絞込み条件に使えず困っています。

363 :NAME IS NULL:2009/06/16(火) 18:24:59 ID:FL2y7ITV
複数のテーブルからの検索で質問です。ググってみましたがJOINとちょっと違うような
気がするので、ここで質問させて頂きます。

以下の構成が同じ2つのテーブルがあるとします。

hoge
id name
1 one
2 two
3 three

moge
id name
4 fore
5 five

で、それそれ nameがtwoのid値を取得したい場合

select id,name from hoge where name='two'
select id.name from moge where name='two'

と2回検索しているものを1回にまとめるにはどするのでしょうか?

select id from hoge join moge where name='two'

だとエラーになりました。

364 :NAME IS NULL:2009/06/16(火) 22:41:56 ID:???
select id,name from hoge where name='two'
union all
select id,name from moge where name='two'

365 :NAME IS NULL:2009/06/17(水) 16:48:50 ID:dEbjvI4y
最近mysql始めまして、テーブルとか大きい表を表示するとき
http://2php.jp/mysql/show.htmlのSHOW TABLE STATUSのように
表がくずれてしまうのですが、これを見やすくする方法はあるのでしょうか?

366 :NAME IS NULL:2009/06/17(水) 17:19:28 ID:???
show table status\G
縦型表示。


367 :NAME IS NULL:2009/06/18(木) 00:30:58 ID:JwU+upJr
MySQLタイムマシンの開発はどうなった?

368 :356:2009/06/18(木) 14:45:22 ID:???
>>355 >>361
ロックの調査方法
http://d.hatena.ne.jp/sh2/20090618

369 :NAME IS NULL:2009/06/18(木) 19:14:27 ID:???
>>368
wow わざわざすんません。右も左もわかってませんのでいろいろ漁って勉強させてもらいます!

ちなみに先の問題はレプリケーションの遊びしてた鯖でロックするようなselect出させるようにしてひとまず回避しました。

370 :NAME IS NULL:2009/06/18(木) 21:23:14 ID:JwU+upJr
一つのテーブルからselectじゃなくて、そのDBの全てのテーブルからselectするのはできますか?
今はPHPで全テーブル名取得→ループで各テーブルをselectしてます。
これをSQL文だけでやってみたいです。

371 :NAME IS NULL:2009/06/19(金) 01:09:06 ID:???
中カテゴリ、小カテゴリの一覧が入ったテーブルがあります。
ここから、中カテゴリが変わるまでitemのみを出すSQLを作りたいのですが、
PHPやPerlの中であえて行わずにMySQL用のクエリだけで実現できるのでしょうか?

識者の方、教えて頂けますと幸いです。

テーブル例)
|category|item|(列名)
|果物|りんご|
|果物|スイカ|
|動物|うし|
|草花|あじさい|
|草花|つばき|
|草花|ひまわり|

出力例)
・果物
りんご
スイカ
・動物
うし
・草花
あじさい
つばき
ひまわり

372 :356:2009/06/19(金) 02:09:19 ID:???
mysql> set @job = '';
Query OK, 0 rows affected (0.00 sec)

mysql> select concat(if (@job = job, '', @job := job), ',', ename) from emp orde
r by job, ename;
+------------------------------------------------------+
| concat(if (@job = job, '', @job := job), ',', ename) |
+------------------------------------------------------+
| analyst,ford |
| ,scott |
| clerk,adams |
| ,james |
| ,miller |
| ,smith |
| manager,blake |
| ,clark |
| ,jones |
| president,king |
| salesman,allen |
| ,martin |
| ,turner |
| ,ward |
+------------------------------------------------------+
14 rows in set (0.00 sec)

PHPやPerlでやったほうがいいと思います!

373 :NAME IS NULL:2009/06/19(金) 02:09:59 ID:???
名前消し忘れた

374 :NAME IS NULL:2009/06/19(金) 02:21:47 ID:???
>>370
1つのselectにするなら全テーブルが同じカラム構成じゃないといけない。
で、あらかじめテーブル一覧がわかってたらビューを作ればできるかも

create view v as
select * from t1
union
select * from t2



375 :NAME IS NULL:2009/06/19(金) 16:27:37 ID:???
で、mySQLで掲示板作るとローパフォーマンスだとか主張していたヴァカはどうした?

376 :NAME IS NULL:2009/06/19(金) 16:35:35 ID:???
そんなのお前だけじゃね?

377 :NAME IS NULL:2009/06/19(金) 17:54:46 ID:ig7lHck0
最近MySQLを触り始めたばかりの初心者です。
mysqlimportを使ってDBのバックアップとデータ移行を行いたいと思います。

マニュアルによればタブ区切りテキストを読み込むことができるそうですが、
このmysqlimportで読み込める形式を出力するには、どのような方法が簡単でしょうか?



とりあえず、自分が試したのは以下の通りです。

(1) mysqldump --no-data でテーブル構造をテキストに出力
(2) テーブル構造を移行先DBに読み込ませる
(3) mysql -D database_name -B -N -e 'SELECT * FROM table_name;' でTSVテキストを出力
(4) mysqlimportでTSVを読み込み

しかしこの方法では、
(4)の際に一部レコード(1万件以上)がスキップされるなど、上手くいきませんでした。

なお、元のDBはMySQL3.23、移行先のDBは5.0です。


378 :NAME IS NULL:2009/06/19(金) 19:59:46 ID:???
>>377
それはダメだ。

379 :377:2009/06/19(金) 20:20:43 ID:???
最初はmysqldumpでクエリ生成しようかと思ったんですが、
文字化けやら文法エラーに悩まされ、他の方法でもいけるかな?と。

>>378
ではどんな方法が良いでしょうか。

380 :NAME IS NULL:2009/06/19(金) 22:15:30 ID:???
MySQL Migration Toolkitはどうだろう

381 :NAME IS NULL:2009/06/19(金) 23:16:53 ID:???
>>377
dump時に出力後の文字コードを指定できる。
そのdumpした物をそのまま新しいDBに入れればいいだけ。

文字コードがおかしいから文法エラーになってるものだと思われるので
文字コードが正しければ解決。

382 :NAME IS NULL:2009/06/19(金) 23:34:06 ID:???
>380
こんなものがあるんですね。GUIっぽいですが。
使えそうか調べてみます。

>381
--default-character-set ですか?
dumpするときに色々試してみたんですが、何度やっても出来なくて、諦めちゃってました。


383 :NAME IS NULL:2009/06/20(土) 12:21:45 ID:???
非力なポストグレが終わりそうなのでmysqlへ移行を考えています。
SQL文の違いはあまりなくすぐに移行できるでしょうか?

384 :NAME IS NULL:2009/06/20(土) 12:40:24 ID:???
ポスグレ終わりなん?
MySQLの勉強が終わったらポスグレを勉強しようと思ってたのに…

移行する時の注意ですが、MySQLもそれなりに個性の強いRDBMSだと思います。
SQL モードやストレージエンジンの違いは注意が必要だと思います。
ドキュメントもそこそこありますし、見通しは良いので、別の RDBMS を
使っていた経験があるなら、そんなに難しい事は無いと思います。

385 :NAME IS NULL:2009/06/20(土) 12:51:57 ID:???
いま面倒みているシステムでPostgreSQLの調子が悪いって話じゃないの?
PostgreSQL自体はもうすぐ8.4も出るし、いたって堅調。
SQLの文法はかなり違うからすぐには移行できないよ。

386 :NAME IS NULL:2009/06/20(土) 12:57:41 ID:???
システム移行の話ですか。それなら大変ですね…
ストアドとかサブクエリーとかバックアップとか
いろいろ悩ましいでしょうね。

387 :NAME IS NULL:2009/06/20(土) 16:58:14 ID:???
どっちかっつーとMySQLが終わるかもしれないって感じだけどな。

388 :NAME IS NULL:2009/06/20(土) 17:15:31 ID:???
終らくるの?

389 :NAME IS NULL:2009/06/20(土) 17:34:33 ID:???
PostgreSQLもMySQLも直ぐに無くなったりはしないと思うが。

390 :NAME IS NULL:2009/06/20(土) 22:38:09 ID:Uihx1bYm
サーバーPC一台でドライブ別にレプリケーションできないんですか?
MYSQLのデータだけを常にCドライブとDドライブに書き込みたい。

391 :NAME IS NULL:2009/06/20(土) 22:45:10 ID:???
>>390

できるけど?


392 :NAME IS NULL:2009/06/22(月) 18:21:45 ID:???
↑アホ

393 :NAME IS NULL:2009/06/22(月) 19:16:47 ID:???
>>392

何が? 必要十分な回答だろう。

394 :371:2009/06/23(火) 00:22:31 ID:???
>>372 さん、ありがとうございます!
これでテストしてみようと思います。

395 :NAME IS NULL:2009/06/23(火) 08:54:26 ID:???
order BY RAND()がクソ遅いんだが
他に方法ないんか?

396 :NAME IS NULL:2009/06/23(火) 14:01:55 ID:???
最終的には実測してくれとしか言えないが
データを受け取ったプログラム側で調整することも視野に入れてみてはどうか。


ランダムで全レコードの中から1つだけ抽出する…という処理なら、
先にランダムな値を決めておいて、

 SELECT * FROM table_name WHERE id = $random_id ;

みたいな感じにするとか。


397 :NAME IS NULL:2009/06/25(木) 12:17:44 ID:Qv13kLE3
MySQLをアクセスできる状態のままdumpすることはできるのでしょうか?
サーバを2台用意できないのでレプリケーションはできません

稼働したままバックアップ取るなら最低でもロックをして、
一時的にでもリードできないようにする必要はありますか?

398 :NAME IS NULL:2009/06/25(木) 13:29:30 ID:???
>>397
>MySQLをアクセスできる状態のままdumpすることはできるのでしょうか?

出来るけど、お金を掛けずに整合性を保ってダンプしたいなら
ロックをする必要があります。
お金があるなら InnoDB Hot Backup を使うという手も。

>サーバを2台用意できないのでレプリケーションはできません

レプリケーションはサーバ一台でも出来る筈。
マスターとスレーブでポートを分ければ良いだけじゃない?

>稼働したままバックアップ取るなら最低でもロックをして、
>一時的にでもリードできないようにする必要はありますか?

InnoDB みたいなクラッシュリカバリを備えているストレージ
エンジンならディスクの側でスナップショットを取るという
方法もあります。これは使っている OS やストレージに依ります。

間違えてたらごめんね。

399 :NAME IS NULL:2009/06/26(金) 11:38:19 ID:6Q9NAgpu
オウム手配犯3人写真 
平田 信(44歳)
http://www.keishicho.metro.tokyo.jp/jiken/tehai/image/hirata001.jpg
高橋克也(51歳)
http://www.keishicho.metro.tokyo.jp/jiken/tehai/image/takahashi001.jpg
菊地直子(37歳)
http://www.keishicho.metro.tokyo.jp/jiken/tehai/image/kikuchi001.jpg

400 :NAME IS NULL:2009/06/26(金) 12:20:09 ID:???
InnoDBしかつかってないシステムなら
mysqldump --single-transactionで
オンラインバックアップ取れる

401 :NAME IS NULL:2009/06/26(金) 23:02:37 ID:???
最近必要に迫られDBをいじっています。
で、使用しているのはwindows版のmysql4.2です。

現在100万レコードでTELNO char(11)にNORMAL インデックスを張っています。
この中から連続する6桁の数字で終るデータを探すとき

(A) TELNO Like '%000000' or TELNO Like '%111111' or 〜略〜 TELNO Like '%999999'
(B) REGEXP (000000$|111111$|〜略〜|999999$)

(A)の方がかなり早いようなんですが、チューニングが悪いんでしょうか?
それとも正規表現は処理速度が遅いんでしょうか?

402 :NAME IS NULL:2009/06/26(金) 23:10:13 ID:???
>>399
こんなのが公表されてんだ、あいつらにとっちゃ好都合なもんだよな。探す媒体を増やすのは分かるが、どうなんかねえ

403 :NAME IS NULL:2009/06/27(土) 00:58:12 ID:mPR9r3bl
パフォーマンスが悪くなってshow processlistしてみたら
数十秒かかってるLockedなプロセス(INSERT文、UPDATE文)がいくつもあるんですが
どのような原因が考えられr、どう対処したらよいでしょうか?
なるべくKILLはしたくないです

404 :NAME IS NULL:2009/06/27(土) 09:11:35 ID:???
>>401
インデックスが効くのは完全一致か前方一致検索だけ。
つまり LIKE '000000%' ならインデックスが効くけど
LIKE '%000000' はインデックスが効かない。
末尾6桁だけからなる新しいカラムを追加しよう。

>>403
UPDATE文が効率が悪くなっている可能性がある。
UPDATE文をSELECT文に書き換えてEXPLAINを取ってみる。

405 :403:2009/06/27(土) 12:59:01 ID:mPR9r3bl
>>404
EXPLAINしてみました。
UPDATEは単純で対象は1テーブルのいつも同じカラムで
タプルの特定はPRIMARY KEYしか使っていないのですが
急に効率がわるくなることはあるのでしょうか?

ただしレコード数は数千万と大きいです。

406 :NAME IS NULL:2009/06/27(土) 16:37:33 ID:???
>>403
全然つかっていないのに無意味にINDEX張っているとかいう可能性は?

407 :NAME IS NULL:2009/06/27(土) 17:04:43 ID:???
>>403
KILLより再起動が基本だね。

408 :403:2009/06/27(土) 17:33:08 ID:mPR9r3bl
インデックスはカラムA B C D Eに対して
PRIMARY A B C
INDEX1 A D
INDEX2 A E
という感じで必要で張っています。

考えてみたら、普段はほとんどINSERTしかしてないところを
パフォーマンスが落ちる前に大量のUPDATEを開始したので
それが原因かもしれません。

409 :NAME IS NULL:2009/06/28(日) 13:14:47 ID:6HSkCWFH
my.iniでdataのdirを複数記述してみたけどエラーはでませんでした。
でも後に記述した方にしか書き込まれていません。
複数のドライブに並列に書き込ませたいのですがそれはMYSQLだけでできますか?

410 :NAME IS NULL:2009/06/28(日) 13:30:52 ID:???
>>409
ヒント: パーティション

411 :NAME IS NULL:2009/06/28(日) 15:37:55 ID:6HSkCWFH
>>410
パーティションしてます。
一つのドライブをCとDに分けても
別々のドライブCとEに指定しても
並列して書き込めませんでした。
エラーが出ないならできるのかと思ったのですが。

412 :401:2009/06/29(月) 22:12:20 ID:???
>>404
週末留守にしていたので大変遅れました。
後方一致ってインデックス効かないんですね。
別切り出ししてやってみたいと思います。


413 :NAME IS NULL:2009/06/30(火) 00:27:55 ID:???
>>403
Locked じゃなくて、長時間かかっているクエリが原因

414 :NAME IS NULL:2009/06/30(火) 17:49:30 ID:???
datadirは一つだけど、その中のサブディレクトリを
別のドライブに移動することができるよ

415 :NAME IS NULL:2009/06/30(火) 22:54:48 ID:???
MySQLの本いろいろ見たんですが、解らん事あるのでお知恵をください。

データをインポートする場合です。
csv形式固定長で1レコード毎に改行コードが入る場合はすんなり行くのですが、これ
が、未改行の場合のインポートの仕方が解らないのです。

別会社のシステムで吐き出すため、改行入れてくれとも言えず、仕方ないので自前で
改行挿入するプログラムを噛ませて取り込んでいるのですが、そのまま出来ないもの
かと思いまして。

こう定義すれば出来るとか、それは出来ないとか教えてもらえれば幸いです。


416 :NAME IS NULL:2009/07/01(水) 00:46:51 ID:???
>>415
レコードの区切り文字が改行コードでない?
じゃあレコードは何で区切られてるの?

417 :NAME IS NULL:2009/07/01(水) 02:30:31 ID:???
だからカラム数で区切られてないんじゃないの?

418 :NAME IS NULL:2009/07/01(水) 02:52:57 ID:???
なんで、だからなのかな。
汎用機からエクスポートされたデータでパディング付きの固定レコード長だったり、
単に LF 以外の文字を改行マークとしている事を改行コードが無いと言ってるだけかもよ。

後者なら LINES TERMINATED BY で済むかもしれないけど、前者なら…

419 :NAME IS NULL:2009/07/01(水) 10:52:22 ID:nypSdZ/x
唐突にすみません。
MySQLで質問です。
ありがちなLAMP構成でMySQLは4.1.22、MASTER-SLAVEで構成されてます。
PHPからスレーブにSELECT文を投げつけたんですが、あるプロセス一つだけ
消せずに困ってます。
プロセスリストを見ると、件のプロセスはpreparingのまま動いていないようで
それ自体をKILLしてもまた新たにプロセスが再開され、またpreparingで止まって
しまいます。
この場合、プロセス自体を完全に停止させる方法ってあるんでしょうか?

420 :NAME IS NULL:2009/07/01(水) 19:37:11 ID:x7PEdshB
MySQLはindexを同時に1つしか使わないと聞いたのですが、たとえば
「where a=? && b=?」
なら index(a,b) でいいと思うのですが、

「where (a=?||b=?)」
といった場合にindexを効率的に付けるにはどのようにしたらよいのでしょうか?

index(a), index(b) とするのがいいのでしょうか?

よろしくお願いします。


421 :415:2009/07/01(水) 23:11:09 ID:???
>>416-418
舌足らずで申し訳ないです。
例えば、以下のような感じです。

項目A char(10)
項目B char(15)
項目C char(05)
項目D char(40)

だとすると

ホスト出力ファイルは全ての項目が固定長で
項目A,項目B,項目C,項目D,項目A,項目B,項目C,項目D,〜略〜項目A,項目B,項目C,項目D[EOF]

コレを自前で
項目A,項目B,項目C,項目D\n
項目A,項目B,項目C,項目D\n
項目A,項目B,項目C,項目D\n

と変換して取り込んでいるんです。
これでイメージつかめますか?

422 :NAME IS NULL:2009/07/02(木) 11:33:43 ID:???
>>420
うまくいけばindex mergeするかもしれないけど
aとbにそれぞれindexつけて
select ... where a = ?
union
select ... where b = ?
とするのはどう。
OracleでもPostgreSQLでもこの手のクエリは苦手

423 :NAME IS NULL:2009/07/02(木) 18:54:37 ID:R3n1Iv0v
質問です。
MySQLのストアドプロシージャで
下記のようなクエリを実行しようと思っております。

 DECLARE _tblName VARCHAR(12);
 SET _tblName = "testtbl";
 SELECT `hoge` INTO @res FROM _tblName WHERE `hogeid` = 1;
 INSERT INTO `resulttbl`(res) VALUES (@res);
 
このようにした場合、ストアド自体はCREATEされるのですが
_tblName自体をテーブルの名前として認識してしまい、
実行時に「_tblNameというテーブルが無い」というエラーで停止します。

 SET @tblName = "testtbl";
 SELECT `hoge` INTO @res FROM @tblName WHERE `hogeid` = 1;
 INSERT INTO `resulttbl`(res) VALUES (@res);
 
このようにした場合
「' WHERE `hogeid` = 1; ' の周辺でsyntax error」のエラーが出て
ストアド自体がCREATEできません。

要は変数にテーブル名を定義し、それをクエリで使いたいということなのですが
他に何か方法はありますでしょうか?

424 :NAME IS NULL:2009/07/02(木) 23:59:25 ID:zf5eYLXR
>>422
ありがとうございます。なかなか難しいですね。
unionという手もあるんですね。有難う御座います。試してみます。


425 :NAME IS NULL:2009/07/03(金) 08:58:52 ID:bnHp31se
>>422

PostgreSQLはbitmap scanが実装されたんでORでも速い。

試してみ。MySQLよりRDBとしてかなり良いぞ。



426 :NAME IS NULL:2009/07/04(土) 23:14:23 ID:???
MySQL4.1-->5.0にして戸惑ったんで質問です。
テーブルaにカラム1〜9があると仮定します。
MySQL4.1では、カラム1〜7のみデータをinport出来ていたのですが、
5.0だとカラム8〜9も追加したカラム1〜9からなるデータでないとinport
できませんでした。
仕様変わったんですか?
まぁ正確なデータを作成していないのが悪いんですが、ファイル作成
プログラム作り直したりと、かなり不便ですねぇ。


427 :NAME IS NULL:2009/07/05(日) 16:22:01 ID:???
>>426
カラム名を1..7だけ指定してimportすれば済む話じゃね?

428 :NAME IS NULL:2009/07/05(日) 22:17:09 ID:???
>>426
カラム名指定でインポートなんて出来るんですか(知らんかったです
web徘徊してやり方覚えてきます。

429 :NAME IS NULL:2009/07/05(日) 22:18:01 ID:???
レス番、間違った。
>>427だった、自分にresしてどうするw

430 :NAME IS NULL:2009/07/06(月) 17:02:45 ID:???
キーがユニークキーがひとつのとき、
fld1 char(10) uniqueと書くのと、
primary key(fld1)と書くので
何か性能面等で違いは出ますか?

431 :NAME IS NULL:2009/07/08(水) 06:19:53 ID:???
>>430
InnoDBならPrimary Keyの方が速い

これを読もう
http://www.mysqlconf.com/mysql2009/public/schedule/detail/6661


432 :NAME IS NULL:2009/07/08(水) 21:59:33 ID:???
上でカラム指定インポートの質問したものですが、追加でまた御教示ください。
邪道かもしれませんが、各カラムが日本語名となっております。
上記のインポートの際、
LOAD DATA INFILE "sample.txt" INTO TABLE sample_table (`カラム1`,`カラム2`,〜略〜,`カラム7`)
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n';
としてもエラーになります。
カラム指定の場合、日本語表記カラムはNGなんでしょうか?


433 :NAME IS NULL:2009/07/09(木) 20:58:06 ID:???
my.cnfでメモリ周りのチューニングを行おうと思ってます。
現在InnoDBのみ利用しています。
この場合key_buffer_sizeの項目はInnoDBでは全く利用していないということで最小値に設定してまってもいいのでしょうか。
他の部分で少しでも利用分を増やしたいと思っています。
よろしくお願いします。

434 :NAME IS NULL:2009/07/09(木) 21:20:59 ID:???
>>432
エラー内容とか、テーブルのカラムのデータ型とか書いた方がいいと思うよ。
「エラーになった」だけじゃ情報不足かと。

435 :NAME IS NULL:2009/07/10(金) 06:44:47 ID:???
>>433
クエリで内部的にMyISAMのテーブルを作ることがある
1MBぐらいは残しておいたほうがいいよ

436 :NAME IS NULL:2009/07/10(金) 09:16:01 ID:???
ある意味どうでもいい事かもしれませんが、ユニークな項目としてauto incrementを使う事ってあるのでしょうか?
個人的にauto incrementは好きではないのですが・・・。

437 :NAME IS NULL:2009/07/10(金) 19:41:26 ID:???
>>436
>auto incrementは好きではない
気持ちはわかる。
勝手に数字をふられるのが嫌なんだろ。
オレも最初はそうだった。

しかし、今では望んで使う。
レコード固有の一意な識別子としては
とても便利だからだ。

理由や理想じゃない。
我慢してちょっと使ってみろ。


438 :NAME IS NULL:2009/07/10(金) 20:02:57 ID:???
明示的に nextval か auto increment か、という話じゃないのけ?
俺はinsertした後に「さっきの値」を取得するという操作がなんとなく
気に入らない。

439 :NAME IS NULL:2009/07/10(金) 20:05:48 ID:???
sequenceも欲しい

440 :NAME IS NULL:2009/07/10(金) 22:18:33 ID:???
>>435
ありがとうございます!
予期せぬときに影響出そうですね。
多少多めに残しておくことにします。

441 :NAME IS NULL:2009/07/10(金) 22:43:40 ID:???
ようじょ

442 :NAME IS NULL:2009/07/10(金) 23:14:05 ID:???
>>434
内容無さ杉ですね、すみません。
以下のようなテストをしてみました。

使用DBはwindows版の5.0.83-community-nt MySQL Community Editionです。

「test_001」dbに、以下のコマンドでテーブルを作成。

CREATE TABLE `test_tbl` (
`基準日` int(8) NOT NULL default '0',
`業営所コード` int(3) NOT NULL default '0',
`営業所名` varchar(10) default NULL,
PRIMARY KEY (`基準日`,`業営所コード`)
) ENGINE=InnoDB DEFAULT CHARSET=sjis;

dドライブ直下に、以下の内容のtest.csv(基準日、営業所コードのみであり、営業所名はないデータで3レコード)を作成。

20080601,101
20080602,102
20080603,101

以下のコマンドにてインポート処理実施

LOAD DATA INFILE 'd:/test.csv' INTO TABLE test_tbl (`基準日`,`営業所コード`)
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\r\n';

で以下のエラーが発生。

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 'FIELDS TERMINATED BY ',' LINES TERMINATED BY '\r\n'' at line 2

という具合です。
MySQLのHPを見るとSQL文は良い様に思えるのですが、どこか間違っているのでしょうか?



443 :NAME IS NULL:2009/07/11(土) 06:18:03 ID:???
>>442
テーブルのカラム名が"業営所コード"になってるのはタイプミス?

CSVインポートのSQLは"営業所コード"になってるみたいだけど。

444 :443:2009/07/11(土) 06:49:21 ID:???
>>442
以下のSQLで行けましたよ。ちなみに環境はwindowsの5.0.82。

LOAD DATA INFILE 'D:/test.csv'
INTO TABLE test_tbl
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\r\n'
(`基準日`,`営業所コード`)

445 :NAME IS NULL:2009/07/11(土) 09:26:20 ID:???
どうタイプミスをしたら業営所になるんだろ(*´д`*)

446 :NAME IS NULL:2009/07/11(土) 09:35:36 ID:???
>>445
そこかよw

447 :442:2009/07/11(土) 22:54:02 ID:???
大変申し訳ないです、全く気付きませんでした。
月曜会社行ったら確認してみます(大汗


448 :NAME IS NULL:2009/07/13(月) 12:39:24 ID:5irjkhq8
REPAIR TABLE してる間に更新していいの?

449 :NAME IS NULL:2009/07/13(月) 12:57:25 ID:???
writeロックかかってるから、待たされるだけだろ。

450 :442:2009/07/13(月) 22:21:37 ID:???
無事やりたい事が出来ました。
カラム指定って一番最後でないと駄目みたいですね、>>443さんありがとう。

あ、カラム名が"業営所コード"って具合になってた原因は、navicat for mysql使ってるんですが、
これでテーブル定義すると結構な確立でなるんですよね。
普段はエディタでゴリゴリ書いちゃうんであまり気にしてませんでした(汗


451 :NAME IS NULL:2009/07/13(月) 23:54:48 ID:pM3FPDeT
MySQLの文字コードの事なんですが『\(全角のバックスラッシュ)』の表示が正しくできません。

EUCのサイトのフォームからMySQLに入れ、
これをEUCで取り出すと半角の\になってしまいます。
MySQLのデフォルト文字コードはUTF8で、UTF8で取り出しても同様です。
ただコマンドプロンプト上でSJISで取り出した時はちゃんとバックスラッシュになるので、これをEUCでバックスラッシュにできないですか?

入出力時はちゃんとset names ujisは使ってますし、入れるときもエスケープ処理してます。

452 :NAME IS NULL:2009/07/14(火) 00:43:12 ID:L0cdOLHt
すみません、他愛無い質問なんですが
日記のプログラムを書くとして、画像のアップロードも各日ごとに1つファイルをアップできるとします
そのとき、登録情報を入れるテーブルに fileUpload みたいなカラムを作って
ファイルのアップがあれば1入れる、みたいにした方が良いでしょうか?
現状はスクリプト側で file_exists($file) みたいにして格納済みファイルのパスを確認してますが、、
汎用性を考えたら専用のカラムに明示した方が良いんでしょうか

453 :NAME IS NULL:2009/07/14(火) 06:57:35 ID:???
>>451-452
ここの住人はプログラムに関してはド素人なので他で聞いた方がいいと思います。

454 :NAME IS NULL:2009/07/14(火) 08:30:37 ID:???
アップロードファイルのテーブルを作って、
日記のID, パスとかにすれば、
1日1ファイルじゃなくても大丈夫だぞ。

そのテーブルに、特定の日記に紐付くレコードがあれば
アップロードされたファイルがあるってことになる。

455 :NAME IS NULL:2009/07/14(火) 10:54:56 ID:L0cdOLHt
>>454
その場合、
日記の本文を登録するテーブルへのinsert処理と
uploadファイルの情報を専用のテーブルに登録する処理をトランザクションで
まとめて実行する、って考えで良いですか?
本文の登録のmysql_insert_id();を途中で取得して、画像情報テーブルに紐付け要素として
入れる感じ?


456 :NAME IS NULL:2009/07/14(火) 12:07:15 ID:???
>>453
マジで?プログラム使わずにMySQLだけだと出来る事が限られない?

457 :NAME IS NULL:2009/07/14(火) 13:17:51 ID:???
>>456
データ出し入れするだけなら初級程度のプログラムで十分ですから。

458 :NAME IS NULL:2009/07/14(火) 14:51:58 ID:???
MySQLが5.1になったらしいからインストールしてみたらイルカの写真が入ってただけだったわ。

459 :451:2009/07/14(火) 15:29:51 ID:Luc8mMqT
解決しました。
テーブルのコードをutf8からEUCに変更しただけで\が\にならなくなりました。
つまりクライアント側の文字コードとDBの文字コードは同じにしなければいけないってことだと思うのですが
ネット上だと必ずしもDB側のコードと同じコードでPOSTされるわけではないので困ります。

■以前の流れ■
EUCでPOST→set names ujis→utf8のDBに格納
クエリ(select)→set names ujis→EUCでprint

↑これだと\が\になる(他の文字は問題ない)

utf8で保存すると平仮名で検索してカタカナも表示できたり便利だったのですが、やっぱり全てのテーブルをEUCにするのが一番良いのでしょうか?
他に解決方法があれば教えて下さい。

460 :451:2009/07/14(火) 16:40:28 ID:???
さらに実験してみました。

UTF8のページでpost → set names utf8 → UTF8のDBに格納
select → set names utf8 → UTF8のページでprint

↑上記においても\が\に変換される事はありませんでした。
文字コードが同じだから当然といえば当然ですが、
SJISとutf8、SJISとujisとの変換も問題ありませんでした。

よってこれはutf8とEUCの間における変換のバグなのでは?
バグでないとしても利便性が悪いので改善してほしいです。
この様な要望はどこに出せばいいのでしょうか?

参考までに
UTF8のページでpost → set names utf8 → UTF8のDBに格納
select → set names ujis → EUCのページでprint
だと\は?になりました。

それ以外の文字は全く問題ありませんので普段DBに\を入れない人は気が付かないのではないですか?
試しに自分のDBに\をぶち込んでみて下さい。

※使用したDBは5.0と5.1です。

461 :NAME IS NULL:2009/07/14(火) 18:18:44 ID:???
相変わらずバグだらけだなww
遠慮無くポスグレ使えよ

462 :NAME IS NULL:2009/07/14(火) 19:01:33 ID:???
確かにポストグレはバグ少ないよな

463 :NAME IS NULL:2009/07/14(火) 19:26:41 ID:???
なんで PostgreSQL 人気がないのか分からない。
速度も MySQL に勝つくらいになったし、いい本もあるし。

464 :NAME IS NULL:2009/07/14(火) 20:35:58 ID:???
っていうかポストグレだってきっと潜在バグあるだろーか。
mysqlだけが悪いように書くなや。

465 :NAME IS NULL:2009/07/14(火) 21:00:15 ID:???
お金払えばサポートしてくれるよw

466 :NAME IS NULL:2009/07/14(火) 21:00:33 ID:???
わかったからウンコグレ厨は氏ねよ。

467 :NAME IS NULL:2009/07/14(火) 21:10:18 ID:???
>>453
文字コードの話をプログラミングだと思い込むようなド素人はそんなにいないから安心しれ。

468 :NAME IS NULL:2009/07/14(火) 21:45:55 ID:???
これWindowsの話だよね?
俺もさっきやってみたら確かに同じ現象が出たw
バグかどうか知らんがユーザーの会のQ&Aにも無い事象だから
今まで誰も気が付かなかったんだろうねw
多分MySQL側がWindowsに配慮して文字コードを変える時にわざわざ\にしてるんだと思うけど。

469 :NAME IS NULL:2009/07/14(火) 22:49:18 ID:???
MYSQL撃沈決定!

470 :NAME IS NULL:2009/07/14(火) 23:16:59 ID:f5HzR+ae
神様お助けを。。

トップページを表示する際に、mysqlを使用してユーザー情報の「挿入」「更新」
をしているんだけど、アクセス数がふえるとタイムアウトしてしまう。

MySQLのログを調べたところ、
+--------+----------------------+-----------------+-------------+---------+------+----------+--------------------------------------------------------------------------------------------------------------
| Id | User | Host | db | Command | Time | State | Info
+--------+----------------------+-----------------+-------------+---------+------+----------+--------------------------------------------------------------------------------------------------------------
| 256912 | ****** | localhost | *********** | Query | 33 | Locked | insert into **** ....
| 256913 | ****** | localhost | *********** | Query | 33 | Locked | update .....

のような感じで、どうやらSQL文がロックされていることが原因。

しかし、
$query="LOCK TABLES ほにゃらら WRITE";
mysql_query($query,$dh);
とかいう記述で、データベースをロックはしていない。

だれか解決策をお願いします。
神様

471 :NAME IS NULL:2009/07/14(火) 23:17:54 ID:???
↑アホ

472 :NAME IS NULL:2009/07/14(火) 23:25:10 ID:???
リファレンスより
> LOCK TABLES は、現在のスレッドに対してベース テーブル (ビュー以外) をロックします。

473 :NAME IS NULL:2009/07/14(火) 23:32:18 ID:???
↑アホ死ね

474 :NAME IS NULL:2009/07/14(火) 23:33:36 ID:f5HzR+ae
>>471
アホ何でここで聞いてます。
解決策がわかるのなら、教えていただけると非常にうれしい。

>>472
ありがとう。
LOCK TABLES は使用してません。

どなたか分かりやすく教えて下さると非常に助かるm(_ _)m


475 :NAME IS NULL:2009/07/14(火) 23:34:18 ID:f5HzR+ae
>>473
死なす前にアドバイスを。。。

476 :NAME IS NULL:2009/07/14(火) 23:51:35 ID:???
↑氏ねボケ

477 :NAME IS NULL:2009/07/15(水) 00:02:05 ID:kLERGQuj
>>476
氏んでほしいんですね。


神様お助けを。。

トップページを表示する際に、mysqlを使用してユーザー情報の「挿入」「更新」
をしているんだけど、アクセス数がふえるとタイムアウトしてしまう。

MySQLのログを調べたところ、
+--------+----------------------+-----------------+-------------+---------+------+----------+--------------------------------------------------------------------------------------------------------------
| Id | User | Host | db | Command | Time | State | Info
+--------+----------------------+-----------------+-------------+---------+------+----------+--------------------------------------------------------------------------------------------------------------
| 256912 | ****** | localhost | *********** | Query | 33 | Locked | insert into **** ....
| 256913 | ****** | localhost | *********** | Query | 33 | Locked | update .....

のような感じで、どうやらSQL文がロックされていることが原因。

しかし、
$query="LOCK TABLES ほにゃらら WRITE";
mysql_query($query,$dh);
とかいう記述で、データベースをロックはしていない。

だれか解決策をお願いします。
神様

連投すいません。

478 :NAME IS NULL:2009/07/15(水) 00:32:10 ID:???
>>451
その場合EUC-JPとしてujisじゃなくてeucjpmsを使う。
MySQLとしては4年前に対策済み。

このへんの記事をどうぞ。
http://www.mysql.gr.jp/mysqlml/mysql/msg/12442

479 :NAME IS NULL:2009/07/15(水) 00:37:14 ID:???
>>477
情報小出しがよくない。
・対象のテーブルについてshow create table XXX\G
・例示しているshow processlist;を省略しないで全部書く
・my.cnfもさらす
話はそれから。

480 :NAME IS NULL:2009/07/15(水) 00:38:44 ID:???
だからポスグレ使えばいいじゃん。こんなクソみたいなDBにいつまでもしがみつくなって。

481 :NAME IS NULL:2009/07/15(水) 01:10:17 ID:DEAJvIl0
バカ共晒し上げ

482 :NAME IS NULL:2009/07/15(水) 03:34:49 ID:???
>>477
情報があまりにも小出しで憶測でしか回答できないんだけど
要するにユーザーエージェントとかIPアドレスとかリファラを取得してそれをDBに入れたいって事だよね。
この流れの中に著しく遅くなる原因があるとすれば
思い当たるのはIPアドレスからホスト名を得る場合に若干遅くなるので
それが溜まって遅延するのかも。

それにしてもPHPがタイムアウトする程遅いというのは若干異常。
マイクロタイム関数とかでどの処理に時間がかかってるのかを調べた方がいい。
MYSQL側は、一つのスクリプトで不必要にコネクトやクローズ繰り返したりせず
テーブル設計も不必要に大きくせず、不必要なクエリを送ったりしなければ
デフォルトで十分速いので大丈夫。

483 :NAME IS NULL:2009/07/15(水) 05:41:32 ID:kZc9K5py
>>479
有難うございます。
+--------+----------------------+-----------------+-------------+---------+------+----------+---------------------------------------------------------------------------------------------------------------------------------
| Id | User | Host | db | Command | Time | State | Info
+--------+----------------------+-----------------+-------------+---------+------+----------+----------------------------------------------------------------------------------------------------------------------------------
| 256912 | ****** | localhost | *********** | Query | 33 | Locked | insert into user (個体識別,初めての時間,最新の時間,UA,訪問履歴,どこから来たか) values ('XXXX','1247543954','1247543954','DoCoMo....','1247543954idx,','5')
| 256913 | ****** | localhost | *********** | Query | 33 | Locked | insert into user (個体識別,初めての時間,最新の時間,UA,訪問履歴,どこから来たか) values ('YYYY','1247543954','1247543954','DoCoMo....','1247543954idx,','5')
| 256914 | ****** | localhost | *********** | Query | 33 | Locked | update user set 最新の時間='1247543954',comedate='1247543914idx,1247543945idx,' where 個体識別'xxxxxxx'
| 256915 | ****** | localhost | *********** | Query | 33 | Locked | update user set 最新の時間='1247543954',comedate='1247543914idx,1247543945idx,' where 個体識別'yyyyyyy'
そのほかは用意できしだい、載せます。




>>482
有難うございます。

>要するにユーザーエージェントとかIPアドレスとかリファラを取得してそれをDBに入れたいって事だよね。
そのとおりです。
携帯サイトなんですけど、ユーザー情報の種類は情報は
・個体識別番号
・機種名(UA)
・初めて訪問したUNIX時間
・最新のindexに訪問したUNIX時間
・訪問履歴、いつどこのページに訪問したか(時間index.php,時間main.php、時間out.php......)
・どこからきたユーザーか
です。ですからトップページへアクセスすると必ず
select->insert
もしくは
select->update
という流れが発生します。


>思い当たるのはIPアドレスからホスト名を得る場合に若干遅くなるので
それが溜まって遅延するのかも。
htacssessでIP制限をかけたうえで、UAでDoCoMoなどは判断しております。
よってIPアドレスからホスト名得るような記述はありません。

>それにしてもPHPがタイムアウトする程遅いというのは若干異常。 マイクロタイム関数とかでどの処理に時間がかかってるのかを調べた方がいい。
自分も異常だと思います。
マイクロタイム関数ではないんですけど、やはりSQL履歴をみると、
多数の処理がロックされてしまっているのが原因のようです。

解決策がわかりません。。。。。
たしかにそこそこアクセスはあるんですけど、
感覚的にタイムアウトしてしまうほどの処理の量はありえないと思うんですが。。。。


484 :NAME IS NULL:2009/07/15(水) 09:29:44 ID:???
>>483
insertもupdateも原則爆速なのでselectの方法に問題があるのかも。
PHP側の処理で時間がかかりDBがその間待たされてる可能性もあるのでどっちに原因があるのかは調べた方がいいけど。

485 :NAME IS NULL:2009/07/15(水) 10:13:38 ID:mKEXFaxl
>>484

selectに関しては、

select 初めての訪問時間,最新の訪問時間,訪問履歴 from user where 個体識別='そのアクセスの個体識別'

というように毎回発行し、

結果行数が一行(訪問したことがある)の場合はupdate,
結果行数が0行(初めての訪問)の場合はinsert

というようにSQL文を発行しています。

SQLクエリ自体がロックされている(待たされている)ので、
SQL文を受ける側、DB側、に問題があるかと思います。

486 :NAME IS NULL:2009/07/15(水) 10:20:26 ID:mKEXFaxl
補足情報です。
現在テーブル「user」は約2万行のデータが入っております。
しかしインデックスは作成していません。(特に何もしてません)
それが原因でしょうか??

ランタイム情報 を見たところ、

Handler_read_rnd_next 1,526 M
データファイルの次の行を読み込んだリクエストの数。この値が高いのはテーブルスキャンを大量に実行しているためです。一般にこれはテーブルのインデックスが不適切か、クエリがインデックスを利用するように書かれていないことを意味します

と記述があります。
1,526 Mというのは多い方なのでしょうか??

487 :NAME IS NULL:2009/07/15(水) 10:30:33 ID:???
多いね。
このスレのみんなが質問に答える気がなくなるぐらい多いよ!

488 :NAME IS NULL:2009/07/15(水) 10:42:21 ID:???
>>486
Σ(゜д゜;)
はっきり言うと「お前がデータベース触るのはヤメロ」と言いたくなる数字

489 :NAME IS NULL:2009/07/15(水) 10:43:50 ID:mKEXFaxl
インデックスを作成したところ、あっさりと解決できました。
お騒がせしました、感謝します^^

490 :NAME IS NULL:2009/07/15(水) 11:37:21 ID:???
時期が時期だし米ではMyQL(マイクェル)みたいな新DB立ち上がったりしてないのかね。
正直選択に困る時代になったなあ…
ポスグレはレンサバが対応してないことも多いし。

491 :NAME IS NULL:2009/07/15(水) 11:53:59 ID:???
MySQL に ISAM や InnoDB のように PostgreSQL があれば…

492 :NAME IS NULL:2009/07/15(水) 12:19:59 ID:???
>>478
ついでに言っとくと、文字コード指定で、
sjisとujisは使わないほうがいい。
かわりに、cp932とeucjpmsを使うべき。

ちなみに、そうなった原因は、ユニコード
コンソーシアムが非常識だったせい。
MySQL ABはあんまり悪くない。


493 :NAME IS NULL:2009/07/15(水) 12:41:08 ID:???
>>490
MariaDBつくっとるよ
http://www.atmarkit.co.jp/news/200905/14/mysql.html

494 :NAME IS NULL:2009/07/15(水) 20:30:30 ID:???
で、まだMySQLはsun製って事になってるけどいつ頃にOracle製って表記されるようになる予定なの?

495 :NAME IS NULL:2009/07/16(木) 07:32:31 ID:???
>>455
そうだね。トランザクションでやることになると思う。
ただ、日記のIDを通番とかじゃなくて、先にIDがわかる方法(日付/時間ベースで振るとか)なら、
先にuploadファイルの方をINSERTしてから、日記INSERTでも良さそうだけど、
途中でエラーが起こることを考えたら、やっぱりトランザクションにした方がいいと思う。

496 :NAME IS NULL:2009/07/16(木) 07:41:48 ID:???
バカの一つ覚えみたいにトランザクションを連呼する奴多いよな

497 :NAME IS NULL:2009/07/16(木) 07:56:25 ID:???
>>489
ポスグレは賢いからインデックス使わなくても速い
乗り換えるなら今だよ

498 :NAME IS NULL:2009/07/16(木) 09:54:56 ID:Vmzny5Cb
select * from sampleTBL where (`name1` like '%山田%' or `name2` like '%山田%') and `hobby` like '%野球%' and `loginLevel` = '1'

上記のクエリ文がうまく動きません
・名前(山田)がカラムname1,name2のいずれかに含まれる
・趣味(野球)がカラムhobbyの中に含まれる。「草野球」でもOK
・loginLevelは必ず1
という抽出条件で書いたつもりなんですが…
ご意見よろしくお願いします

499 :NAME IS NULL:2009/07/16(木) 12:57:21 ID:???
>>497
どんな魔法が使われているんですか?


500 :NAME IS NULL:2009/07/16(木) 13:41:45 ID:???
>>498
エラーメッセージは?

501 :NAME IS NULL:2009/07/16(木) 14:04:15 ID:???
>>499
根本的な出来が違うんだよ。

502 :NAME IS NULL:2009/07/16(木) 14:07:51 ID:???
ポスグレ?ポストグレ?

503 :NAME IS NULL:2009/07/16(木) 14:39:58 ID:???
>>498
以下のバグにあたってないか確認してみて。
Bug #32510
LIKE search fails with indexed 'eucjpms' and 'ujis' char column
http://bugs.mysql.com/bug.php?id=32510

504 :NAME IS NULL:2009/07/16(木) 15:42:09 ID:Vmzny5Cb
>>500,503
どうもありがとうございます

select * from sampleTBL where (`name1` like '%山田%' or `name2` like '%山田%') and (`hobby` like '%野球%') and `loginLevel` = '1'
としたら正常に動きました
複数条件で使う場合のlike節は()でくくらなきゃだめみたい?です
もうすこし勉強します。ありがとうございました

505 :NAME IS NULL:2009/07/16(木) 17:27:07 ID:???
スレ読んでて疑問に思ったんだが、NECやIBMの拡張文字を導入した際
UJISをバージョンアップするわけではなく
eucjpmsとして別に作りUJISを残した理由って何なんだ?

506 :NAME IS NULL:2009/07/16(木) 19:15:04 ID:???
>>505
文字を追加しただけじゃないから。
変換表も一部変更されてるはず。

あのsjis/ujisで満足するやつはいないと
思うが、それでもリリースしたからには
後方互換性が必要なんだろ。


507 :NAME IS NULL:2009/07/16(木) 19:17:14 ID:???
>>501
ぜひ違いを教えてください。


508 :NAME IS NULL:2009/07/16(木) 22:32:28 ID:???
utf8で満足してる私はひよっこですか

509 :NAME IS NULL:2009/07/17(金) 08:19:12 ID:???
ひょっとこ


510 :NAME IS NULL:2009/07/17(金) 08:56:40 ID:???
日本語使うならutf8が一番バグが少ない
オススメ

511 :NAME IS NULL:2009/07/17(金) 11:11:46 ID:???
utf8 だと「名前」や「一言メッセージ」に何バイト入れるか、が難しいよね。

euc-jp だといわゆる全角が 2byte だから、800 文字なら 1600byte でよかったけど。

みんなはどうしてるの?

512 :NAME IS NULL:2009/07/17(金) 12:27:12 ID:???
ユーザにバイト数を数えさせるのが間違いなんだと思う
EUC-JPには3バイト文字だってあるんだし
今後は全部文字数で。

513 :NAME IS NULL:2009/07/17(金) 12:29:54 ID:???
Twitterも140バイトじゃなくて140文字になってる

514 :NAME IS NULL:2009/07/17(金) 13:02:47 ID:???
varchar

515 :511:2009/07/17(金) 13:05:15 ID:???
ありがと。そうですね。文字数ですね。

varchar のバイト指定はどうしているの?
text を使うということ?

516 :NAME IS NULL:2009/07/17(金) 15:23:59 ID:???
varcharって文字数指定になってなかったっけ?

517 :NAME IS NULL:2009/07/17(金) 16:33:52 ID:???
varcharも文字数だよ。MySQL4.1以降。

518 :NAME IS NULL:2009/07/17(金) 17:29:28 ID:???
そうだったのか!ありがとうございます。

519 :NAME IS NULL:2009/07/17(金) 18:40:58 ID:???
少し余裕あるくらいのバイト数にしてる<varchar

520 :NAME IS NULL:2009/07/17(金) 19:47:22 ID:???
utf8は1文字あたり3バイト必要。
また、いずれ4バイトに修正される予定。


521 :NAME IS NULL:2009/07/17(金) 20:13:30 ID:???
Windowsのエクスプローラで、MySQLを止めずにdatadirのファイルを全部別のドライブにコピーしたいんだけど
コピー中もDBが更新されてても、コピー完了時に双方のファイルは完全に一致する?

522 :NAME IS NULL:2009/07/17(金) 21:46:32 ID:???
>>521
だめ
一致しないどころかコピー先のDBは壊れてるぞ

523 :NAME IS NULL:2009/07/17(金) 22:23:12 ID:???
聞かなきゃわからんことか?

524 :NAME IS NULL:2009/07/17(金) 23:38:20 ID:???
まあ確かに

525 :NAME IS NULL:2009/07/18(土) 02:48:30 ID:???
MySQLのパスワードを忘れた時はもう一度インストールしなおせばいいんだよね?

526 :NAME IS NULL:2009/07/18(土) 03:29:47 ID:???
mysqlデータベースが残ったままだとインストールしなおしてもだめ
skip-grant-tablesでぐぐれ

527 :NAME IS NULL:2009/07/18(土) 11:33:43 ID:kUbe0jQy
教えてください。

SELECT * FROM table where column1 = '$a' AND column2 = '$b'


PHPで検索する時に$bに文字が入っていたらcolumn1とcolumn2から探し
入っていなければcolumn1だけから探したいのですが
ANDじゃなくORだと検索結果が変わってしまいます。
かといってselectの文を$bが入っている時用といない時用で2つも書くのもごちゃごちゃするので
一行で書く方法って無いですか?

528 :NAME IS NULL:2009/07/18(土) 11:50:14 ID:???
>>527
何もクエリ全体を二つ書く必要はないだろ。
WHERE句のAND条件の部分だけ、PHPのIF文か何かで判断して
追加させるかどうか分岐させればいい話。




529 :NAME IS NULL:2009/07/18(土) 21:09:24 ID:???
... AND (column2 = '$b' OR '$b' IS NULL)

530 :NAME IS NULL:2009/07/18(土) 21:26:55 ID:???
引数bが空文字だったらどうする気なの?

531 :NAME IS NULL:2009/07/18(土) 22:14:30 ID:???
なに言ってんの? それは空文字を探すという意味だろう?

532 :NAME IS NULL:2009/07/18(土) 22:51:31 ID:???
それだと>>527の要件を満たさないだろ。

そもそもウェブアプリなら、プログラム側で何かしない限り、
入力がNULLという事はあり得ないのでは?


533 :NAME IS NULL:2009/07/18(土) 23:16:14 ID:???
すみません,
mysqlでlike検索してるんですが,
時間がかかりすぎて困ってます.
CPU使用率を見たらIdle Processが90%以上あるのに
mysqldの使用率は5%未満...

もっとCPU使えばいいのにと思うのですが,
これはFileIOで時間食ってるだけで
検索自体はもう早くならない感じでしょうか?

534 :NAME IS NULL:2009/07/19(日) 00:21:55 ID:???
mysqlのデータファイルがあるドライブがCRCエラーなんだけど、少したりとももう救えないのかな(。・_・。)
マメにバックアップとっとくんだった…

535 :NAME IS NULL:2009/07/19(日) 03:38:08 ID:???
>>533
1つのSQLはどんなにがんばってもCPUコア1個しか使わないぞ

536 :533:2009/07/19(日) 04:37:04 ID:???
>535 レスどうもです
Coe2Duoだからコアは二つあるけど5%未満なので一つもフルに使ってないです

ttp://d.hatena.ne.jp/sanjapo/20070525
とか見て各種サイズは結構大きくしましたけれどあまり影響がないようでした.

537 :NAME IS NULL:2009/07/19(日) 11:54:52 ID:???
>>536
InnoDBならinnodb_buffer_pool_sizeも見直さないとダメだぞ。
そっちは見た?

538 :NAME IS NULL:2009/07/19(日) 16:30:05 ID:???
>537
うぉおおおお
ありがとうございます
256M->512MB
ですごい高速化がされました

各種修正魔に比べてメモリ倍くらい食ってるけど
これでいってみます.

539 :NAME IS NULL:2009/07/19(日) 20:37:13 ID:???
すごいエスパーだ

540 :NAME IS NULL:2009/07/21(火) 15:42:38 ID:yYCdTavm
MySQL の動いていたサーバをバックアップしたとき,
ダンプじゃなくて /var/lib/mysql (MyISAMとかInnoDBのファイルがここに)
をそのまま(ただし MySQL は停止した状態)コピー
しておいたんだけど,これって再び MySQL に食べさせないと
中身を取り出すことできませんか?

ファイルから直接 mysqldump で SQL 取り出したい・・・

541 :NAME IS NULL:2009/07/21(火) 16:10:52 ID:???
>>540
無理。
でもオープンソースだから
自分でそういうツールを作るというならとめない

542 :NAME IS NULL:2009/07/22(水) 16:42:13 ID:???
それ一回食べさせて吐かせてもう一回元のやつ食べさせればいいだけじゃん

543 :NAME IS NULL:2009/07/23(木) 01:38:42 ID:t2nNTgSy
そのプログラム、1000万くらいでつくってもいいけど


544 :NAME IS NULL:2009/07/23(木) 01:41:13 ID:???
俺なら200万で作ってやる

545 :NAME IS NULL:2009/07/23(木) 04:31:08 ID:/6vymUJv
http://222.159.6.71

546 :NAME IS NULL:2009/07/24(金) 22:29:04 ID:???
データベースの設計で便利でフリーなツール教えてくれませんか?
テーブルが増えていくとややこしくなるので^^;

547 :NAME IS NULL:2009/07/24(金) 23:12:56 ID:???
OOo Base

548 :NAME IS NULL:2009/07/25(土) 01:23:26 ID:???
>>546
今月号のDBマガジン買え
http://www.seshop.com/detail.asp?pid=11155

549 :NAME IS NULL:2009/07/25(土) 17:53:05 ID:???
最近、DB始めました。よろしくです^^
とりあえず、マニュアルは5.1の読めばおkですかね?

550 :NAME IS NULL:2009/07/25(土) 18:23:11 ID:???
>>549
使ってるバージョン読めよ^^


551 :NAME IS NULL:2009/07/25(土) 21:22:54 ID:???
マニュアルとか必要ないんじゃないかな?sel,up,ins,delの基本だけ使って、あとは随時やりたいことがあった時にググレばいいんでない?

552 :NAME IS NULL:2009/07/27(月) 00:04:57 ID:???
一行当たり100〜5000文字(平均1000文字)の文字列が入ったフィールドに対して
Like '%文字列%' の部分一致検索を行う必要があるのですが、
これが750万行あるため、実用に耐えうるスピードで処理できません。

なんとか高速化を図りたいのですが、どういうところに手を入れたらいいと思いますでしょうか?
どうかお願いします。

553 :NAME IS NULL:2009/07/27(月) 05:28:18 ID:???
検索エンジンを使った方がいいのでは

554 :552:2009/07/27(月) 11:29:47 ID:???
>>553
検索エンジンですか?
WEBサイトではなく、MySqlのフィールドを検索エンジンに食わせることってできるのでしょうか?
できるのであれば、参考になるサイトなど教えていただけませんでしょうか。

とりあえずレスポンスをいただけるまでは自分で探してみます。

555 :NAME IS NULL:2009/07/27(月) 11:35:21 ID:???
手法としてデータベースを使うのではなくて、検索エンジンを使ったらということです。


556 :NAME IS NULL:2009/07/27(月) 12:55:05 ID:???
http://pc11.2ch.net/test/read.cgi/php/1118762053/

この辺とかどうでしょう。

557 :552:2009/07/27(月) 13:01:52 ID:???
>>555
なんどもどうもです。

いまいち把握できていないのです・・・
おっしゃっているのは、750万ファイルのページファイルを作成し、
Googleなどに読み込ませ、
キーワード site:hostname
で検索して結果を得よということでしょうか?

秘密文書が多いので、できればクローズに検索を行いたいのですが、
それは可能なのでしょうか?

また、質問ばかりで申し訳ないのですが、
Tritonnはどうなのでしょうか?
先ほど検索して見つけたばかりなのですが、
悪いうわさがないのならば一度試してみようと思います。

558 :NAME IS NULL:2009/07/27(月) 14:19:04 ID:???
Tritonnのような全文検索用ソフトウェアを使うのが
>>553 のいう「検索エンジンを使う」ってことですよ

559 :552:2009/07/27(月) 14:35:27 ID:???
>553、555、556、558
ちぐはぐな掛け合いに合ってしまい申し訳ありません。
(556は見落としてました、すみません)
皆さんありがとうございます。

提示していただいたように「検索エンジン」を用いて実装してみます。

560 :NAME IS NULL:2009/07/28(火) 01:43:08 ID:E3dl42nt
ある1つのテーブル内のデータをmysqldumpでダンプして
DROP TABLE文とCREATE TABLE文を消して
INSERT文以下のデータを、同じ定義のテーブルに入れたいのですが
このテーブルにはすでにデータが入っています。
キーが重複しているレコードを無視して重複していないレコードだけを
入れる簡単な方法はありますか?

561 :NAME IS NULL:2009/07/28(火) 04:25:31 ID:???
>>560
IGNORE

562 :NAME IS NULL:2009/07/28(火) 18:44:07 ID:???
ggrる内容じゃねーか。常夏野郎が

563 :NAME IS NULL:2009/07/29(水) 20:24:08 ID:???
asp経由で日本語文字列入れようとしたらエラーが出たんだが、MySQLって日本語使えないの?

564 :NAME IS NULL:2009/07/29(水) 21:05:36 ID:???
>>563
おまえが日本語使えないだけ。

565 :NAME IS NULL:2009/07/29(水) 22:00:24 ID:???
>>563
残念ながらエラー文は英語だけなんだ。がんばって解読してくれ!

566 :NAME IS NULL:2009/07/29(水) 22:44:11 ID:???
>>563
今日は良いことがあったから、今日だけ俺が訳してやるよ。
なんてエラー?

567 :NAME IS NULL:2009/07/29(水) 22:46:22 ID:???
文字コードがおかしいとか

568 :NAME IS NULL:2009/07/29(水) 23:17:15 ID:GbEs/oP6
一度に大量に削除する時ってロックかかるから
テンポラリテーブル使って少しずつ削除したりする?

569 :NAME IS NULL:2009/07/29(水) 23:43:14 ID:???
どっちにしろ、一度で消すか条件を絞って複数回に分けるかしかないと思うが?
テンポラリテーブルを使うって、どうやろうとしてるの?

570 :NAME IS NULL:2009/07/30(木) 00:09:48 ID:???
削除でテンポラリは利用したことないな

571 :NAME IS NULL:2009/07/30(木) 00:35:46 ID:???
実行が若干重い検索結果にjoinしていくつかのテーブルを削除するから
テンポラリにいったんidを入れてjoinに使おうと思ったの
言われてみれば、テンポラリテーブルの利用は本質的な問題じゃなかった
やっぱり段階的に削除していくしかないすなー

572 :NAME IS NULL:2009/07/30(木) 03:28:02 ID:???
お知恵をお貸しください。
レンタルサーバー(さくらインターネット)上の、MySQL4.0を使った容量3GBのデータベースを
バックアップしたいのですが、
mysqldump-4.0 でバックアップしようとすると、

mysqldump-4.0: Out of memory (Needed 3151304 bytes)
mysqldump-4.0: Got error: 2008: MySQL client run out of memory when retrieving data from server

とメモリ不足のエラーが出て途中までしかバックアップできません。

mysqldump だとエラー(Error: You have an error in your SQL syntax.)は出るものの、
一応最後までバックアップ出来るようですが、mysql、mysql-4.0 のどちらも、

ERROR 1193 at line 18: Unknown system variable 'character_set_client'

とエラーが出て、リストアできません。
MySQL4.0と5.0のバージョンが違うことが原因ではないかと思うのですが、
なにかバックアップとリストアをする方法はないでしょうか?
よろしくお願いします。

573 :NAME IS NULL:2009/07/30(木) 07:13:14 ID:???
読んで書き込むみたいなかんたんなバッチ作ってみれば?

574 :NAME IS NULL:2009/07/31(金) 01:30:44 ID:hLmzxvAT
はじめまして。質問です。
MySQLの5.0.58を使用しています。

SQLを組んでいて、知り合いから「SUMで集計するときはWHERE句の条件で必ずGROUP BYしたほうがいい。」と言われました。

理由を聞いたのですが、「お約束だから」とはぐらかされました。
(WHEREで絞り込んでいるのだから、GROUP BYの追加は無駄な構文解析が発生するだけだと思ったのですが、。)

例えば、
SELECT SUM(money) FROM receipt WHERE id = 1 ;
というSQLがある場合、
SELECT SUM(money) FROM receipt WHERE id = 1 GROUP BY id ;
というように、GROUP BY を追加したほうがいいというのです。

根拠となるようなものを探したのですが見つかりませんでした、。

どなたか理由を教えて下さい。

575 :NAME IS NULL:2009/07/31(金) 08:58:20 ID:???
根拠が見つからないのは根拠がないからだなー


576 :NAME IS NULL:2009/07/31(金) 09:50:46 ID:???
>>574
sumって、group byがなくても使えることを初めて知った。
ありがとう。

577 :NAME IS NULL:2009/07/31(金) 11:15:12 ID:???
べつにグループ集計いらなければ必要ないでしょ。

578 :574:2009/07/31(金) 12:15:53 ID:???
あらためて聞いてみたところ、
「昔ORACLEで、SUMを使う際にGROUP BYを指定しないとエラーになった。」
ということでした。

不要だと説明して追加しないことにしました。

579 :NAME IS NULL:2009/07/31(金) 12:45:20 ID:???
Oracleでもいらないよ

SQL> select sum(sal) from emp where deptno = 10;

SUM(SAL)
----------
8750


580 :NAME IS NULL:2009/07/31(金) 21:58:52 ID:GDYMXdu6
table1とtable2に共通のカラムUSERIDがあるのですが、
left joinで結合させようとすると同じ名前のカラムが2つあるとエラーが出てしまいます。
table1.USERIDとtable2.USERIDじゃだめなのでしょうか?
どうすればいいのでしょうか?

581 :NAME IS NULL:2009/07/31(金) 22:32:54 ID:???
select句にもtable1.USERIDと書く

582 :NAME IS NULL:2009/07/31(金) 23:12:11 ID:GDYMXdu6
*じゃだめなんですか?

583 :NAME IS NULL:2009/07/31(金) 23:24:41 ID:???
そりゃダメだろうw

584 :NAME IS NULL:2009/08/01(土) 03:00:36 ID:???
ん?なんで*じゃだめなんだ?

585 :NAME IS NULL:2009/08/01(土) 03:18:23 ID:???
型が違うって事はないよねえ

586 :NAME IS NULL:2009/08/01(土) 08:15:23 ID:mT+dvTBE
>>585
それはないです
リレーションシップとかやらないといけないんでしょうか?

587 :NAME IS NULL:2009/08/01(土) 08:28:04 ID:???
毎度毎度、エスパー募集かよ。
投げたクエリとエラーメッセージくらい書けば?

588 :NAME IS NULL:2009/08/01(土) 08:28:49 ID:???
>>587
お前がいなくても大丈夫そうだぜw

589 :NAME IS NULL:2009/08/01(土) 14:03:17 ID:???
初質です。

会社のDBなのですが、現在、Accessで25人が同時に使用している現状です。
重い、データが壊れる、エラーが出る、接続できなくなるなど様々な弊害が出ています。

そもそも、Accessを多人数用途で使用していること自体が問題なのですが、
今後を考えるとAccessでの運用は厳しい状況です。
そのDBについてのおもりを個人使用のAccessなら心得がある自分が引き受けている状態です。

質問したいのは以下の点です。

・MySQLは導入にコストがどのくらいかかるか。
 会社内使用ならCommunity Licenseで構わないようですがそれで大丈夫でしょうか。
 また、サーバーを必ず置く必要があるか、将来、有料になってしまうのかなど。

・Access個人使用ならVBAを組める程度のレベルの私が
 一からMySQLを始めて、すぐに実用レベルで対応できるようになるでしょうか。

よろしくお願いいたします。

590 :NAME IS NULL:2009/08/01(土) 15:24:22 ID:???
>>589
お前がバカなのは理解してあげたので、消えろ

591 :NAME IS NULL:2009/08/01(土) 16:19:28 ID:???
一点目
コストってのがよくわからないが,DBの金額という意味なら0円
時間的コストという意味ならそう時間かからん
Access->mysql環境移行のサイトなんか結構ある

サーバが必要かどうかというのも何とも言えない,
現在どういう方法で運用されているのかもよくわからなければ
それを変えたいのか維持したいのかも分かんない.
運用にサーバがいるかどうかじゃなくて,運用にあった設置をすべき

で,将来有料になるかについてはMySQLのGPLしらべてみ
(1点目の中に質問いくつあるねん...)

二点目
条件があいまいでで論点もあやふや,
まぁできんじゃね?としか返せない

592 :NAME IS NULL:2009/08/01(土) 17:22:52 ID:???
>>590
かまってちゃん乙
いちいち出てこなくていいから精神科でボダの診断もらって来い

593 :NAME IS NULL:2009/08/01(土) 17:49:25 ID:???
きっといやなことがあったんだろうね。
だけど、他人に当たり散らすのはよくないね。

594 :NAME IS NULL:2009/08/01(土) 19:54:51 ID:???
いつものことじゃないか

595 :589:2009/08/01(土) 21:20:27 ID:???
>>591
回答ありがとうございました。
不明瞭な質問で申し訳ありませんでした。

それにもかかわらず、大まかな方針を頂けました。
ありがとうございます。いろいろと調べてみます。

596 :NAME IS NULL:2009/08/02(日) 00:13:49 ID:Q4MhiB1r
コミュニティ版は実験版。
よって、リスク覚悟で。

597 :NAME IS NULL:2009/08/02(日) 09:30:27 ID:???
コネクタのドライバってダウンロードするときメールとか入力しないといけないっぽいけど
再配布不可能なの?


598 :NAME IS NULL:2009/08/02(日) 09:56:00 ID:JR4H8zPC
aspでnbtstatをして帰ってきた結果をMySQLにぶちこもうとしているんですが、
直接ぶちこもうとすると漢字混じりのものは文字コードの違いからエラーになります。
デフォルトutf-8のままutf-8でない文字列をMySQLに保存するにはどうしたらいいでしょうか?


599 :NAME IS NULL:2009/08/02(日) 10:13:31 ID:???
MySQLは列ごとにキャラクタセットを変えられる

mysql> create table test (id int primary key,
-> data1 varchar(100) character set utf8,
-> data2 varchar(100) character set cp932,
-> data3 varchar(100) character set eucjpms);

600 :NAME IS NULL:2009/08/02(日) 10:27:53 ID:JR4H8zPC
なんと!
ありがとうございました


601 :NAME IS NULL:2009/08/02(日) 19:54:52 ID:jeLofuXy
table1(元データ),table2(フラグ定義),table3(table1の各項目にフラグをぶら下げる)があって、
table1の一部の項目にフラグがついた状態になっています。
これを結合して、フラグの有無にかかわらず全項目を表にしたいと考えています。

select (略) from table1 left join (table2 inner join table3 on table2.id=table3.id) on table1.flag=table3.flag;

とすると、フラグがNULLのものが表に出てきません。
どうしたらいいでしょうか?

602 :NAME IS NULL:2009/08/02(日) 20:48:28 ID:J20WEjYY
テーブル名とかフィールド名って、何文字くらいを上限にしてますか?

603 :NAME IS NULL:2009/08/03(月) 17:29:57 ID:???
mysqlの設定中に手詰まりしたので助けてくれ

状況:WindowsからMysqlAdministratorを使用してログインしようとしたらエラー
Mysql Error Number 2003(Can't Connect to MySQL server on 'IPアドレス'

サーバー
OS:Centos5(x64) Xenにて仮想化
Domein
 FILESERVER
 DATABASE
 WEB
Enforceは全てDISABLEDにしてある

ローカルからデータベースへの接続は可能なんだがリモートでの接続がエラーが
出て上手くいかない

ぐぐってみたら
/etc/my.conf の bind-addressが127.0.0.1 をコメントアウトしろとか書いてあるが…
うちの設定にはそもそも無かったw

あと考えられる部分って何だろう?
数日悩んでいて多分単純な事に気づいていないだけだと思うんだが

604 :NAME IS NULL:2009/08/03(月) 17:58:37 ID:77U0plNm
考えられること:お前がバカだということ


605 :NAME IS NULL:2009/08/03(月) 18:32:13 ID:???
SELinux
iptables
ping
mysqladmin ping

606 :NAME IS NULL:2009/08/03(月) 18:35:51 ID:???
>>603
接続に使用しようとしているMYSQLユーザのホストはどうなってる?
localhostや127.0.0.1だったら繋がらない。

607 :NAME IS NULL:2009/08/03(月) 20:17:30 ID:???
MySQLの日付型はyyyy-mm-dd hh:nn:ss形式のようですが、
面倒な変換なしにyyyy/mm/ss hh:nn:ss型を使えないでしょうか?

608 :NAME IS NULL:2009/08/03(月) 20:35:18 ID:???
>>607
そのまま格納は無理だろう。
表示はdate_format使え。


609 :NAME IS NULL:2009/08/03(月) 22:10:41 ID:???
>>607
update や insert で更新する値としてなら使える。
select で取り出す値は date_format() でも使わないと無理。


610 :603:2009/08/04(火) 08:44:28 ID:???
>>604-606
アドバイスサンクス!
その辺りの事を全て確認してみたがダメだった

原因の切り分けが出来ないから一度仮想化せずに設定して問題なければ
仮想化してチャレンジしてみるよ

611 :NAME IS NULL:2009/08/04(火) 12:34:02 ID:???
>>610
>>604も確認したのか。ワロタw

612 :603:2009/08/04(火) 12:36:22 ID:???
>>611
それも当然確認したw
馬鹿で間違いないw

613 :NAME IS NULL:2009/08/04(火) 20:05:58 ID:CvqNEHZq
mysqladminで文字コードをutf8からsjisに変えたのに、
status;をみると何種類もあるうちの1つしかsjisになっておらず、残りはutf8のまま。
全部変えたいときはどこいじればいいの?

614 :NAME IS NULL:2009/08/04(火) 21:58:38 ID:???
>>613
何をやったのか具体的にどぞ。

615 :NAME IS NULL:2009/08/04(火) 22:57:55 ID:???
またまたかまってちゃん登場

616 :NAME IS NULL:2009/08/05(水) 00:36:41 ID:dQ/gDRRx
3.28くらいから5.0にmyisamのファイルをバイナリレベルのコピーで持ってきたんだけど、
varcharの解釈がバイトレベルから文字数レベルになったから、
そのままだと途中で切れちゃう。
そこで一旦3.28側でvarcharを2倍にしてから持ってきたら問題なかった。
一応これで動いてるけど、本当に問題ないのかな?

617 :NAME IS NULL:2009/08/05(水) 04:06:22 ID:AIBVsZem
素直にダンプ&ロードした方がすっきりするが・・

618 :NAME IS NULL:2009/08/05(水) 21:15:27 ID:9eWVh/Lf
select * from user WHERE id = $user
この時$userに1jとか入れてもid1を抽出してくるのなぜですか?

619 :NAME IS NULL:2009/08/05(水) 22:14:42 ID:???
仕様に決まってんだろカス

620 :NAME IS NULL:2009/08/05(水) 22:33:04 ID:???
複素数入力しても整数に暗黙のキャストされるんだよ。
MySQLの開発者は電気系な。

621 :NAME IS NULL:2009/08/06(木) 00:11:24 ID:4Rgx9kKE
MySQL WorkbenchでER図書いているんだけど、
ひょっとしてテーブル作った後に、テーブルのスキーマ変更できない・・・?



622 :NAME IS NULL:2009/08/06(木) 18:48:04 ID:XYQGPPAG
できるわけねーだろボケ

623 :NAME IS NULL:2009/08/06(木) 19:11:18 ID:???
いやできるだろ ALTER TABLE で.
内部的には全部作り直しているみたいだけど.

624 :NAME IS NULL:2009/08/06(木) 22:12:57 ID:???
全文検索を早くしたいと思って、上で出ていたTritonn(windows版)を導入したんですが、ちょっと動作的な質問です。

TelNo varchar(11)
fulltext index using ngram, normalize (TelNo)

の中に、以下のようなデータがはいってたとします。

0123-45-6789
1234-56-7890
234-567-7890
1234567890
0123-556789

これを
select count(*) from sample where match(TelNo) against("7890");
とすると

1234-56-7890
234-567-7890

は抽出するけど

1234567890

は非抽出なんです。

ちなみに
fulltext index using ngram,no normalize (TelNo)
とすれば抽出するようです。
正規化機能って数字羅列は無理なんですか?

625 :621:2009/08/06(木) 23:04:39 ID:4Rgx9kKE
>>622
>>623
すまん、テーブル作った後にという表現が悪かった。

既に複数のテーブルを定義してあるんだけど、
ER図の上での定義としてスキーマを変更したいんだけど
やり方が分からない。

ERWinとかERStudioならテーブルのプロパティに、スキーマの
定義があって変更すれば済む。


ちなみに1テーブルづつなら、コピーしたテーブルをスキーマタブに
ペーストする事で実現できたんだけど、本来は複数テーブルと
それに紐づくリレーションをまとめてスキーマ移動したいのです。



626 :NAME IS NULL:2009/08/07(金) 08:00:10 ID:???
>>624
split_digit 指定しれ。
ttp://d.hatena.ne.jp/mir/20070906/p2

627 :NAME IS NULL:2009/08/07(金) 12:43:30 ID:???
Windows2003環境で
OSからメモリ不足エラー(Got Error 12)が頻発するんだけど、
設定ファイルのどの項目のメモリ量減らせば解決できますか?

ただ、タスクマネージャ見ても搭載メモリの半分も使ってないのに
このエラーが出るので何かほかのところが間違っている気もするんですが...

どなたかわかる方教えてください。


628 :NAME IS NULL:2009/08/07(金) 17:52:52 ID:???
具体的におこなった操作とエラーの内容を書け

629 :627:2009/08/07(金) 18:39:51 ID:???
>628
そうだよな、すまない

基本的にInsertとSelectしかしてないです。
大きめのテキストファイルを解析して投げているので、
Insertはものによっては100kb以上なってると思う。

登録されているデータは12GBほど@Mysql\dataフォルダの容量なのでアバウト
登録データが増えるほど頻発するようになった。
表示されたエラーは(たぶんSelect発行時)
「Got error 12 from storage engine」
これが出るとサービス再起動しか復帰できない...

設定はVineとかに入ってる設定サンプルを参考に文字コードとかかを変更したもの
ttp://vine-linux.ddo.jp/linux/sql/mycnf.php こういうの
メモリは2G積んでるから
初めはhugeでやってたけどmediumでも同じ症状が出るから
今はsmallでなんとか安定してうごいてる。

MySQLのバージョンは5.0とすこし古めです

630 :NAME IS NULL:2009/08/07(金) 20:36:20 ID:???
うざくて読む気がしない

631 :624:2009/08/07(金) 22:02:24 ID:???
>>626
ありがとうございました。
やりたい事ができました。


632 :NAME IS NULL:2009/08/07(金) 22:04:42 ID:???
>>629
2GBじゃ足りないってことだろう。つーかselectでコケてるのわかってんなら
クエリかインデックスを見直すべきじゃないかなぁ。

633 :NAME IS NULL:2009/08/07(金) 23:14:48 ID:???
>>629
たぶん、mysqld が必要とするメモリを確保できない。
my.cnf のパラメータみなおして、メモリ使用量少なめになるように調整してみては?

634 :633:2009/08/07(金) 23:16:04 ID:???
>>629
ああ、small で安定してるのか。ゴミレスごめん。

635 :NAME IS NULL:2009/08/08(土) 15:54:56 ID:???
ごみレスは629

636 :NAME IS NULL:2009/08/10(月) 00:55:17 ID:WJlH4sRX
運用中のdbのカラム変更ってどういう手順でしてますか?
外部から接続してこないようにポート塞いでから変更→ポート開けるとか?

637 :NAME IS NULL:2009/08/10(月) 12:30:26 ID:xYYENRj3
Handler_read_rnd_nextが赤文字になるのは仕様?
リセットかけても直ぐに赤文字になるんだけど。。

638 :NAME IS NULL:2009/08/10(月) 17:51:56 ID:umkbwiYM
しようがない

639 :NAME IS NULL:2009/08/10(月) 19:12:31 ID:???
質問です。
2つのテーブルを比較して、指定したカラムのデータが完全に一致することを
チェックするには、どうするのがいいでしょうか。

640 :NAME IS NULL:2009/08/10(月) 22:01:23 ID:???
2つのテーブルを比較して、指定したカラムのデータが完全に一致することをチェックすればいいんじゃないかな

641 :NAME IS NULL:2009/08/10(月) 22:30:31 ID:???
うん、そうだね

642 :NAME IS NULL:2009/08/14(金) 23:19:48 ID:QWmtJHHL
MySQLで複数テーブルを一気にcreate tableしたいのですが
マクロとかありますか?

643 :NAME IS NULL:2009/08/14(金) 23:58:45 ID:???
>>642
同じ構造のテーブルをたくさん作りたいのかな。
シェルスクリプトでもperlでもVBAでもいいので、自分で書いちゃダメ?

644 :NAME IS NULL:2009/08/15(土) 00:10:31 ID:???
>>643
システムの初期導入設定時に複数のcrate tableのSQLを一括で
実行してDB本番環境をすばやく構築したいのです。
一個一個のテーブルを手でcreate tableするのは出来ますが
テーブル数が多いのでマクロかなんかで一括で実行出来たら良いなと。
個々のcreate tableのsqlファイルは既にあります。
OracleだとPL/SQLとかでやってると思いますがMySQLではどうしてるのかなと。


645 :644:2009/08/15(土) 00:20:46 ID:???
自己解決しました。
バッチ処理が出来るようですね。
ttp://mysqlweb.net/category/4033228-1.html

646 :NAME IS NULL:2009/08/15(土) 09:14:23 ID:???
>>644
ファイルがあるのなら、
cat *.sql | mysql
でいいんじゃね?

と思ったら、解決したのか。

647 :NAME IS NULL:2009/08/18(火) 11:41:26 ID:???
サーバAにmysqlが入っていて、サーバBから接続したい場合は
どれをインスコするの?
サーバB自体にはDBを持たず、接続するだけの場合。
例)
mysql testdb -h サーバA -u test -p < test.sql > out.txt

MySQL-client-communityだけ?
MySQL-develも必要?

648 :NAME IS NULL:2009/08/18(火) 19:49:09 ID:???
mysqlコマンド使うだけならclientのみ。
PerlとかCから繋ぐならsharedも必要、
繋ぐものをソースからビルドするならdevelも必要

649 :NAME IS NULL:2009/08/19(水) 03:47:47 ID:dChAbBgf
MYIファイルが肥大化してきたので整理しようと思うのですが
行を削除した段階ではMYIファイルは縮まないですよね?
削除後MYIファイルを縮めるには、myisqmchkでsort-indexするでOKですか?
あるいは他に方法があれば教えてください

650 :NAME IS NULL:2009/08/19(水) 11:21:30 ID:???
optimize tableでもできたはず

651 :647:2009/08/19(水) 13:00:14 ID:???
>>648
ありがとう!

652 :NAME IS NULL:2009/08/19(水) 13:00:53 ID:7XUHkeqC
質問です、長くなりますがお願いします。
スケジューラをphp5とmysql5で作っています。関連するテーブルは2つあって、

【sche_info_tb 基本的な情報用】
id, day, eventName
【sche_player_tb 各イベントの参加者用、evIdはsche_info_tbのidです】
id, evId, player

こんな感じです。(それぞれもっとカラムありますが省略してます。参加者は不定数なので、テーブル分離必須?です)
これで、スケジュール一覧のカレンダーを作るときどうやってクエリしたら良いのか迷っています。
カレンダーの構成要素は開催日(sche_info_tb.day)、イベント名(sche_info_tb.eventName)、
参加者名(sche_player_tb.player)です。

自分の考えでは、
1)SELECT * FROM `sche_info_tb` を実行
2)返ってきた結果に対してforeachをまわして一つずつidを取得
3)それをつかって SELECT * FROM `sche_player_tb` WHERE `evId`=$id を実行
という感じです。

しかし、これじゃクエリの実行回数が多過ぎる気がします。ひと月30日として、30回。
1日に複数イベント登録したらもっと増えます。
何か、賢いやり方ないでしょうか?
スケジューラアプリはいろんなサイトにありますが、全部こんなやり方してるんでしょうか? これが普通ですか?
初心者なりに考えて作ってるつもりですが、不出来なところがあれば教えていただけると幸いです。
よろしくお願いします。

653 :NAME IS NULL:2009/08/19(水) 14:28:38 ID:???
テーブルのJOINをしたことありませんか?

select i.day, i.eventName, p.player
from sche_info_tb i, sche_player_tb p
where i.id = p.evId
and i.day between '2009-08-01' and '2009-08-31'
;


654 :NAME IS NULL:2009/08/19(水) 14:38:14 ID:???
オレはLEFT JOINを多用しているけど、知人はINNER JOINを多用していると言われた。
INNER JOINのほうが使いやすいのかな・・・
もちろん状況にもよるだろうけど。

655 :NAME IS NULL:2009/08/19(水) 16:03:34 ID:7XUHkeqC
>>653,654
うわー、すごい!
聴いたことはあったんですが理解できなくて手を付けていませんでした。>JOIN
こういう状況で使うんですね。 自分でもう一度確認し直します、ありがとうございました!

656 :NAME IS NULL:2009/08/19(水) 17:53:56 ID:???
ほんとにJOINしたことなかったんだw
がんばってください

657 :NAME IS NULL:2009/08/19(水) 18:34:21 ID:???
>>654
オレは、LEFT OUTER JOINばっかり。
それだけといっても過言ではない。

INNERとかCROSSとかいろいろあるけど、
使うべきケースがまったくわかんね。orz


658 :NAME IS NULL:2009/08/19(水) 18:45:57 ID:???
JOINとかサブクエリーとか覚えると世界が広がるからガンガレ

659 :NAME IS NULL:2009/08/19(水) 20:57:38 ID:fdU1p2ON
ストアドプロシージャでのエラー処理で教えてください。

プロシージャ内で、
insert into hoge (id, name) values(_id, _name);
といったクエリを発行し、データを登録しています。
このときに、insertの結果(正否)を取得するにはどうしたらいいでしょうか?
sybaseとかだと、@@sql_statusとかで直前のクエリのステータスを取得できたと思います。
mysqlの場合はどのようにしたらいいでしょう。

5.0.45-log
MYISAM
です。よろしくお願いします。

660 :652:2009/08/20(木) 20:15:50 ID:W0DXzN4C
>>653さんのクエリでjoinを教えてもらってお世話になったものです。
自分で、
select t1.*, t2.* from table1 t1, table2 t2 where~~
としてクエリを実行したところ、返り値の中にidが2つある状態になりました
echo $rs[0]['id']とやると、一つ目のidを出力します。
明示的に「一つ目の重複カラムを表示する」あるいは、
クエリ発行時に出力対象から特定のカラムを除外する方法はないでしょうか?
すみませんがアドバイスお願いします。

>>658
サブクエリ教えてくれてありがとうございました
これは便利ですね!

661 :NAME IS NULL:2009/08/20(木) 20:28:37 ID:???
アスタリスクで書いたらそうなるね。
手抜きしないで
select t1.id, t1.hoge, t1.fuga, t2.foo, t2.bar
と必要な列だけ書きましょう。
ちなみにうちの会社では「select *」はコーディング規約で禁止されてます。

662 :652:2009/08/20(木) 20:56:57 ID:???
>>661
それしかないんですか…
全部で50個くらいカラムがあるんだけどそれでも個別に書いてくってことですよね?
大変だなぁ。。
とりあえずそうします、ありがとうございました。

663 :NAME IS NULL:2009/08/20(木) 20:57:29 ID:oS//lB2K
>>659
どうも調べてみたら、declare handlerで例外処理をキャッチで着るみたいね。
これでインサートエラーをトラップできそう。

664 :NAME IS NULL:2009/08/20(木) 21:00:12 ID:oS//lB2K
>>662
そんなもん、クラス化(ライブラリか)しておいたらいいでしょう。
また、最初の一発目も、desc テーブル名とかでカラムリストとって、
整形すればさほど難しくはない。
なにより、*で手抜きだけはするなと言うこと。それをやったら許さんぞ。

665 :652:2009/08/20(木) 21:10:59 ID:???
>>664
クラス化っていうのはphpとかのプログラム側で関数化するってことですよね?(mysqlの用語ではなくて)
>最初の一発目も、desc テーブル名とかでカラムリストとって
ってなんですか?
クラス内のクエリ文を手作業で、t1.col1,t1.col2,t1.col3,t1.col4,…って書いていく時に、
テーブル構造を出力して見ながらやろうっていう事ですよね? 

666 :NAME IS NULL:2009/08/20(木) 21:35:54 ID:???
>>665
見ながらやるんじゃなくて、テーブル構造をコピペしてテキストエディタかなんかでマクロを使うか、
sed等で置換するかして機械的な処理で整形してください。
という意味です。がんばってね。ここで手を抜かないことが大事だよ。

667 :652:2009/08/20(木) 21:58:17 ID:???
>>666
あー、なるほど! よくわかりました、ありがとう!

668 :NAME IS NULL:2009/08/21(金) 12:21:52 ID:???
あちゃー
オレも面倒なときはつい * を使ってしまうわw
* と 個別にカラムを指定するのって速度的に違いはあるのかな?
感覚的に * のほうが処理速度は速そうだけど・・・。

669 :NAME IS NULL:2009/08/21(金) 12:36:16 ID:???
select対象列がすべてインデックスの中に入っていると、
テーブルアクセスをスキップできるのでとても速い。
select *してしまうと実テーブルを読まざるを得ない。

カバーリングインデックスというテクニックです

670 :NAME IS NULL:2009/08/21(金) 13:17:56 ID:???
>>669
へえー、そう言う事情があるんですか
今試してみたら両方のやり方で速度の差なかったけど、何十万件になると違いが出るんでしょうか。。
どうもありがとう

671 :NAME IS NULL:2009/08/21(金) 15:09:40 ID:???
テーブルがメモリに入りきらなくなるあたりから差が出るよ

672 :NAME IS NULL:2009/08/25(火) 00:55:42 ID:???
MySQL 5.1 にて
CREATE TABLE `word_count` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`word` varchar(12) NOT NULL,
`count` int(10) unsigned NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `word` (`word`)
)
と言うテーブルで、
select * from word_count where instr('ここに文章が入ります',word);
を実行すると、key が使われなくて速度が出ません。
もっと効率よくできる書き方はありませんか?

673 :NAME IS NULL:2009/08/25(火) 10:04:35 ID:???
Tritonnでがんばってください
http://qwik.jp/tritonn/

674 :NAME IS NULL:2009/08/25(火) 10:07:40 ID:???
>>673
全文検索とは逆のことがしたいのですよ。
instr('words',word) を早くしたいのです。

675 :NAME IS NULL:2009/08/25(火) 12:55:06 ID:???
全部見るしかないからむりじゃね

676 :NAME IS NULL:2009/08/25(火) 13:06:55 ID:???
TRIEとか使えないの?

677 :NAME IS NULL:2009/08/25(火) 13:45:02 ID:???
>>676
http://dev.mysql.com/sources/doxygen/mysql-5.1/trie_8c-source.html
これですか? ちょっと調べてみますが、具体的な使い方を教えていただけると助かります。

678 :NAME IS NULL:2009/08/28(金) 12:45:48 ID:???
質問です

MySQL5.4の機能であるBKAを使用したのだが
併せてsennaの日本語全文検索機能も使いたいと思っています。

5.4にはsennnaのパッチが当てられないので困っていますが
対応方法ほか良い案などありますでしょうか。

現在はTorittonの5.0,67を使ってますが外部結合が遅い・・・

679 :NAME IS NULL:2009/08/29(土) 19:06:41 ID:odCioAfi
MySQL Clusterって使ってる人いる?
これってDB鯖を複数立ち上げて外側では1つに見せるってものだよね
家で試験するとして
最低3台PCいるかな

DB 1号
DB 2号
クラスタ管理 1号

680 :NAME IS NULL:2009/08/29(土) 19:36:53 ID:???
トリガーについて教えてください
MySQL 5.1.35 Windows を使って勉強中なんですけど

table shouhin_master  ←マスターテーブル
code int
name varchar(20)

delete_flg tinyint

table data_tbl ←データテーブル
code int
data1


外部制約でshouhin_masterからcodeを消した時
data_tblの該当するcodeデータを消すようにはしているのですが。
マスターテーブルのdelete_flg に9を立てた時にトリガーを使って
data_tblの該当するcodeのデータを削除する事出来ますか?
出来るとしたら、どういうトリガーを書けば良い?


681 :NAME IS NULL:2009/08/29(土) 19:59:02 ID:???
>>679
パフォーマンス試験じゃなければ、そういう構築例は仮想マシンでやればいいから1台あればいいんじゃね?

682 :NAME IS NULL:2009/08/29(土) 23:59:26 ID:???
>>680
NewとかOldとか使え
begin
if new.delete_flg = 9 then
 delete from data_tbl where code = new.code;
end if;
end

683 :名無しさん@そうだ選挙に行こう:2009/08/30(日) 06:00:50 ID:???
>>682
ありがとうです。勉強させて頂きます。

684 :名無しさん@そうだ選挙に行こう:2009/08/30(日) 08:59:50 ID:8Tmsiy4Z
テーブルを4つjoinする方法がわかりません。アドバイスお願いします。

eventTbl
 id/kaijouId/eventName
sankashaTbl
 id/eventId/userId/comment
kaijouTbl
 id/kaijouName
userTbl
 id/userName
条件は以下です。
eventTbl.id = sankashaTbl.eventId
eventTbl.kaijouId = kaijouTbl.id
sankashaTbl = userTbl.id

この状況の時にそれぞれのカラムを全て引き出したいです
どう書いたら良いんでしょうか? userTbl以外の3つまでは以下のようにして出来たんですが。。

SELECT eventTbl.eventName, sankashaTbl.comment, kaijouTbl.kaijouName
FROM (eventTbl LEFT JOIN sankashaTbl ON eventTbl.id=sankashaTbl.eventId)
LEFT JOIN kaijouTbl ON eventTbl.kaijouId=kaijouTbl.id

これからさらにどうしたら良いでしょうか?
FROM ((eventTbl LEFT JOIN sankashaTbl ON eventTbl.id=sankashaTbl.eventId)
LEFT JOIN kaijouTbl ON eventTbl.kaijouId=kaijouTbl.id)
LEFT JOIN sanashaTbl ON sankashaTbl.userId=userTbl.id
としたらエラーしました


685 :名無しさん@そうだ選挙に行こう:2009/08/30(日) 09:36:25 ID:???

userTblをJOINしてなきゃ、そりゃエラーになるだろう

686 :名無しさん@そうだ選挙に行こう:2009/08/30(日) 09:47:03 ID:8Tmsiy4Z
どこでJOINしたら良いんでしょうか?
3つまでの解説はよく見かけるんですが、4つ以上は見つけられなくて困ってます

687 :名無しさん@そうだ選挙に行こう:2009/08/30(日) 09:47:43 ID:8Tmsiy4Z
お礼書き忘れた。
>>685 ありがとうございます

688 :名無しさん@そうだ選挙に行こう:2009/08/30(日) 10:48:01 ID:???
どこでも何も、そのまま続けて書けばいい。
FROM 〜 JOIN 〜 JOIN 〜 JOIN 〜
解説以前に、まずはマニュアル読むべき。

689 :名無しさん@そうだ選挙に行こう:2009/08/30(日) 13:14:43 ID:8Tmsiy4Z
>>688
ありがとうございます
ずっとマニュアルは読んでるんですが、どうも理解できなくて。。
すみません、教えてください お願いします

690 :名無しさん@そうだ選挙に行こう:2009/08/30(日) 13:46:04 ID:LriVeEv0
phpからmysqlのテーブルに格納されている文字列をmysql_fetch_rowだとかmysql_fetch_assocだとかで読み出したときに、

「ソースの表示」をやってみると
「NULL文字を含むファイルです。半角スペースに変換してから表示します」
ってなって読みだした文字列の後に大量の半角スぺース(きっと元はNULL文字)が含まれているのが確認できるんですけど、
コレを無くすにはどうすればいいですかね。

AJAXで読み込んだときにNULL文字以下が表示されんくなってしまって困ってます。
誰か心当たりあったら解決策お願いします。

691 :690:2009/08/30(日) 14:56:51 ID:LriVeEv0
コレってむしろphp側の問題ですねorz
スレ違いでした。
phpのスレで訊いてきます。

692 :名無しさん@そうだ選挙に行こう:2009/08/30(日) 16:39:53 ID:???
これが新手のマルチ投稿か

693 :NAME IS NULL:2009/08/31(月) 16:21:21 ID:???
ランタイム情報の
Slave_runningの値「ON」か「OFF」をmysqlで求めるには、
どのようなクエリを渡せばいいのでしょうか?

694 :NAME IS NULL:2009/08/31(月) 21:14:54 ID:???
show status like 'Slave_running';
を、それぞれのプログラミング言語で
select文と同じように実行すれば取れるよ。

695 :693:2009/08/31(月) 22:39:04 ID:???
>>694
あ、ありがとうございます。
とりあえずphpからクエリを投げてみることにします。
phpmyadminばっかり使ってるとダメですね・・。

696 :NAME IS NULL:2009/09/01(火) 18:48:52 ID:???
相談です。

16桁の数字からなる商品番号を格納するカラムのデータ型は何がいいでしょうか?
(1) BIGINT型で、16桁の整数として格納する
(2) CHAR(16)型で、16個の文字からなる文字列として格納する

(1)と(2)と、どちらが検索が速いでしょうか?
データ件数は、10万〜100万件程度です。

アドバイスよろしくお願いします。

697 :NAME IS NULL:2009/09/01(火) 19:02:40 ID:???
>>696
64bitならもちろん、32bitでも、bigint のほうが早いはずだぜ。
まぁ、やってみたら?

698 :696:2009/09/01(火) 21:00:44 ID:???
>>697
アドバイス、ありがとうございます。
16桁の商品番号の格納は、BIGINT型で行ってみます!(・∀・)

一応ベンチマークも測ってみようと思って、今100万個のテストデータを作成中ですが、
MySQL5のストアドプロシージャとかで、乱数を一気に100万個ぐらい作る方法ありますかね?
=とりあえずPHPスクリプトで、5000個ずつINSERTしてます><

699 :NAME IS NULL:2009/09/02(水) 15:23:36 ID:???
Tritonn使ってるんだけど

Where ColName Like '%検索ワード%'

Where match(ColName) against('検索ワード')
って結果が違います

これって正常なこと?
何か根本的に間違ってたりしますか?

700 :699:2009/09/02(水) 15:45:21 ID:???
すまん、
書き込んだ直前以降はちゃんと同じ値になってました。
なんか構文間違ってたんだと思います。

701 :NAME IS NULL:2009/09/02(水) 19:14:03 ID:???
5.0だけど、INTに2147483647以上の値がINSERTされると
DB Error: unknown error
で止まっちゃうんだけど、これは正しい動作なの?
4.0のマニュアルには2147483647に丸められると書いてあるんだけど。
5.0のマニュアルにはどうなるか何も書いてない。

702 :NAME IS NULL:2009/09/02(水) 19:24:15 ID:???
>>701
5.0でも2147483647に丸められるし、でてくる警告は
Out of range value adjusted for column 'a' at row 1
になる。

unknown errorを出しているのはMySQLじゃなくて
その上で動いている言語かツールじゃない?

703 :NAME IS NULL:2009/09/02(水) 20:00:54 ID:???
>>702
PHPからPEAR::DBを通してアクセスしていたので、コマンドから打って試してみました。
ERROR 1264 (22003): Out of range value for column 'aaaa' at row 1
になりました。最大値に丸めて追加はされません。
ちなみに5.0じゃなくて5.1.35でした。
とりあえず最大値超えのチェックをPHPのプログラム側に入れることにします。

704 :NAME IS NULL:2009/09/02(水) 20:09:52 ID:???
>>703
ちょっと関係ないかもしれないんだけど、
うちの環境で、5.1.35からMyTHTVがエラーを出すようになったんだよ。
5.1.34だと、正しく動いたりしない?
ここで何か変わったのかな。

705 :NAME IS NULL:2009/09/03(木) 10:04:24 ID:PDF3RFA2
すみません、多分基礎的な質問なんですが
一つのテーブルに、for文で連続して10回くらいクエリするようなとき、
他のユーザからも同じテーブルにアクセスがあると問題にならないか気になります
(例えば、insertごとにlast_insert_id()を取る時など、PHPで)
そんなの気にする必要ないんでしょうか?
それとも他ユーザのアクセスから保護する方法はあるでしょうか?あったら教えてください。
よろしくお願いします

706 :NAME IS NULL:2009/09/03(木) 10:16:54 ID:???
>>705
LOCK TABLE

707 :NAME IS NULL:2009/09/03(木) 10:19:09 ID:???
間違えた

LOCK TABLES だった

708 :NAME IS NULL:2009/09/03(木) 10:27:13 ID:PDF3RFA2
>>707
ありがとうございます! 調べてみます
707さんは上のような条件の時、必ずLOCK TABLESやってますか?

709 :NAME IS NULL:2009/09/03(木) 10:31:18 ID:???
>>705
> last_insert_id()を取る時
これは複数アクセスに関しても安全。
on key duplicate update id=LAST_UPDATE_ID()
かなにかやっとけば完璧。ググって。

710 :NAME IS NULL:2009/09/03(木) 10:59:55 ID:PDF3RFA2
>>709
わかりました、どうもありがとう

711 :NAME IS NULL:2009/09/03(木) 21:35:43 ID:???
変なテクニック覚える前に、トランザクション分離について
ちゃんと勉強したほうがいいぞ?

712 :NAME IS NULL:2009/09/04(金) 00:59:44 ID:???
>>711
もちろんそうだけど、MySQL(MyISAM)は、
小手先のテクニックでなんとかするDBじゃないかな。
少なくとも、insert idをユニークにするだけなら、トランザクションは要らないし。


713 :NAME IS NULL:2009/09/04(金) 12:32:18 ID:uLJTuQvZ
今スケジューラーを作っています。
画面構成としては当日のイベント詳細があって、その下に当月のカレンダーがつきます。
ここで、イベント詳細部分のデータ引き出しがどうしたらいいかわかりません。
条件として
1)当日のイベントがあれば当日のイベントを出力
2)当日のイベントが複数あれば、全てを出力する
3)もし当日イベントがなければ、次にイベントがある日のイベント全てを出力する
4)scheduleTblのカラムは、
  ID<id>、2009-09-04(date型)<evDate>、イベント名<evName>、詳細テキスト<text> です。

当日の日付をプログラムで生成して、whereの条件にして当日データを取るくらいできますが、
当日イベントがなかった場合というのがどうしたらいいかわかりません。
日付に1日ずつ足してその都度クエリ、なんて非効率だし、
日付カラムに対して `evDate`>$today かなと思ったんですが、where, limitの指定方法がわかりません


714 :NAME IS NULL:2009/09/04(金) 12:42:19 ID:???
サブクエリの基礎
where evDate = (select min(evDate) from schedule where evDate > '2009-09-04')


715 :NAME IS NULL:2009/09/04(金) 13:50:22 ID:???
>>714
ありがとうございます!
本当に助かりました

716 :NAME IS NULL:2009/09/06(日) 15:11:52 ID:???
「東京 神奈川」みたいにスペースで分けた複数の文字で検索かけることがありますが、
これの検索のロジックって
東京・神奈川それぞれを個別に %東京% みたいにlike検索のキーワードとして、合計2回クエリしてるんでしょうか?
select * from `tbl` where `text` like %東京%
select * from `tbl` where `text` like %神奈川%
みたいに。
sqlスレで聞いた方が良いのかな?
良かったら教えてください、もっと効率的な方法があれば知りたいです。
PHP5.2.8 mysql5です

プログラム板のPHPスレで聞いたんですが、スレ違いということでこちらに来ました
良ければご意見お願いします

717 :NAME IS NULL:2009/09/06(日) 15:25:50 ID:sqLNCpnT
聞くとしたらSQLスレ
聞く前にググレ

718 :NAME IS NULL:2009/09/07(月) 07:00:19 ID:UJq67Uhj
すみません、初歩的な質問です。

データベース(MySQLなど)を構築する場合は、それ専用のマシンを
用意しないといけないのでしょうか?

たとえばWebサーバとして使っているマシンに構築するのは不可能でしょうか。

よろしくお願いします。

719 :NAME IS NULL:2009/09/07(月) 08:49:27 ID:???
>>718
やってみないの?たいした手間じゃないとおもうけど。

720 :NAME IS NULL:2009/09/07(月) 09:04:09 ID:???
>>718
できるよ。
それに、WebサーバーとMySQLは、同じマシン内で動かしたほうが
セキュリティ的にもDBとWebアプリの通信内容が外に漏れず安心、
という面もある。(パフォーマンス的には別のもののほうがいいけど、
それはまぁ規模によりけり。)

大抵のLinuxサーバーなら、MySQL入るからやってみればいい。
もちろん、httpdとの相乗りも可能だよ。

721 :NAME IS NULL:2009/09/07(月) 09:31:29 ID:???
>>718
それだけの情報だと言える事は

ソフトウェア的には同居は可能

722 :718:2009/09/07(月) 12:22:13 ID:UJq67Uhj
>>719-721
どうやら大丈夫そうなので同一マシンで構築してみたいと思います。

ありがとうございました。本当に助かりました。

723 :NAME IS NULL:2009/09/07(月) 17:17:40 ID:1gVIiixw
Mysqlに入っているデータをSQLのみで正規表現を使って
置換したいのですが方法が思いつきません
他の言語(PHPとか)を使って置き換えれたら楽なのですがそのサーバーにはMysql
しか乗っておらずなんとかSQL上だけでやりたいのですが
どのようにすればいいのでしょうか?
やりたいことは以下のようなことです(PHP)
preg_replace("/^(.*) $/","\\1","abc efg ");

724 :NAME IS NULL:2009/09/07(月) 19:23:09 ID:???
>>723
Perlも入ってないの?


725 :NAME IS NULL:2009/09/07(月) 22:07:05 ID:???
sedとかawkもあるぞ。

726 :NAME IS NULL:2009/09/07(月) 22:22:50 ID:???
教えてもらえないでしょうか
MySQLをWindiwsServer2003r2にmsiインストーラでインストールすると
直ぐに終了してしまい
[後でもう一度トライして下さい]の様なメッセージが出て
イベントログにも
[早すぎる終了]のようなメッセージがありました
インストールは可能ですよね?
何が駄目か検討つきません
助けて下さい!

727 :NAME IS NULL:2009/09/07(月) 22:39:53 ID:???
>>726
> Windiws
> 検討

何か、インストール時にも読み違いや書き間違いがあるんじゃないのか?

728 :726:2009/09/07(月) 22:55:07 ID:???
すんません!
はずかしい!
やはりやり方が悪いんでしょうか...

729 :NAME IS NULL:2009/09/07(月) 23:38:43 ID:???
ダウンロードしたのが壊れていたとか
あるいはPCの方で何か異常が生じているとか

730 :NAME IS NULL:2009/09/08(火) 00:24:22 ID:???
インストール権限がないとかだったりして

731 :NAME IS NULL:2009/09/08(火) 00:32:22 ID:???
SQLSever以外のDBインストールすると
おかしくなるんだろ。
M$トラップが発動したと思われ

732 :726:2009/09/08(火) 07:58:25 ID:???
ローカルのアドミニストレーターで
リモートではないコンソール画面からも
いく度か別のバージョンのインストーラでも試しましたが結果は同じでした
詳細のエラー調べてみます!

733 :NAME IS NULL:2009/09/08(火) 09:03:57 ID:m49/nbrV
>>724
Perlすらはいっていません
純粋にOSとMySQLのみだけで動作してます

734 :NAME IS NULL:2009/09/08(火) 09:46:09 ID:???
別マシンに入れたPerlやPHPからやればいいじゃん。

735 :NAME IS NULL:2009/09/08(火) 12:13:24 ID:???
>>732
>詳細のエラー調べてみます!
最初にやれ!w


736 :NAME IS NULL:2009/09/08(火) 13:55:01 ID:m49/nbrV
>>734
単順にSQL上で処理することは無理ということでしょうか?
ローカルサーバーと自分のPC以外からのアクセスを管理者に制限されているので
やろうとしたら環境整えなきゃいけなかったので方法があるなら
SQLだけでやりたかったのです
でも駄目そうなので環境作る方向でいきます

ありがとうございました

737 :NAME IS NULL:2009/09/08(火) 17:09:12 ID:???
Windows MySQL 5.1

接続しているデータベースによって動作を変えたい場合がある
(具体的に言うとテスト系なのか本番系なのか)のですが、
現在接続しているデータベースが何なのかをSQLで知る方法という
のはあるのしょうか?



738 :726:2009/09/08(火) 22:17:29 ID:???
>735
もうしわけございません。
確認致しました。
以前にもWeb上で情報検索したのですが、解決策がわかりませんでした。
ダウンロード元(9/8現在):http://dev.mysql.com/get/Downloads/MySQL-5.1/mysql-5.1.38-win32.msi/from/pick


インストーラメッセージ
-----------------------------------------------------
MySQL Server 5.1 Setup Wizard ended
prematurely

The wizard was interrupted before MySQL Server 5.1 could be
completely installed.

Your system has not been modifiled. To complete installation at
another time, please run setup again.
------------------------------------------
イベントログ情報↓

-------------------------------------------------
イベントの種類: 情報
イベント ソース: MsiInstaller
イベント カテゴリ: なし
イベント ID: 11708
日付: 2009/09/08
時刻: 8:40:09
ユーザー: ********
コンピュータ: ********
説明:
Product: MySQL Server 5.1 -- Installation operation failed.

詳細な情報は、http://go.microsoft.com/fwlink/events.asp の [ヘルプとサポート センター] を参照してください。
データ:
-----------------------------------------------

Web上での調査は行ったのですが、、、
どうぞご存知の方いらっしゃいましたらご教授ください。
よろしくお願いいたします。


739 :726:2009/09/08(火) 22:21:33 ID:???
あっ、補足ですが
他のサーバ(Winserver2003R2)で試みた結果も同様でした。
基本的にはローカルAdminをRDP接続で作業しています。
ドメイン環境(上位に別のドメイン有)、
SQLserverは稼働中です。
(その他Apache,rubyの環境です。)
不足あれば追記します。
よろしくお願いします。

740 :NAME IS NULL:2009/09/09(水) 13:04:57 ID:???
>>737
関数DATABASE()の戻り値。
ただ、セッション変数を明示的に使用した
ほうがいいのでは。


741 :NAME IS NULL:2009/09/09(水) 18:49:23 ID:???
>>740
まだセッション変数って何?というレベルなんで w これからも勉強します。
有難うございました。

742 :NAME IS NULL:2009/09/09(水) 19:18:41 ID:dvog8naf
phpMyAdmin で csv データをインポートしようとすると

CSV 入力の書式が不正です (行: 607)

みたいなエラーメッセージがでて止まってしまいます。

そこまでは取り込めているんですが、これってダメな行があったら、そこを無視して次を取り込むみたいな設定がないんでしょうか。

一つ一つエラーが出る行をつぶしていくのは膨大すぎて……。

743 :NAME IS NULL:2009/09/09(水) 21:14:50 ID:???
スレ違いだな

744 :NAME IS NULL:2009/09/11(金) 00:04:21 ID:MS7jWmW9
文字列を2gramにしてfulltextのインデックスを使って検索をかけると,
・や.等の全角記号が無視されるようなのですが回避方法はありますか?


745 :NAME IS NULL:2009/09/11(金) 10:51:27 ID:???
http://japan.cnet.com/marketing/story/0,3800080523,20399824,00.htm

746 :NAME IS NULL:2009/09/11(金) 20:04:52 ID:???
レプリケーションに関しての質問です
既存のマスタ-スレーブのレプリケーションに新しくスレーブを追加しようと思いました。
幸いマスタ側でバイナリログをすべて取っていたので空っぽなスレーブをつないですべてbinlogで読ませようと思いました。
今回追加したスレーブはテスト目的で、vmware上で動いており、スペックがかなり悲惨なのです。

スレーブの設定を終えてrelay-logをどんどん作ってくれたのですが、relay-logが多くてhddがいっぱいになってしまいました。
おかげでsqlスレッドも動かなくなりました。
i/oスレッドだけ止めるだとか、(レプリケーションをいじくりまわす)このあたりの小技とか、何か解決のヒントを教えてもらえませんか?

-- 既存のスレーブもunkスペックなのですが、マスタ開始当初から動いているためrelay-logはpurgeされてうまくうごけています。

>>742
そういった機能がなかったので結局取り込むためのコードかいて利用してます。


747 :NAME IS NULL:2009/09/11(金) 20:21:16 ID:???
MySQLを使うシステムで全文検索の機能を作ることになりました。
MySQLのFULLTEXTインデックスでは日本語に対応できないようなので、Tritonnを使おうと考えています。
しかし調べてみると、Tritonnの全文検索はMyISAMエンジンのテーブルでのみ機能するようです。

全文検索を実現するためにはMyISAMを使う必要がある、
しかしトランザクションが必須なのでInnoDBを使わなければならない
という状況になっており、解決方法が分かりません。

できればTritonnを使いたいのですが、Tritonn以外の方法も含めてMySQL+全文検索機能を実現する良い方法がありましたらご教授頂けないでしょうか?
よろしくお願いします。

748 :NAME IS NULL:2009/09/11(金) 20:49:05 ID:???
>>747
テーブルを分けるとかじゃダメなの?
トランジャクション使うデータはInnoDBにして、全文が必要なデータはMyISAMにするとか。
何のデータか知らんから無理かもしれんが。
それか、分かち書きしたデータにFULLTEXT張ってMATCH 〜AGAINSTとか。

749 :747:2009/09/11(金) 21:06:19 ID:???
>>748
回答ありがとうございます。
やはりテーブルを分けるのが筋でしょうか。
ブログ関係のWebシステムを作っていまして、ブログ記事のタイトルや内容、その他の関連テーブルからテーブルをまたがって全文検索する機能を作る予定です。
トランザクションは無くても大きな問題は無いように思うのですが、ここは上からの支持なので外せないのです。
また、分かち書きしてDBに入れることも提案したのですが、データ量が増えるとパフォーマンスに影響すると言われて却下されてしまいました。
トランザクションと全文検索の両方を必要とするテーブルを作らないようにDB設計を見直す方向でもう一度考えてみたいと思います。
ありがとうございました。

750 :NAME IS NULL:2009/09/11(金) 22:10:16 ID:???
パフォーマンスを気にするのにRDBで全文検索やれって指示?
単にレコード数が多いだけのテーブルの方がチューニングのしようがあるのにな。

751 :NAME IS NULL:2009/09/11(金) 23:17:52 ID:???
にしても、RDBMSで全文検索やりたがるヤシって後を絶たないなぁ。

752 :NAME IS NULL:2009/09/11(金) 23:59:30 ID:???
実務で使えるRDBMS以外のDBって何?

753 :NAME IS NULL:2009/09/12(土) 00:22:14 ID:???
>>752
いきなり何を言い出すんだ、お前は。
あと、お前がCOBOLを全く知らないことは理解してあげた。

754 :NAME IS NULL:2009/09/12(土) 00:26:58 ID:???
知ったか乙

755 :NAME IS NULL:2009/09/12(土) 00:29:58 ID:???
え、WebシステムにCOBOL?意味がわからん

756 :NAME IS NULL:2009/09/12(土) 01:14:14 ID:???
CHECK TABLEを全テーブルいっぺんにかけたいんですけどどうすればいいですか?

757 :NAME IS NULL:2009/09/12(土) 04:00:56 ID:???
自己解決しました。mysqlcheckを使えばいいんですね

758 :NAME IS NULL:2009/09/12(土) 07:51:42 ID:???
754=752=包茎

759 :NAME IS NULL:2009/09/12(土) 13:36:51 ID:???
で、Blogで使えるRDBMS以外の全文検索って何よ?真面目に知りたいんだが?

760 :NAME IS NULL:2009/09/13(日) 02:17:01 ID:8JHnWrpH
質問です。

今、DBサーバにMySQLをインストールしてます。
そのサーバにはディスクが2つあります。
バイナリログとアクセスログが書き込まれるディスクは今は同じなんですが、
アクセスログだけ、片方のディスクに書き込むようにすれば、性能ってあがりますか?



761 :NAME IS NULL:2009/09/13(日) 05:35:26 ID:???
MySQLにアクセスログなんていうログはないよ


762 :NAME IS NULL:2009/09/13(日) 11:36:34 ID:???
>>760
アクセスログって、クエリログのこと?
バイナリログもクエリログもデータベースディスクとわけるべきだと思う。

763 :NAME IS NULL:2009/09/14(月) 00:35:25 ID:???
>>749
レプリケーションしてサマリテーブルつくってあげたらどうかな。
senna - toritonnでやってるけどunkスペックなスレーブで十分いけてる検索速度andサマリテーブル作成速度出してます。

764 :NAME IS NULL:2009/09/14(月) 06:07:45 ID:aUdaKzFo
left joinを複数設定したいんですが、以下で失敗するようです。書式がおかしいでしょうか?
FROM{$table1}
LEFT JOIN {$table2}
ON {$table1}.id1 = {$table2}.id2
LEFT JOIN {$table3}
ON {$table1}.id1 = {$table3}.id3
LEFT JOIN {$table4}
ON {$table1}.id1 = {$table4}.id4
下のやり方でも失敗しました
FROM{$table1}
(((LEFT JOIN {$table2}
ON {$table1}.id1 = {$table2}.id2)
LEFT JOIN {$table3}
ON {$table1}.id1 = {$table3}.id3)
LEFT JOIN {$table4}
ON {$table1}.id1 = {$table4}.id4)


また、原因解決のためエラーログを見たいんですが、どこにあるんでしょうか?
当然自分でググって調べたんですがわからず
/var/log/mysqld.log にひとまとめにしてあるのかと思ってこっちを見ても
該当の情報がありませんでした
大変すみませんがご意見お願いします。centOS5 mysql5を使っています


765 :NAME IS NULL:2009/09/14(月) 16:38:23 ID:???
764です
上の結合については自己解決しました。ありがとうございました
下のエラーログについて、良かったら教えてください

766 :NAME IS NULL:2009/09/14(月) 17:29:30 ID:???
SQLの書き間違いのようなエラーは
mysqld.logには出ません

767 :NAME IS NULL:2009/09/14(月) 18:13:37 ID:aUdaKzFo
>>766
どうもありがとうございます。公式を見ると
http://dev.mysql.com/doc/refman/4.1/ja/error-log.html
「mysqld がエラーログファイルを保存する場所を --log-error[=filename] オプションで指定できるようになっています。
ファイル名を指定しなければ、mysqld は Unix では mysql-data-dir/'hostname'.err」
と書いてあり、centOSなので find / -name localhost.err や find / -name *.err を試しても該当ファイルが見つからず
自前で設定しないとエラーログを保存できないのかなと思ってきました。
その理解で良いんでしょうか?

とりあえずこっちのページを見て(ttp://a-programmer.blog.so-net.ne.jp/2007-09-15)
mysqlmonitorで mysql> mysqld_safe --log-error=/var/log/myerror.log --log-warnings=1 して
わざとsqlエラーを起こしたんですがファイルも出来てません

エラー情報はどこにあるんでしょうか。mysqlディレクトリを見て回ったんですがわかりませんでした
mysqlのバージョンは5.0.45です

768 :NAME IS NULL:2009/09/14(月) 18:29:48 ID:???
RHEL5(CentOS5SQL)付属のMySQL 5.0.45は
ディレクトリ構成がカスタマイズされてる。
付属版では /var/log/mysqld.log がエラーログで正しい。

769 :NAME IS NULL:2009/09/14(月) 18:30:40 ID:???
手が滑った
RHEL5(CentOS5)付属のMySQL 5.0.45ね。

770 :767:2009/09/14(月) 21:34:47 ID:???
>>768
どうもありがとうございます
vi /var/log/mysqld.log したんですが、起動/終了履歴しか書いてないです
これじゃないみたいです。mysql、自前で入れた覚えないんですが、うっかりやってしまったのかな…

771 :NAME IS NULL:2009/09/14(月) 22:10:55 ID:???
>>770
たぶんあなたは、「エラーログ」について、なにか勘違いしてる。

>>767のurlにあるmysqldのエラーログってのは、
それこそ起動や(そのプロセス自体の)実行に関するエラーのことであって、
通常のSQLクエリを投げた時に、構文が間違ってたりした時の、
"You have an error in your SQL syntax〜〜うんたらかんたら"とか、
"Table(or column) doen't exist・・・"
ってゆうエラーのことではない。

で、そうゆう(SQL)エラーを記録するログは、>>766のとおり、mysqld自体にはついていない。
どんなクライアントアプリを使ってるかしらないけど、perlなりphpなりでやってるなら、
Apache(Webサーバ)のエラーログなり、別ファイルに書き出すなりの設定を、
クライアントアプリ側でトラップするしかない。

772 :NAME IS NULL:2009/09/15(火) 03:30:38 ID:qoH2jeyE
質問です。

会社で他の人が書いたソース(PHP+MySQL)を読んでいるのですが、
複数のテーブルをselectしてるだけのトランザクションがあります。

自分の理解では、トランザクションは更新のためのものであり、
selectだけの場合はトランザクションは必要ないと、理解していたのですが、間違いでしょうか?
selectだけのトランザクションは、どのような意味があるのでしょうか?


773 :NAME IS NULL:2009/09/15(火) 04:12:25 ID:???
1つめのselectのあとに更新がかかったら?

774 :NAME IS NULL:2009/09/15(火) 10:02:13 ID:???
初心者ですので知識に乏しいもので入門的な質問なのかもしれませんが、
テーブルを作成し、address.dbにデータを登録しました
で、コマンドプロンプトにてSELECTで確認したところ、文字化けしていました
どうやらコマンドプロンプトはShift_JIS形式で、UTF-8形式だと文字化けするようですが、これを何とか出来ないでしょうか?
検索してchcp 65001なんてものを見つけたのですが出来ず、よく分かりませんでした
データベースに書き込み時にShift_JIS変換する方法 又は コマンドプロンプトで文字化け化を直す方法を教えていただけたらと思います

WindowsXP使用で、PHPでの書き込みです

775 :NAME IS NULL:2009/09/15(火) 10:53:54 ID:???
>>774
テーブル作成時にキャラクタセットの指定はどのように?
create table 〜
(

) ENGINE=InnoDB DEFAULT CHARSET=cp932;

みたいに指定はした?





776 :NAME IS NULL:2009/09/15(火) 11:48:16 ID:???
コマンドプロンプトで作業するときは、最初に
set names cp932
する。

777 :host-130-64-82-87.medford.tufts.edu:2009/09/16(水) 07:01:28 ID:???
欠損値について、どうすればいいか、
いいアイデアがあれば教えてください。

Year
NA
NA
NA
2000
2000
1998

のようなCSVを
read data local infile
で読み込むのですが…

778 :NAME IS NULL:2009/09/16(水) 10:58:21 ID:???
>>775
教えていただいたように
$db->exec('CREATE TABLE address(id INTEGER PRIMARY KEY, name VARCHAR(50), address VARCHAR(150), tel VARCHAR(20), email VARCHAR(100)) ENGINE=InnoDB DEFAULT CHARSET=cp932; ');
のようにセットしたところ、まずENGINEに構文エラーが出て、ENGINEを消したところ、次はDEFAULTがエラーが出てしまいました

>>776
コマンドプロンプトを起動するとc:\Documents and Settings\メイン>となりますが、ココにset names cp932と打ち込むのでしょうか?
自分は色々な場所に打ってみたのですが、環境変数 namesが設定されていませんと出てしまいました

779 :775:2009/09/16(水) 11:39:51 ID:???
こっちで以下のcreateを打ち込んだら正常にテーブルが作成されたけどなぁ
(こちらのMySQLのバージョンは5.1.37)

MySQLのバージョンは?

CREATE TABLE address(
id INTEGER PRIMARY KEY
,name VARCHAR(50)
,address VARCHAR(150)
,tel VARCHAR(20)
,email VARCHAR(100)
) ENGINE=InnoDB DEFAULT CHARSET=cp932;

setについては俺は接続する際の文字列として
以下のものを使用している(excel vbaからだけど)
*印のところは適示そちらの環境に合わせて

DB_CnString = "DRIVER={MySQL ODBC 3.51 Driver};" _
& " SERVER = ********;" _
& " DATABASE = ******;" _
& " UID = *******;" _
& " password = ******;" _
& " STMT=SET CHARACTER SET cp932;" _ ←ここ
& " OPTION =3 "

これ以上は俺には知識は無いんで他の方にお願いしてくれw


780 :NAME IS NULL:2009/09/16(水) 13:57:11 ID:WDq6aOQr
>>759
NAMAZUでもいいんじゃね?
mknamazuのタイミングが問題だが

781 :NAME IS NULL:2009/09/16(水) 19:05:40 ID:???
>>778
mysqlコマンドラインを知らないのか?
だったら、それを調べることから。

あるいは、MySQL GUI Toolsを使え。
初心者みたいだし、超おすすめ。


782 :767:2009/09/17(木) 03:17:34 ID:???
>>771
おおお、解説ありがとうございます。
まさにおっしゃる通り、カラムがないとかデータ型がおかしいとか
そういうエラーがmysqlの機能として出力されるのかと思ってました
>クライアントアプリ側でトラップ
やってみます、ほんとにありがとう!

783 :NAME IS NULL:2009/09/17(木) 14:10:45 ID:9P/or61p
どうも合点がいかないことがあるので、質問しても良いでしょうか。OSはFedora10です。
MySQLをインストールしようと思い、mysql-5.1.38-linux-i68-glibc23.tar.gzを /usr/local に展開しました。

cd mysql-5.1.38-linux-i68-glibc23
./configure --以下オプション…

上記のコマンドを入力しても、bash: ./configure: そのようなファイルやディレクトリはありません、となります。
ディレクトリに./configureファイルがあったと思うのですが、どこにいってしまったのでしょうか。

784 :NAME IS NULL:2009/09/17(木) 14:28:41 ID:???
select * from tb where
  ( concat( column1 , column2 , column3) like '%word1%' )

複数カラムのいづれかに指定文字がある検索をしたいのですが
上記の記述では いづれかにNULL があると対応できません
NULLがあっても検索にヒットするようには
どのような記述にすれば良いでしょうか?

よろしくお願いします


785 :NAME IS NULL:2009/09/17(木) 16:17:54 ID:???
>>784
where c1 like '%word%' or c2 like '%word%' or ...
と、or でつなげちゃダメ?

786 :NAME IS NULL:2009/09/17(木) 16:32:16 ID:???
>>783
バイナリ版をダウンロードしてなんでビルドしようとしてるの?

787 :NAME IS NULL:2009/09/17(木) 17:46:07 ID:9P/or61p
>>786
あれこれじゃないですか?どれをダウンロードすればいいでしょうか。

788 :NAME IS NULL:2009/09/17(木) 18:49:06 ID:???
自分でビルドするなら
mysql-5.1.38.tar.gz

789 :NAME IS NULL:2009/09/17(木) 19:26:55 ID:9P/or61p
>>788
有り難うございます(T_T)あなたのイエス様のような導きで救われました。

790 :NAME IS NULL:2009/09/17(木) 23:28:56 ID:???
>>789
バイナリ版をそのまま使うのが吉

791 :NAME IS NULL:2009/09/18(金) 16:36:46 ID:???
5.4.2がでましたね。
まだβ品質みたいですが、そろそろ使い物になってくるかな。

792 :NAME IS NULL:2009/09/18(金) 21:17:45 ID:???
MySQL5.0からvarchar型で65535文字格納できるようになったとのことですが、
text型の使い道って今でもあるのでしょうか?
長文テキストはvarcharに、でっかいバイナリデータならblobに入れれば済んでしまいそうです。

単純に65535文字以上のテキストを格納する場合にのみtext型を使うのですか?
それとも文字制限以外にvarcharでは不都合なケースというのがあるのでしょうか?

793 :NAME IS NULL:2009/09/18(金) 22:36:01 ID:???
改行使う必要ないならvercharでいいんじゃないかな

794 :NAME IS NULL:2009/09/18(金) 23:52:52 ID:???
別に改行あってもvarcharで問題ないだろ
textは文字列をそのまんま格納
varcharは余分な空白を削除する
textfieldに対応するカラムはtextにしときゃいい

795 :NAME IS NULL:2009/09/19(土) 15:58:46 ID:???
MySQLのvercharは余分な空白を削除する?

796 :NAME IS NULL:2009/09/19(土) 21:50:02 ID:???
>>794
「改行がある」と「改行を使う必要がある」は全く違う意味だろ
お前さんの言うやり方で、どうやって改行のある長文を復元できるわけ?

797 :NAME IS NULL:2009/09/19(土) 22:02:18 ID:???
varcharって改行を認識しないの?

798 :NAME IS NULL:2009/09/20(日) 09:48:20 ID:???
innodbのauto_incrementは
テーブルのデータをdeleteしてからmysqlを再起動すると
同じ値が再利用されるってのを最近知った

799 :NAME IS NULL:2009/09/20(日) 19:32:06 ID:DbTnU+4k
データベースを作成しようと思って
mysql> CREATE DATABASE transcript_production;
と入力したところ、

ERROR 1006 (HY000): Can't create database 'transcript_production' (errno: 2)

というエラーが発生します。データベースが作成できないのは何故でしょうか?

800 :NAME IS NULL:2009/09/20(日) 20:38:48 ID:K6cwfdto
エラー内容で検索し、問題点の理解を行おうとしないためです。

801 :NAME IS NULL:2009/09/20(日) 20:43:14 ID:K6cwfdto
まかーは帰れ

802 :NAME IS NULL:2009/09/21(月) 01:48:42 ID:ki/ZQtAj
はい。

803 :NAME IS NULL:2009/09/22(火) 09:24:58 ID:pzId1jk0
ちょっと聞きたいんですが
NULLを許可したフィールドにNULLを入れるのと
データを入れるのとでは使用するサイズに違いはありませんよね?
(実際やってみても同じサイズでした)

これをNULLだとほとんどサイズを使用させたくないのですが可能でしょうか?

804 :NAME IS NULL:2009/09/22(火) 14:57:30 ID:???
>>803
固定長だと無理じゃない?
別テーブルにして、inner join したら?

805 :NAME IS NULL:2009/09/22(火) 17:08:39 ID:E7b8KwR3
>この暗号が解ければGoogleに就職できる? 今のところMITの学生もお手上げ
>
>どうやら比較的単 純な換字暗号らしい(そうではないかも)。
>解読の結果はある電話番号で、解読に成功すればそこに自 分の名前やメールアドレスなど連絡先を残すことができるという仕掛けだ。
>
>http://jp.techcrunch.com/archives/20090921google-is-searching-for-beautiful-minds-but-so-far-no-m-i-t-students-have-broken-its-code/
>暗号
>http://cache0.techcrunch.com/wp-content/uploads/2009/09/Googel-job-code.jpg

MySQL使うらしいぞ

>1.初歩的に重複しない文字列を抜き出す
>2.おもむろにMySQLを立ち上げる
>
>解のヒント
>↓
>@UNHEX関数を使ったAES暗号複合
>AWGS84座標系、ユニバーサルメルカトル図法

誰かやってくれ!!

806 :803:2009/09/22(火) 17:25:08 ID:???
やっぱり無理ですか…
値以外にNULLかどうかの区別が付いてるんでもしかしたら出来るのかな? とは思ったんですが…

別テーブルからinner joinすることにします。ありがとうございました

807 :NAME IS NULL:2009/09/22(火) 17:53:02 ID:???
固定長じゃなくなっちゃうからね。

808 :NAME IS NULL:2009/09/22(火) 23:53:58 ID:ATIBidir
単に時刻だけを扱いたいときって整数型使えばいいの?

809 :NAME IS NULL:2009/09/23(水) 00:08:10 ID:???
>>808
datetime使ったほうがいいとおもうぞ。
addtime()とか時間処理関数使えるし

810 :NAME IS NULL:2009/09/24(木) 23:13:44 ID:43eZZEHL
ENUM使うくらいならCHARなりINTなりでいいよね

811 :NAME IS NULL:2009/09/25(金) 14:08:44 ID:???
構造にもよるけどENUMは基本使わないかなー
聞いちゃいないがSETはcheckboxの値を収める時なんかには使う

812 :NAME IS NULL:2009/09/25(金) 18:49:20 ID:???
>>810
>ENUM
フツーに使う。
クエリの結果を生で見たときにちょっと
わかりやすいから。
ヘビーな用途じゃなきゃ問題ないだろ。


813 :NAME IS NULL:2009/09/25(金) 18:52:52 ID:???
>>808
いんじゃね。

ちなみに、オレはほとんどそうする。
ファイルのタイムスタンプを多用する
都合にあわせてるからなんだけど。


814 :NAME IS NULL:2009/09/26(土) 05:48:22 ID:???
Wonderful world of MySQL Storage Engines
http://docs.google.com/gview?a=v&q=cache:C-Tl5DCz3XsJ:www.percona.com/files//presentations/OSCON2008-Wonderful-World-of%2520MySQL-Storage-Engines.pdf+MyISAM+Innodb+Falcon+Maria+PBXT&hl=en

815 :NAME IS NULL:2009/09/27(日) 14:04:02 ID:nuIWLu+4
そのデータベースの構造を一覧出来る方法がないかなと思っているのですが、一つのコマンドでそういうのは無いでしょうか?

desc name や show create table nameの結果が全部出力されるような感じを考えています。

desc *; や show create table *; という感じで出来るといいのですがそういう方法はありますでしょうか?


816 :NAME IS NULL:2009/09/27(日) 14:07:13 ID:???
>>815
show tables;
じゃだめなの?

817 :NAME IS NULL:2009/09/27(日) 16:50:23 ID:nuIWLu+4
tableの構造も含めた形で取得したいのですが・・。

818 :NAME IS NULL:2009/09/27(日) 18:27:56 ID:???
>>817
説明たりねーよ。ボケ
mysqldumpコマンドくらい知らねーのか!

819 :NAME IS NULL:2009/09/27(日) 19:55:25 ID:nuIWLu+4
失礼しました。

イメージとしては、そのデータベースにある全tableの
desc name や show create table nameの結果が全部出力されるような感じを考えています。

820 :NAME IS NULL:2009/09/28(月) 03:52:05 ID:???
いやだからmysqldump使えって話じゃん


821 :NAME IS NULL:2009/09/28(月) 13:08:10 ID:???
>>815
つ information_schemaデータベース


822 :NAME IS NULL:2009/09/29(火) 12:50:09 ID:ko2ZqKae
質問です。
MySQL5.1で、異なるDBサーバにあるテーブルの結合(join)をすることが出来るでしょうか。

■構成
MySQL5.1をインストールしたDBサーバが2台あり、それぞれ別のテーブルが入っている
(レプリケーションしているわけではなく、別の種類のデータが入っている)

■要件
両サーバにあるテーブルを結合(join)したい。
db1のtable1と、db2のtable2を結合したいということです。結合に用いるカラムは存在
します。

table1のデータとtable2のデータを別々に取得し、プログラムを用いて照会するという
方法もありますが、出来るだけDBへ発行するSQLの本数を少なくしたいというのがクライ
アントさんのご要望で、現在つまずいています。何かわかりましたらお教えください。

宜しくお願いします!


823 :NAME IS NULL:2009/09/29(火) 17:27:48 ID:???
案1 federated storage engine
案2 spider storage engine


824 :NAME IS NULL:2009/09/29(火) 18:00:25 ID:ko2ZqKae
>>823
ありがとうございます。案1でいけそうですね。

825 :NAME IS NULL:2009/09/30(水) 15:42:42 ID:???
5.0系のリレーログについて質問です。

mysqladmin shutdownをすると、リレーログの内容はすべて反映されてから
mysqldが落とされるのでしょうか?

何がいいたいかというと、mysqldが落ちた状態の時は、リレーログや
リレーログインデックスは削除したいのです。
MySQLを実行しているホスト名を変えたいのですが、現状は
リレーログファイル名にホスト名がついてしまっているので、
ホスト名を変更した後、リレーログとリレーログインデックスを
削除してからmysqldを上げようと考えているのですが・・・。

826 :825:2009/09/30(水) 15:43:47 ID:???
x mysqldが落ちた状態の時は、
o mysqldが落ちた状態の時に、

827 :NAME IS NULL:2009/10/01(木) 15:40:00 ID:Y2Zf4H+p
マスター、スレーブ、どっちのホスト名変えんの

ま、どっちにしても
ホスト名かえるならマスターとスレーブ両方ともstopしなきゃならんだろ。
権限テーブルだって見直ししないとならんし。

だったら、マスターから落として、スレーブにマスターの最終更新が反映されたことを確認してから
スレーブも落とせば問題ないんじゃないの

どっちかを稼働させたまま作業するなんてばかなことはやめたほうがいい。
問題はレプリケーションだけじゃないから。
上にかいたが権限とか、MySQLはホスト名依存の汚い部分があるから。


828 :NAME IS NULL:2009/10/02(金) 20:58:04 ID:???
sage

829 :NAME IS NULL:2009/10/06(火) 10:35:34 ID:???
MySQLのMyISAM型はまだトランザクション機能は利用できないんだっけ?

830 :NAME IS NULL:2009/10/06(火) 12:57:28 ID:???
ずっとできない。

831 :NAME IS NULL:2009/10/10(土) 23:44:04 ID:???
ID ---Primary key
CustId ---char(8)

挿入時に、ID に 0を付けた値をCustIdに入れられますか?
たとえば、ID=1 であれば、CustId=00000001 みたいに
以下はトリガは作成できても、アプリから実行するとエラーになります。

create TRIGGER generateCustId after insert on customer for each row
begin
set @custid = CONCAT(Left("00000000",8-Length(new.ID)),new.ID);
update customer set CustID=@custid where ID = new.ID ;
end

832 :NAME IS NULL:2009/10/11(日) 12:52:43 ID:I0TScHXP
質問です
たまに"MySQL server has gone away"と出てきて
MySQLとの接続が切断されるばかりか
一度exitしてもう一度接続しようとすると
パスワードを打った瞬間に
MySQL Command Line Promptの窓が閉じます。
ですから、毎回コンピューターを再起動しなければなりません。

原因は(不適切にデータベースにアクセスした、など)複数あるみたいなので
その追求は後でするとしまして、
"MySQL server has gone away"が出た後でも
コンピューターを再起動せずにMySQLを起動できる方法を教えてください。
何かリセットのコマンドはありませんか?

833 :NAME IS NULL:2009/10/11(日) 15:05:30 ID:???
>>832
再起動してるコンピュータはサーバ側でいいんだよね。
ヒント: /etc/init.d/


834 :832:2009/10/11(日) 18:38:45 ID:I0TScHXP
>>833
はい、サーバー側でいいんですが
Windows Vistaなのでそのヒントでは
どこをいじればいいのか分かりません。
具体的にどこをどうするのか教えてください。

835 :NAME IS NULL:2009/10/11(日) 18:43:55 ID:???
>>834
サービスの再起動したらいい

836 :832:2009/10/11(日) 19:00:54 ID:I0TScHXP
Apache2.2の再起動のことですか?
それなら既にやっています。
Apache2.2が起動している状態から
→停止→再起動
としても正常に起動されないので質問しているんです。
スタートメニューからApacheのstartとstop、
そして、Administrative Toolsでstartとstopと直接やっても起動されません。
他の方法はありませんか?

837 :NAME IS NULL:2009/10/11(日) 19:11:22 ID:???
>>836
どっからapacheが。。
いや、えー
だから、MySQLもapacheのようにサービスを再起動したらいいと言っている

838 :NAME IS NULL:2009/10/11(日) 19:52:27 ID:???
コマンドプロンプトから

net start mysql

net stop mysql

あるいは管理ツールのサービスからMySQLを選んで
起動させる

839 :NAME IS NULL:2009/10/11(日) 19:55:54 ID:???
スタートメニュからどうやったらいいでしょうか?



とか、返ってきそうで怖い

840 :NAME IS NULL:2009/10/13(火) 08:51:57 ID:???
サービスの画面まで自分でいってるんだからそれはないだろ
アッー サービスにmysqlあったんだ!って感じなんじゃねの?

841 :832:2009/10/13(火) 12:11:35 ID:KasnJFah
>>838-840
いやいや、
net start mysql
net stop mysql
は知りませんでしたが、
「管理ツールのサービスからMySQLを選んで起動させる」は既にやってます。
それで出来ないから質問してるんですが。

842 :NAME IS NULL:2009/10/13(火) 13:10:00 ID:???
>それで出来ないから質問してるんですが。

後出乙。832からはexitコマンドとPC再起動しか読み取れない。なにが「ですが」だよ。

843 :NAME IS NULL:2009/10/13(火) 13:18:44 ID:???
>>832の文章では対応として何をしたのかが解らない
>>840が親切にサービスからの事を書いたら
>>841の返答かよ

勝手に悩んでろ

844 :NAME IS NULL:2009/10/13(火) 15:56:22 ID:???
841みたいな最初の質問時に環境を明示しないバカは、ハナから放置するのがいいかと。

845 :833:2009/10/13(火) 17:15:48 ID:???
>>844
そのようだね。反応して済まんかった

846 :NAME IS NULL:2009/10/14(水) 08:25:48 ID:lFiZMz2+
質問です、人名検索のアプリを作っています。検索条件は
「全部|A-Z|あ|か|さ|た|な|は|ま|や|ら|わ」で、「あ」を押した時には
相田、青山、飯山、井村、織田 って感じでア行に所属する名前を表示をしたいと思います。
この場合、where以下の検索条件はどうしたらいいでしょうか?
パラメータは「key=あ」がセットされるものとします。

where `name` like '{$key}%' で考えたけどこれは平仮名指定だし、無理でしょうか?
centOS5.3、Mysql5、PHP5で動かしています

847 :NAME IS NULL:2009/10/14(水) 09:54:27 ID:???
>>846
振り仮名のカラムを作れよ

848 :NAME IS NULL:2009/10/14(水) 22:46:34 ID:???
>>847
そうですね。気がつかなかった、ありがとうございました

849 :NAME IS NULL:2009/10/14(水) 23:52:17 ID:0LwxIgqj
Mysqlのコミュニティーエディションについてお伺いします
会社のイントラネットでドキュメントなどのデータベースに利用したいのですが
これはライセンス的にOKでしょうか?

850 :NAME IS NULL:2009/10/15(木) 01:13:30 ID:???
OK
何を心配しているのか分からん

851 :NAME IS NULL:2009/10/16(金) 15:00:58 ID:???
あるテーブルのフィールドが更新されたのを契機に
外部スクリプト(PHPかBASHスクリプトを検討)を呼び出したいと思います。

外部スクリプト側で一定間隔で監視対象のテーブルを
SELECT COUNT(*) FROM hoge WHERE ...することを
検討してましたが、数秒以内のレスポンスを要求されているため、
この方法でやるのは効率が悪いと考えています。

そのため別の方法を検討しています。
トリガからストアドを呼び出せそうなことはわかりましたが、
ストアドから外部スクリプトをコールすることは出来ますか?

MySQLのVersionは5.0を利用しています。

852 :NAME IS NULL:2009/10/16(金) 20:55:01 ID:???
あるテーブルが更新される間隔は、監視間隔よりも頻繁なのかな。
トリガーで監視対象テーブル更新で更新状態フラグテーブルのフラグを更新して、
その更新フラグテーブルをselectしたら1秒もかからないんじゃないのかな?

853 :NAME IS NULL:2009/10/16(金) 23:45:25 ID:???
Cで書いた関数を登録できるから、ある意味なんでもできる

854 :NAME IS NULL:2009/10/17(土) 18:11:07 ID:???
通信を暗号化したいんですが、
SSHのような、パスワード認証で、
通信だけ暗号化したいんだが、mysqlでできますかね?
よろしくお願いします。


855 :NAME IS NULL:2009/10/17(土) 20:55:31 ID:???
>>854
暗号化はmysqlの担当じゃないな。
VPNとかで暗号化した通信経路を作って
その上にmysqlの通信を通すのがJK

856 :NAME IS NULL:2009/10/17(土) 22:41:14 ID:???
>>854
俺の質問の仕方が悪かった。ごめん。
mysqlで5.x?だと、SSLと連携するようなんですが、
クライアントアプリの全部に、認証鍵とか埋め込むのが、
面倒なんで、通信だけ暗号化できないのかと。。。。
よろしくです。



857 :NAME IS NULL:2009/10/19(月) 22:21:05 ID:???
ラッパーを通すしかないな
そして結局は、そのラッパーを通すためにクライアントアプリを変更する羽目に

858 :NAME IS NULL:2009/10/20(火) 11:25:20 ID:???
運用がおかしくないか?
開発者以外がクライアント使うなんて想像できないんだが
オペレータがSQL使うの?
開発時点で暗号化なんて、それどんなapple?

SQLクライアントは禁止にして、
Webアプリ化、暗号化はhttpsに任せるがJK

859 :NAME IS NULL:2009/10/20(火) 11:25:29 ID:???
すむせん、MySQLのstatusの見方について教えてください
show statusで人生相談に表示するCom_系の値って基本的に加算されてゆくと思うのですが、
計測しているとあるタイミングで減少しているようです。
特にflush statusは実行してないのですがmysqld側でリフレッシュをかけているのでしょうか?
また、もしかけているなのなら実行時間のログなどはありますでしょうか?


860 :NAME IS NULL:2009/10/20(火) 11:28:23 ID:???
>>859
> 人生相談
kwsk

861 :859:2009/10/20(火) 11:29:38 ID:???

× show statusで人生相談に表示する
◯ show statusで表示する

コピペミスです
読みにくくてすみません

862 :NAME IS NULL:2009/10/20(火) 15:03:48 ID:???
>>861
何をコピペミスしたのかkwsk。

863 :NAME IS NULL:2009/10/20(火) 16:13:02 ID:???
MySQLの show statsu って人生相談にも乗ってくれるのか。知らなかった

864 :NAME IS NULL:2009/10/20(火) 17:04:49 ID:???
俺の人生 SHOW STATUS;
やばい

865 :NAME IS NULL:2009/10/20(火) 18:42:54 ID:???
mysql> show status 俺の人生;
ERROR 1064 : 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 '俺の人生' at line 1

866 :NAME IS NULL:2009/10/20(火) 19:10:10 ID:???
全否定されてるw

867 :NAME IS NULL:2009/10/20(火) 23:50:08 ID:???
>>858
レスサンクスです。
最終的に、各PCに常駐アプリいれる予定として、アプリの種類は、
資産管理ツール+ロギングの分類です。HTTPSのPOSTメソッドで、
データベースへの最低限の編集、変更などは、PHP記述で
なんとかなったので、後は、直接アプリからSQLサーバーへ
コネクトして、監査結果やらロギングを行いたいと思いまして、
アプリの開発は、mysql_ssl_set()とか使えば、なんとかなりそうなんですが、
暗号鍵のペア準備が面倒だったので、認証だけは、従来のパスワード認証で接続し、
通信だけ、暗号化したい思いまして。。。どうなんでしょうか?





868 :NAME IS NULL:2009/10/21(水) 01:16:33 ID:???
SQLインジェクションどころの騒ぎじゃないな

869 :NAME IS NULL:2009/10/21(水) 01:38:51 ID:???
なんで編集以外の時だけ直接アプリからmysqlサーバにコネクトするのかは
そういう用件だとして置いといて
クライアント側で認証鍵とかmysql_ssl_setとか使うなら、まずクライアント側でopensslが利用できないと
いけないけどその機能をクライアント側は有してるんでしょうか?
そもそもopensslがクライアント側に入ってなければ各クライアント全部にopenssl入れないといけないだろうし
使うにしてもCAファイルはクライアント側で必要みたいだし
VPNが一番楽だと思うけど


870 :NAME IS NULL:2009/10/21(水) 01:54:26 ID:???
>>868
まるほど。SQLインジェクション、PHPもろでした。ーー;
事前にqueryして、文字列を比較すれば良いのかな。ああ、しんど、



871 :NAME IS NULL:2009/10/21(水) 02:19:20 ID:???
>>869
 レスさんくすです。mysql_ssl_set()
 SSHのPermitパスワードAUTHっぽい動作ができるかの確認で、
 mysql_ssl_set()を全部NULL指定で、該当ユーザーのGRANTに、
 REQUIRE SSLを指定したけど弾かれました。なにかしら、
 クライアント側で鍵を用意しないとダメかもしれません。
>>クライアント側で認証鍵とかmysql_ssl_setとか使うなら、
>>まずクライアント側でopensslが利用できないと
>>いけないけどその機能をクライアント側は有してるんでしょうか?
 将来へ向けてのトライアル試験なので、
 VSではコンパイルしないので、しばらくは大丈夫。
>使うにしてもCAファイルはクライアント側で必要みたいだし
>VPNが一番楽だと思うけど
 VPNってのがピンとこないのですが、ローカルのクライアントポートに、
 SSHのリダイレクトポートを設ける奴でしょうか?。ポートFWで、
 持ち出しPCとかで流行っていますが・・・それでもいいかな。

SSHコマンドのトンネル方式か、それともSSL埋め込みか。

872 :NAME IS NULL:2009/10/21(水) 02:36:55 ID:???
サーバ側での起動オプションやサーバ側で準備しないといけないファイルもあるのでそのあたりはこちらで
>http://dev.mysql.com/doc/refman/5.1/ja/secure-connections.html

873 :NAME IS NULL:2009/10/21(水) 10:26:23 ID:???
>>871
stunnel辺り使うのが1番楽な気がするけど。


874 :NAME IS NULL:2009/10/21(水) 11:53:51 ID:???
>>855に戻る

875 :NAME IS NULL:2009/10/21(水) 17:01:24 ID:???
>>870
いやPHPの話じゃなくて、アプリから直接SQLサーバにつなぐんだろ?
てことは当然、コマンド送り放題なわけだから何でも出来てしまう。
で、>>858に帰結すると思うんだが。

編集にPOSTを使っておいて、なんで閲覧にGETを使わないの?

876 :NAME IS NULL:2009/10/22(木) 00:03:37 ID:???
>>875
>いやPHPの話じゃなくてアプリから直接SQLサーバにつなぐんだろ?
 アプリ自身に、単純にパスワードを埋め込む方法だと、
 通信が暗号化されても、配布しているバイナリーを解析されたら、
 該当パスワードは容易に抽出できてしまうかもしれない。
 結局アプリ側でなんでもできてしまう。ふむふむ。
 パスワード方式は、限界で、クライアント側の公開キーを生成して、
 サーバー側へ設定するしかないのか。キーはインストール時に、
 自動生成して、システム管理へ投げるようにしてもらうか。
>編集にPOSTを使っておいてなんで閲覧にGETを使わないの?
 GETもPOSTもPHP側の受処理としてはほぼ同じっすよね?
 強い理由があってPOST閲覧している訳ではないです。
>>872、873
 いろいろ情報サンクスです。アプリに埋め込むパスワード方式は
 限界っぽいので、もうmysqlのSSLでやって見ようと思います。
 まだシビアな情報を扱うDBにはなっていないのでいずれ。

877 :NAME IS NULL:2009/10/22(木) 00:59:56 ID:???
暗号化したパスワードをアプリに入れといて、コネクトする前にデコードして使えば多少解析されてもいいんじゃない?
ある程度独自のシード使って

ていうかバイナリー解析されたらとか心配してたら何も出来ないよ
ちょっといろいろ心配しすぎ

878 :NAME IS NULL:2009/10/22(木) 01:03:12 ID:???
一番安心かつ楽なのはWebアプリにしちゃうことだよ

879 :NAME IS NULL:2009/10/22(木) 11:00:37 ID:???
group_byした結果の行数を取得する方法ってどうやるんでしょうか。

countを使うと、group毎にcountしてしまうので。。

880 :NAME IS NULL:2009/10/22(木) 11:27:12 ID:???
自己解決しました。
select count(*) from (select -中略- group by aa) as c
で大丈夫でした。

スレ汚し申し訳ないです。

881 :NAME IS NULL:2009/10/22(木) 18:09:06 ID:Gyb9EKM2
OracleはMySQLを売却せよ - オリジナル開発者が叫ぶ
http://journal.mycom.co.jp/news/2009/10/22/018/index.html

だとさ

しかし今さらMySQLだけ買おうって会社なんかあるんかね
つぶれそうなところをSunに拾ってもらったんだろ


882 :NAME IS NULL:2009/10/22(木) 18:38:00 ID:???
IBMぐらいしか思いつかんが
ラリーがIBMに売るわけがない

883 :NAME IS NULL:2009/10/22(木) 19:44:52 ID:???
マジでどうなるの?
有料化されちゃうの?


884 :NAME IS NULL:2009/10/22(木) 21:37:23 ID:???
>>882
IBMはDB2あるからあんま意味無いんじゃ。
こういう話で国内企業が名前だけでもでて来ないのはちょっと寂しい。

885 :NAME IS NULL:2009/10/22(木) 21:51:38 ID:???
IBMはOracleの前のSunの売却先候補だったことをお忘れなく
ま、IBMもMySQLはいだんだろうが

米国勢で買えそうな資金があるのはGoogleとYahooとMSくらいか
Googleは社内で大量に使ってるからおかしな会社に売られるくらいなら買うかもしれないが、
Google社内にMySQLのエキスパートがたくさんいるからいまさらどうなっても痛くもかゆくもないだろ
5.4なんてもろにGoogleパッチでできてるようなもんだろうしな
一番の理由になりそうなのはGoogleがソフトウエア売買ビジネスをやるはずもないってことだろうな
Yahooもソフトウエア販売はやらんだろう
MSはどうかね。MSが買う気になるとは思えんが、万が一そう思ってもOracleが売らないだろう。

となると、買うとしたらヨーロッパのソフト会社かね
日本では知られていないが資金力のあるところはあるんだろう
SAPとかは有名だが

日本国内だと楽天が手をあげる可能性はあるかも。
一気に世界企業の仲間入りできそうじゃん
三木谷好きそうじゃん


886 :NAME IS NULL:2009/10/22(木) 22:11:18 ID:???
楽天SQL か、、、
selectした結果がnullの時はポイントとかついてくれたら嬉しい w

887 :NAME IS NULL:2009/10/22(木) 22:26:40 ID:???
ガッしたら1000ポイントとかねw

888 :NAME IS NULL:2009/10/23(金) 04:19:53 ID:???
BTreeを3本木にして、3木Tree にするしかないな。

889 :NAME IS NULL:2009/10/23(金) 04:44:16 ID:???
>>880
もしかして select count(distinct aa) from tbl



890 :NAME IS NULL:2009/10/23(金) 13:51:53 ID:???
>>888
その暁にはTTreeと呼べや

891 :NAME IS NULL:2009/10/24(土) 08:21:52 ID:???
>>890
TTreeって、ROOT(http://root.cern.ch)思い出すな。

892 :NAME IS NULL:2009/10/26(月) 16:26:55 ID:???
5.1.37 innodb
text型は、MySQLコマンドブックでは最大長65535バイトとありますが、
可変長と考えてよろしいのですか?


893 :NAME IS NULL:2009/10/26(月) 16:28:39 ID:???
>>892
可変長

ところで、innodb プラグイン試してみた?

894 :892:2009/10/26(月) 17:04:27 ID:???
>>893
ありがとうです。
プラグインというのは初めて知りました w
ぐぐって見たら .38からとの事。今5.1系列では40が最新だから使って見ても大丈夫そうな? w
調べてみます。

895 :NAME IS NULL:2009/10/27(火) 18:22:45 ID:b3uBGirQ
amazon rdsキター
これで面倒な管理をやらないで済むようになると思いきや
http://blog.masuidrive.jp/index.php/2009/10/27/amazon-released-rds/
ここ見ると落ちてたらしい
落ちたらあかんがな!!

896 :NAME IS NULL:2009/10/27(火) 18:43:53 ID:sUuPMg09
rdsのdb snapshotってどうやって実現してるんだろう?
myiで運用しながらのコピーだとロックがかかるし時間もかかるし

897 :NAME IS NULL:2009/10/27(火) 19:12:02 ID:uR+M8xJO
チューニングはどうなってるんだろう?
結局のところ生のmysqlだから
コネクションが足りなくなったりすることもあると思うんだけど

898 :NAME IS NULL:2009/10/27(火) 19:24:24 ID:PGbJvuUV
http://www.atmarkit.co.jp/news/200910/27/aws.html

デフォルトのDBエンジンはInnoDBだが、ほかのエンジンも利用できる。
スキーマ設計、インデックス作成、パフォーマンスチューニングなども可能で、
使い勝手はネイティブのMySQLと大きく違わないという。

結局チューニングは自分でしないといけないのか
面倒くささあんまり変わらないじゃないか

899 :NAME IS NULL:2009/10/28(水) 03:25:32 ID:AvOezp4B
スレ違いならごめんなさい。
質問なのですが、
テーブルで使われているデータを調べて、最適な型を教えてくれるコマンドがあったはずなのですが、どのサイトを調べても出てこないので教えてください。

例えば、BIGINTで宣言されたカラムに、INT以下のデータしか入ってなく、NULLが無い場合、INT UNSIGNED NOT NULLと出たり、
CHAR(10)にもし"YES"と"NO"しか入ってない場合は確かENUM("YES","NO")が出力されました。
探し方が悪いのか、ずいぶん検索したのですが結局出てきませんでした。
よろしくお願いします。

900 :NAME IS NULL:2009/10/28(水) 07:26:33 ID:???
MySQL 5.1.40 の innodb で
delete from data where id is not in ( select id from list );
のように、別のリストのidに含まれない物を消そうとすると、
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
となってしまいます。
noo in (サブクエリ) の構文を最適化して書き直せませんでしょうか?

901 :NAME IS NULL:2009/10/28(水) 08:05:57 ID:???
in句に相関のないサブクエリを書いちゃだめ
dataテーブルのレコード数だけlistテーブルのフルスキャンが走る

delete from data where not exists
(select 1 from list where list.id = data.id)

902 :NAME IS NULL:2009/10/28(水) 09:38:52 ID:???
>>901
ありがとうございます。
魔法のようなクエリですね。

903 :NAME IS NULL:2009/10/28(水) 23:04:24 ID:???
>>900
サブクエリを使わずに、
delete data from data left join list on data.id=list.id where list.id is null
という方法もある。

904 :NAME IS NULL:2009/10/29(木) 11:15:10 ID:???
http://slashdot.jp/comments.pl?sid=472169&threshold=-1&commentsort=3&mode=thread&pid=1660225#1660234
ライセンスについてなんか論議されている。
taka2って言うのが一人だけやたら斜め上からで変な持論展開

905 :NAME IS NULL:2009/10/29(木) 11:25:31 ID:???
>>903
ありがとうございます。
手持ちの環境では効率に差がないようですが、
サブクエリよりは、left join のほうが一般的におすすめでしょうか?

906 :NAME IS NULL:2009/10/31(土) 09:22:36 ID:o/Jls4e4
WebサイトでMySQL5を使おうと思っています。
漢字コードは何にした方が、実務上問題が少ないのでしょうか?

よろしくお願いします。


907 :NAME IS NULL:2009/10/31(土) 09:56:12 ID:???
>>906
utf8じゃだめなの?

908 :NAME IS NULL:2009/10/31(土) 10:23:52 ID:???
私も文字コード迷った。
ajax使うのにらくだからと思ってサイトもDBも全部utf8にしちゃったけど、今後なにか不都合とかデメリットとかってあるでしょうか?

909 :NAME IS NULL:2009/10/31(土) 13:32:02 ID:???
>>908
入口から出口までutf8で通すのが一番楽だと思うけど、
古い携帯とかサポートしたいのかな?

910 :906:2009/10/31(土) 16:04:30 ID:o/Jls4e4
>>907-909
レスありがとうございます。

日本MySQLユーザ会のホームページで、
「utf8 はご存じの通り、到底整理されているコードとは言い難く」って
書かれていましたので、質問させて頂きました。

>>909
「入口から出口まで」のutf8の指定場所は、
HTMLの「<meta 〜 charset=」と、
ソースエディタの漢字コード指定と
MySQLでの指定で、全てなのでしょうか?

よろしくお願いします。


911 :NAME IS NULL:2009/10/31(土) 16:07:59 ID:???
>>910
最近のブラウザや携帯電話では問題ないよ。
IE6とか、古い携帯電話だと機種によってはutf8が甘いのもあるけど、
とりあえずは無視しても良いと思う。

utf8は根強い反対派も居るけど、俺は歓迎してるよ。
(確かに問題も含んでいるのは確かだけど。)
全部utf8で統一すれば、変換テーブル問題もないし。
ただ、適所で正規化が必要かも。そこは面倒だね。

912 :910:2009/11/02(月) 20:07:03 ID:cL+4Y1kF
>>911
レスありがとうございます

「正規化が必要」とは、どういうことでしょうか?

913 :NAME IS NULL:2009/11/02(月) 21:45:30 ID:???
MySQL 5.1
auto_incrementに関する質問です。あれは番号を削除した場合つめる事が出来ないですよね。皆さん
どの様にされてます?独自の連番システムを作ってるとかですか?

現在作っているのはPKとしてのみ使い、それを使って検索するとか表示するとかする予定は無いのですけど。


914 :NAME IS NULL:2009/11/02(月) 22:11:11 ID:???
>>913
どのようにしているもなにも、番号をつめる必要を感じない

915 :NAME IS NULL:2009/11/02(月) 22:49:21 ID:???
>>914
まァそう言えばそうなんですが w

では、逆に(削除が有った時に)詰める必要があるとしたらどうすれば良いと思います?


916 :NAME IS NULL:2009/11/03(火) 00:26:04 ID:???
>>912
ひょっとして、正規化って概念すら知らんのか?

>>915
別のカラム作れ

917 :NAME IS NULL:2009/11/03(火) 01:56:54 ID:???
>>912
unicodeが嫌われる理由の一つが、その正規化なんですよね。
Macの「〜」とか。
まぁ、調べてみてくれ。

918 :912:2009/11/03(火) 07:55:58 ID:zLDyRTuE
>>916
レスありがとうございます。

「正規化」という言葉の意味ではなく、
「何」を正規化しなければいけないのか?
という質問です。

よろしくお願いします。


919 :NAME IS NULL:2009/11/03(火) 09:07:23 ID:???
>>918
何って、unicodeの話してるんじゃないのか?

920 :NAME IS NULL:2009/11/03(火) 09:55:34 ID:???
NFKCで正規化したutf8でいれてutf8_binで比較してる。

921 :NAME IS NULL:2009/11/03(火) 21:16:26 ID:???
正規化してないShiftJISを使うことなんて普通だし、Unicodeだからといって
正規化必須ってわけじゃないからなぁ。

922 :NAME IS NULL:2009/11/04(水) 04:35:48 ID:???
InnoDBで、多くのクライアントからupdateやselectが
たくさん(といっても10クエリ/秒)来ているとき、
ほとんどの場合で良好にさばいてくれるのですが、
あるとき、(たぶんupdate)処理がスタックして、
そのテーブルが絡むselect等も一斉に止まり、
timeoutして再び動き出すことがあります。

止まっている間、dead-lock が生じているわけでもなく
CPUやI/Oもidle状態で、なぜ止まっているのか分かりません。

試しにMyISAMにしてみると、そのロックはおきませんでした。
なので外部キー制約かと思って、InnoDBに戻して外部キー設定を外してみたのですが、
やはり同じようにロックが生じてしまいます。

ちょっとこれだけの情報で何を質問しているんだと怒られそうですが、
具体的に何がロックしているのかも分からないので、どうしたものかわかりません。
InnoDBに特有の有名な注意点があったりするのでしょうか。

抽象的な質問ですみません。


923 :912:2009/11/04(水) 07:35:59 ID:aSZSVXtb
レスありがとうございます。

正規化の意味は分かりました。

再質問ですが、
正規化しなければいけないのに、なぜutf8が良いのでしょうか?
(SJISだと、どういう欠点があるのでしょうか)

924 :NAME IS NULL:2009/11/04(水) 10:14:16 ID:???


925 :NAME IS NULL:2009/11/04(水) 12:27:01 ID:???
SJISだと表示できない文字が増えてきたから

926 :NAME IS NULL:2009/11/04(水) 14:36:44 ID:???
>>923
使う予定のアプリや文字が、全部sjis前提なら、何も問題ない。
でも、そんなことあるか?

927 :NAME IS NULL:2009/11/04(水) 14:51:59 ID:???
最初から最後までSJISならいいけどね。
途中Unicodeになると、変換再変換が面倒くさい。
0x5c,0xa5みたいなのとか。

928 :923=912:2009/11/04(水) 16:43:22 ID:aSZSVXtb
>>925-927
レスありがとうございます


929 :NAME IS NULL:2009/11/04(水) 22:21:36 ID:gnz0MBuh
+----------+---------+-------+----+
| 日時  | 人(id) |入・出 | 時間  |
+----------+---------+-------+----+
| 20061002 | 222627 | b | 13:26:47 |
| 20061002 | 222627 | c | 13:36:14 |
| 20061002 | 585717 | b | 13:36:41 |
| 20061002 | 585717 | c | 13:37:26 |
| 20061002 | 1142463 | b | 13:38:01 |
| 20061002 | 1142463 | c | 13:40:50 |
| 20061002 | 402399 | b | 13:40:58 |
| 20061002 | 402399 | c | 13:44:24 |


↑は,銀行の窓口のテーブルです。
bが人が入ってきた時間で,cが出ていった時間とします。

そこで,人が窓口にいない遊休時間の平均を算出したいのですが,
どのようにしたらよいのでしょうか?
MySQLは5.0です。

930 :NAME IS NULL:2009/11/04(水) 23:54:54 ID:???
なんでそんなテーブルにしているの?

931 :929:2009/11/04(水) 23:58:22 ID:gnz0MBuh
>>930
レスありがとうございます。
テーブルは他人が作ったもので、私が遊休時間の平均を算出するように頼まれました。

例えばどういうテーブルが良いでしょうか?

932 :NAME IS NULL:2009/11/05(木) 10:33:43 ID:???
テーブルきれいにしても、
プログラムでゴリゴリ書くしか思いつかんなあ

int number = 0;
boolean idle = false;
long begin = 0L;
long end = 0L;

rs = conn.executeQuery("select ... from ... order by 時間");

while (rs.next()) {
 if (rs.getString(3).equals("b")) {
  number++;
 } else if (rs.getString(3).equals("c")) {
  number--;
 } else {
  throw ...
 }
 
 if (number == 0) {
  begin = rs.getTimestamp(4).getTime();
  idle = true;
 } else if (idle == true) {
  end = rs.getTimestamp(4).getTime();
  idleList.add(end - begin);
  idle = false;
 }
}


933 :NAME IS NULL:2009/11/05(木) 12:07:22 ID:???
>>931
素直に集計スクリプト書いたら?


934 :NAME IS NULL:2009/11/05(木) 13:16:28 ID:???
窓口テーブルが大きいと問題があるかもしれないけど。

SELECT AVG(diff) FROM (
SELECT IF(
COUNT(IF(c2.入・出 = 'b', 1, NULL)) = COUNT(IF(c2.入・出 = 'c', 1, NULL)),
TIME_TO_SEC(TIMEDIFF(c1.時間, MAX(c2.時間))),
NULL
) AS diff
FROM 窓口 c1, 窓口 c2
WHERE c1.入・出 = 'b' AND c1.時間 > c2.時間
GROUP BY c1.id
) diffs;

935 :NAME IS NULL:2009/11/05(木) 13:38:27 ID:???
create table hoge(
ent_date varchar2(8)
,guest_id varchar2(6)
,ent_type varchar2(1)
,ent_time date
);

create table time_table ( t_time varchar2(4) );

936 :NAME IS NULL:2009/11/05(木) 13:41:04 ID:???
insert into time_table
select str_h || m2.str_m2 || m1.str_m1 -- as t_time
from (
select str_h2 || str_h1 as str_h
from
( select '0' as str_h2 from dual
union all select '1' as str_h2 from dual
union all select '2' as str_h2 from dual ) h2
,( select '0' as str_h1 from dual
union all select '1' as str_h1 from dual
union all select '2' as str_h1 from dual
union all select '3' as str_h1 from dual
union all select '4' as str_h1 from dual
union all select '5' as str_h1 from dual
union all select '6' as str_h1 from dual
union all select '7' as str_h1 from dual
union all select '8' as str_h1 from dual
union all select '9' as str_h1 from dual ) h1
where str_h2 || str_h1 between '00' and '23' ) hh
,( select '0' as str_m2 from dual
union all select '1' as str_m2 from dual
union all select '2' as str_m2 from dual
union all select '3' as str_m2 from dual
union all select '4' as str_m2 from dual
union all select '5' as str_m2 from dual ) m2
,( select '0' as str_m1 from dual
union all select '1' as str_m1 from dual
union all select '2' as str_m1 from dual
union all select '3' as str_m1 from dual
union all select '4' as str_m1 from dual
union all select '5' as str_m1 from dual
union all select '6' as str_m1 from dual
union all select '7' as str_m1 from dual
union all select '8' as str_m1 from dual
union all select '9' as str_m1 from dual ) m1
-- order by t_time
;

937 :NAME IS NULL:2009/11/05(木) 13:42:08 ID:???
select
100 * ( 1 - sum(excl_flg) / count(*) )
from (select
tt.t_time
,u_io.excl_flg
from time_table tt
left join
(select distinct
1 as excl_flg
,i_time
,o_time
from ( select guest_id ,to_char(ent_time ,'hh24mi') as i_time from hoge where ent_type = 'b' ) u_i
left join ( select guest_id ,to_char(ent_time ,'hh24mi') as o_time from hoge where ent_type = 'c' ) u_o
on u_i.guest_id = u_o.guest_id ) u_io
on tt.t_time between i_time and o_time
);

938 :NAME IS NULL:2009/11/05(木) 13:48:24 ID:???
935-937

時間のテーブルを別に用意してやってみた。

・窓口の数
・人の滞在時間の重複
・平均算出の単位
・窓口の開始・終了時間
・処理単位は秒?分?

このあたりも考えないとダメだけど。
あと、構文はOracleです…。

ていうか質疑応答スレじゃないのに良かったのかな。

939 :NAME IS NULL:2009/11/06(金) 09:54:48 ID:???
>>938
神クエリを見ることが出来たので、許す。

940 :NAME IS NULL:2009/11/06(金) 10:36:52 ID:???
まさかSQLだけでやっちまえるとは…

941 :NAME IS NULL:2009/11/06(金) 11:11:52 ID:ZUvcKSUf
リアルにすごいなこれ

942 :NAME IS NULL:2009/11/06(金) 14:20:10 ID:???
字下げが詰められちゃったSQLを3人も(!)読んでもらえたみたいでマジ感謝です。
行頭スペースを全角で置き換える気力がなかったの。ごめんね。

つーか、MySQLのスレでOracleSQL書いて褒められるってwww
質問者さんには伝わったかなぁ…あ、ホントに使うなら検証してね!

ノシ

943 :NAME IS NULL:2009/11/08(日) 15:54:38 ID:???
>>942
SQLの方言、ちょっと使わないと忘れるよな。

そういえば、sedやawkは忘れないのに、perlは使えなくなるのはなんでだぜ?


944 :NAME IS NULL:2009/11/09(月) 13:48:24 ID:???
非常に初心者的な質問ですみません
今までSQLite使っていました
SQLiteはファイルシステムにデータベースを生成する場合を使って、samples.sqliteというファイルを事前に作り、そこにに書き込んでいました
今MySQLを使っているのですが、MySQLはいったい何処の何にデータベースを書き込んでいるのでしょうか?
MySQLフォルダを見ても何か書き込みようのものが見当たるわけでもありませんし、パスはどこに指定されているのかとか良く分かりません
テーブルとかのデータはいったいどこに格納されているのでしょうか?

945 :NAME IS NULL:2009/11/09(月) 14:05:02 ID:???
C:\mysql\data\testdb とか
/var/lib/mysql/testdb とかの
testtbl.frm
testtbl.MYI
testtbl.MYD
など。

946 :NAME IS NULL:2009/11/09(月) 14:21:34 ID:???
ファイルベースじゃないと何か不安だなぁ
専用機なら良いんだろうけど

947 :NAME IS NULL:2009/11/09(月) 14:24:16 ID:???
>>945
すみません、色々再確認してみたのですが、どうもそのようなファイル、フォルダがbin、lib、shareしかなく、見当たりませんで、拡張子も.pdbというのがいくつかあるだけでした

で、my.iniを確認してみたのですが、

#Path to installation directory. All paths are usually resolved relative to this.
basedir="C:/Program Files/MySQL/MySQL Server 5.1/"

#Path to the database root
datadir="C:/Documents and Settings/All Users/Application Data/MySQL/MySQL Server 5.1/Data/"

というのが見つかったのですが、このどちらかのパスで指定された場所にあるのでしょうか?
デフォルトのまま使っているのですが、Application Dataというフォルダが自分のには見当たらなくて、結局何処にあるのか分かりませんでしたが

948 :947:2009/11/09(月) 14:56:33 ID:???
解決致しました

949 :NAME IS NULL:2009/11/09(月) 15:19:33 ID:???
なぜどう解決したか書かない。

950 :NAME IS NULL:2009/11/09(月) 16:00:10 ID:???
解決方法を他人に教えるのが勿体ない!みたいな心理が働いてるんじゃね

951 :NAME IS NULL:2009/11/09(月) 16:02:40 ID:???
Application Dataは隠しファイル属性だね

952 :948:2009/11/09(月) 16:04:41 ID:???
あぁ、すみません

xcopy コピー元ディレクトリ コピー先ディレクトリ /S /E

コレを使って、C:/Program Files/MySQL/MySQL Server 5.1/の下に自分で作ったdataフォルダの中にコピーを入れました
そしたら自分で作ったデータベースの名前のフォルダが出てました
その上でパスをこのフォルダに変更しました

別に出し惜しみしたわけではありません
悪しからず

953 :NAME IS NULL:2009/11/09(月) 23:32:50 ID:9hIX4tWW
select * from user WHERE id ='3fjsaod'
のクエリでid 3 が検索にヒットしてしまうのですが何がおかしいでしょうか?
ちなみにPHP+mysql5です

954 :NAME IS NULL:2009/11/10(火) 02:30:18 ID:???
Windows7 x64 でローカル環境で遊んでいるのですが、

■Apache 2.2  →  http://localhost/のページは表示される。
■MySQL 5.1  → Command line clientからはDBにアクセスできる。
■PHP 5.2.5 → http://localhost/index.php のスクリプトはちゃんと動く。
■phpMyAdmin → rootでパスワードを入力して実行を押すとパスワードのエラーは出ずに
「Internet Explorer ではこのページは表示できません」 となる。

Vista x64 home premiumの時はphpMyAdminもちゃんと動いていたのですが、
Win7proにしてインストールし直した時に何か設定が変わったのか、ブラウザでphpMyAdminのログイン後の表示ができません。
何がわるい?

955 :NAME IS NULL:2009/11/10(火) 13:58:34 ID:IvLtg11n
質問させてください。レストランのメニューの一覧を作るプログラムを書いています。

0)関連するテーブルは次の2つ
1)「メニュー自体のテーブルmenuTable(id, uId, menuName, price, category)」
2)「メニューのカテゴリーのテーブルcategoryTable(id, uId, cate1, cate1_open, cate2, cate2_open, …中略…cate5_open)」
3)2つの関係は、menuTableのcategoryの値は"cate1" または "cate2"が入る。uIdは登録ユーザで両方とも同じ。

この条件のとき、所属するカテゴリーが公開状態(cate1_openもしくはcate2_open(初期値0)が1の場合)のメニューだけ
SELECTしたいと思います。
どういうSQLを書いたら良いでしょうか?
テーブルJOINしてPHPで公開してないアイテムを除外して出力が賢いかと思いましたが、クエリで実現したいです。
よろしくお願いします

956 :NAME IS NULL:2009/11/10(火) 14:19:06 ID:???
雰囲気としてはこーゆーこと?

select
   id
  ,uid
  ,menuName
  ,price
  ,category
from menuTable mt inner join
  (   select id ,uid ,cate1 as cate from categoryTable where cate1_open = 1
   union select id ,uid ,cate2     from categoryTable where cate2_open = 1 ) ct
on mt.id = ct.id
and mt.uid = ct.cid
and mt.category = ct.cate
order by id
;

全然動かしてないから構文エラー出るかも…。
idはそれぞれのテーブルで関連無いのかな。
不要なら結合条件から外してくだせぇ。

957 :NAME IS NULL:2009/11/10(火) 21:17:27 ID:???
ん?cate1_openは文字型なのにcategoryは数値型なのか?

958 :NAME IS NULL:2009/11/10(火) 21:18:20 ID:???
あ、逆か。

959 :955:2009/11/10(火) 22:50:37 ID:???
>>956-958
ありがとうございます。LEFT JOINしか使ったことがないのでイマイチよくわからないですが、勉強してみます。

もう一つ、漠然とした質問なんですが、よくjoinを使った場合と個々のテーブルに複数回クエリした場合で
必ずしもjoinの方が早くなるわけじゃないと言いますが、何万件以上の規模にならなければ
そんな差は出ないものでしょうか? 数千件程度で遅くなったりしますか?(JOINで)

960 :NAME IS NULL:2009/11/11(水) 09:30:46 ID:???
ほんとSQLは難しい。おまえら尊敬するよ。

961 :NAME IS NULL:2009/11/12(木) 16:22:19 ID:satwQTs/
C APIにおけるプリペアードステートメントの質問です。
下記のようにstmt1を閉じる前にstmt2を生成すると、最後の行で
"Commands out of sync; you can't run this command now"エラーが
起きてしまいます。
1つのコネクションで複数のクエリを同時に発行したいのですが、どう
実装すれば良いのでしょうか。

MYSQL_STMT *stmt1 = mysql_stmt_init(&mysql);
char *query1 = "select * from foo";
mysql_stmt_prepare(stmt1, query1, strlen(query1));
mysql_stmt_execute(stmt1);

MYSQL_STMT *stmt2 = mysql_stmt_init(&mysql);
char *query2 = "select * from bar";
mysql_stmt_prepare(stmt2, query2, strlen(query2));

962 :NAME IS NULL:2009/11/13(金) 00:16:01 ID:???
>>961
mysql_stmt_bind_result() してみるとか。

963 :NAME IS NULL:2009/11/13(金) 01:40:11 ID:???
のんきだね〜皆さん
オラクルのSUN買収でMySQLの行く末があやしい状態なのによお

linuxディストリにMySQLがバンドルされなくなったら面倒だろ?
forkが出てきたとしても、PHPが対応するとも限らんだろ?

どうなっちまうのかねえ〜


964 :NAME IS NULL:2009/11/13(金) 01:55:51 ID:???
ぺちぱー乙でありまする☆

965 :NAME IS NULL:2009/11/13(金) 06:41:46 ID:???
MySQL使えなくなったら違うの使えばいいだけだろ
意味分からん

966 :NAME IS NULL:2009/11/13(金) 07:47:54 ID:???
GPLでもあるから心配してない。

967 :NAME IS NULL:2009/11/13(金) 11:12:46 ID:???
文字コード問題、どうにかしてくれないかなぁ・・・

968 :NAME IS NULL:2009/11/13(金) 14:03:47 ID:???
文字コード問題って、今でも残ってるのは
UTF-8の4バイト文字対応ぐらいじゃない?

969 :NAME IS NULL:2009/11/13(金) 14:51:04 ID:???
>MySQL使えなくなったら違うの使えばいいだけだろ
無駄な工数といえる

970 :NAME IS NULL:2009/11/14(土) 01:53:42 ID:X2Zii3C+
文字コードの事なんだけど、以前はujisで登録してたけど少し前に“〜”が“?”に文字化けしてるのに気がついてeucjpms使い始めたんだけど、もしかしたら気づく前にも機種依存文字使ってたかもしれないと思って探したらやっぱりあった。
でもテーブルの量が多すぎて修正しきれないんだけどいい方法無いですか?

971 :NAME IS NULL:2009/11/14(土) 05:28:10 ID:???
>>970
バックアップ取ってこっそりかえてみて、苦情が来なければOKとか…。
そんな変態コード使うとろくな事無いぞ。

972 :NAME IS NULL:2009/11/14(土) 11:08:17 ID:???
mysql 5.1.37 WixXP sp3
mysqldumpで取得したファイルをtestに入れてみようと思い、以下の
コマンドを入れたのですが、

c:\>mysql test < "c:\data.sql" -u root -pxxxxx

ERROR at line 76:Unknown command '\''.

と出てしまいます。念のため同じくmysqldumpで取得している
他のDBを同じコマンドで入れてみたらそちらは正常に入れる事が出来ました。
両方ともDBの中のテーブルはInnodb、キャラクタセットはcp932で作っている
のですけど。
で、mysqldumpで出来たファイルの中身を秀丸(utf-8でエンコードし直し)でみると
らしき所には
'<Sample>\r\n と確かに'\'があります(text型のカラムの所ですけど)。

どうすれば、リストア出来るのでしょうか?



973 :NAME IS NULL:2009/11/16(月) 17:06:08 ID:izYklsWS
table hoge
1,a
1,b
2,a
3,a
3,b
4,a

これから結果を下記のように取り出すことは出来るのですか?

結果:

1,ab
2,a
3,ab
4,a


974 :NAME IS NULL:2009/11/16(月) 17:43:44 ID:???
group_concat

975 :NAME IS NULL:2009/11/16(月) 18:38:49 ID:???

select ifnull(max(id),0), count(*) as kensu from data

としているのですけど、ifnullってmysql固有の関数ですよね?
それでこれを標準のcaseを使って書き変えた場合、どのように
書けば良いのでしょうか?


976 :NAME IS NULL:2009/11/16(月) 19:10:37 ID:???
>>974
ありがとうです。
あるんですねー。
手元の本には見つけらんなーと
思っていたら、バージョン3とか・・・。


977 :973:2009/11/17(火) 18:40:39 ID:LfUIkQIT

これでいけるとおもいきや、
リリース環境のmysqlバージョンが4.0.24で、
GROUP_CONCATが使えません orz
他の方法ありますか?


978 :NAME IS NULL:2009/11/17(火) 23:12:16 ID:???
他にないからgroup_concatができたんだと思いますよ
プログラムでがんばってください

979 :NAME IS NULL:2009/11/18(水) 01:48:14 ID:sB/M8f+C
MySQLのin句で指定できる項目の数には制限があるのでしょうか?
噂によるとオラクルでは1000個以上の項目をin句に指定するとエラーになるそうです。
このような制限はMySQLにもありますか?
あるとしたら、それは何個まででしょうか?また、制限以上の個数をin句に指定したい場合のSQLの書き方を教えてください。

よろしくお願い致します。


980 :NAME IS NULL:2009/11/18(水) 04:43:46 ID:???
手元ですぐテスト出来そうなもんだが
どこまで他力本願なんだか

981 :972:2009/11/18(水) 14:55:49 ID:???
自己解決
mysqldumpでダンプを取得する際に以下のパラメータを追加

--default-character-set=cp932

でダンプを取り直し、それをtestDBに入れたらすんなり入りました。




982 :NAME IS NULL:2009/11/19(木) 15:18:39 ID:T8+3uiLr
SELECTの内容をUPDATEするにはどうしたらいいでしょうか?

update hoge_table set h1 = $1,h2 = $2,h3 = $3,h4 = $4 where id =1;
select h1,h2,h3,h4 from fuga_table where id =3;

サブクエリだといけると思うのですが全部サブクエリはさすがに重たい処理になる気がしました。
update hoge_table set h1 = (select h1 from fuga_table where id=3),h2 = (select h2 from fuga_table where id=3),長いので省略... from fuga_table where id =3;

ご教示お願いいたします。

983 :NAME IS NULL:2009/11/20(金) 02:38:32 ID:???
>>982
deleteしてinsertするのはどう?
insert into hoge_table select h1,h2,h3,h4 from fuga_table where id=3;
トランザクション使えば、データの整合性は問題ないし。


984 :NAME IS NULL:2009/11/20(金) 21:15:31 ID:fcpTVk0Z
以下の条件を満たすクエリはどう書いたらいいでしょうか?

1)登録ユーザー名と、そのユーザーがアップロードした直近の写真3つをリスト表示するアプリ用のクエリ。
2)ユーザーは複数。アップできる写真に上限はない。
3)ユーザテーブル uTable は、uId , uName
4)写真テーブル pTableは、id uId pName

自分なりに作ったのは 
SELECT uTable.uId, uTable.uName, pTable,pName
FROM uTable LEFT JOIN pTable ON uTable.uId = pTable.uId
って感じだったのですが、これだとユーザとその登録写真全てが取れるのはいいけど
写真100件写真を登録してたら不要な97枚までとってしまい無駄です。
どうしたら、3つに限定できますか? LIMIT 3と末尾に書いたんですが、
当然ユーザまで限定されてしまいダメでした。 宜しくお願いします。

985 :NAME IS NULL:2009/11/21(土) 17:59:29 ID:???
MySQL 5.1

indexに関する質問です。Innodbでレコードを削除し、
其の後てOptimize tableで最適化した時、indexも合わせて最適化
されるんですか?



986 :NAME IS NULL:2009/11/22(日) 04:58:46 ID:ViAte70g
>>984
これは1つのSQLだけでは実行できない。
以下のように2段階で行うしかない。

1. select uId from uTable.

2. select pName from pTable where uId = {1で取得したuid} limit 3
→これはユーザ数分実行する。

あと、テーブルの設計がまちがってると思う。
pTableの主キーがuIdならテーブルを分割する意味はない。
写真テーブルは、pId, pName, uId(主キーはpIdな)とするべき。

あと、「直近の」を判断する情報がない。
pTableにタイムスタンプのカラムを追加するか、
pIdをauto_incrementにした上で、order by pId desc limit 3みたいにしなきゃだめだ



987 :NAME IS NULL:2009/11/22(日) 09:04:33 ID:???
>>985
される。InnoDBのoptimize tableは
create table as selectしてテーブルを作り直しているので
インデックスも作り直される。

988 :NAME IS NULL:2009/11/22(日) 10:44:28 ID:???
>>987
回答有難うございます m(_ _)m

989 :984:2009/11/22(日) 12:50:06 ID:HWUWqa+A
>>986
ありがとうございます、感謝いたします。

初心者で、どういうものだったら一つのクエリで実現できるのか、判断できないんで困ってました。
クエリを2つ実行する必要があると言うことですが、現実には
1つ目のクエリで1000人分のuIdを取得した場合、2つ目のクエリは1000回発行することになります。
そんなことしてもDBは大丈夫なんでしょうか? 全然平気なのかなぁ。。
たとえば、写真の登録を上限10個にした場合、無駄なデータ取得は10-3で7つです。
クエリ1回だけど7つ程度の無駄なデータの取得負荷あり(JOINを利用)と、1000回クエリはどっちがマシなのか、
判断するにはどうしたら良いでしょう?そういう本があるんですか?

>あと、テーブルの設計がまちがってると思う。
>pTableの主キーがuIdならテーブルを分割する意味はない。
ごめんなさい、情報の書き方が正確じゃなかったです
pTableの主キーはid(auto_increment)なんですが、そうだとしても設計が間違ってるでしょうか?


990 :984:2009/11/22(日) 14:25:24 ID:HWUWqa+A
すみません、立て続けで申し訳ないですが質問です。
SELECTを実行しようとしたらエラーになり、WHERE以下の条件に指定したカラムが存在しないと言われます
#1054 - Unknown column 'table2.infoOpen' in 'where clause'  と。

WHERE table1.`infoOpen`=1
AND table2.`infoOpen`=1
AND table3.`infoOpen`=1

1行目に異常があって、その直後に続く条件がエラーになるのかなと思い2行目を削除しても
AND table3.`infoOpen`=1 は何の問題もなくクエリ成功します。
なぜでしょうか? 
table2.`infoOpen`は確実に存在してるんですが。phpMyAdmin で確認しても値も入って存在してます。。
怪しい点などご意見貰えたら嬉しいです。くだらない質問ですみませんが、宜しくお願いします。

991 :984:2009/11/22(日) 14:35:54 ID:???
補足です。mySQLサーバのバージョン: 5.0.45を利用してます

992 :NAME IS NULL:2009/11/22(日) 14:52:45 ID:???
`` がないからでは?

993 :984:2009/11/22(日) 16:01:39 ID:???
>>992
ありがとうございます。でもそれだと上下の条件も同じだし…
試しに全てのテーブル名とカラムを`で囲みましたが結果は同じでした。なぜだろう…

994 :NAME IS NULL:2009/11/22(日) 21:34:07 ID:???
イージーチョンボっぽいな
よ〜く見比べてみろ

995 :NAME IS NULL:2009/11/22(日) 23:13:21 ID:???
>クエリ1回だけど7つ程度の無駄なデータの取得負荷あり(JOINを利用)と、1000回クエリはどっちがマシなのか
前者はメモリ領域を無駄に食うだろ。JOINするなら尚更。
DBが別サーバならその分通信帯域も食う。
しかも結果を受け取った後スクリプト側で処理するんだろ。CPUリソースまで食う。

996 :NAME IS NULL:2009/11/22(日) 23:14:29 ID:???
7つ程度の無駄なデータというが、自分で例を出してる通り1000人分取得するなら
7000も無駄が発生するんだ。よく考えてみ。

997 :984:2009/11/22(日) 23:37:31 ID:???
>>994-996
どうもありがとう、ほんとにありがとう
そのメモリとかの事情がわからないんですが、ともかく、手間を惜しまないってのが基本ですね
複数のクエリを発行てことはトランザクションが必要になるのかな。やってみます、ありがとう

998 :NAME IS NULL:2009/11/23(月) 02:04:55 ID:???
この先言一体どうなるんだろうね〜MySQLは
コソーリ教えてよオラクルさんよ

999 :NAME IS NULL:2009/11/23(月) 07:05:55 ID:Q8mgWefm
ume


1000 :NAME IS NULL:2009/11/23(月) 07:22:03 ID:???
MySQL 総合 Part17
http://pc11.2ch.net/test/read.cgi/db/1258928470/l50

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

277 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)