MySQL 総合 Part6

このエントリーをはてなブックマークに追加
1NAME IS NULL
快速 RDBMS、MySQL の総合スレです。

前スレ[MySQL 総合 Part5] http://pc8.2ch.net/test/read.cgi/db/1121561160/

[関連スレと過去ログ]
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/mysql/ja/
[MySQL Internals Manual] http://dev.mysql.com/doc/internals/en/

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

・関連ツール及びユーティリティ
・関連書籍
>>2
2NAME IS NULL:2005/11/28(月) 17:30:56 ID:f9hq29Ct
3NAME IS NULL:2005/11/28(月) 17:36:20 ID:???
>>1
ぅぃす
4NAME IS NULL:2005/11/28(月) 17:47:03 ID:???
おつ
5NAME IS NULL:2005/11/28(月) 19:10:13 ID:???
乙!
6NAME IS NULL:2005/11/28(月) 21:11:42 ID:???
MySQLのSELECTクエリの複雑な使い方について取り扱っているサイトがあれば紹介してもらえませんか。
7NAME IS NULL:2005/11/28(月) 22:30:35 ID:???
>>6
そんなもんマニュアルが一番に決まっておろう。
MySQL ではなくて SQL 自体がわかんねーというのならスレ違いだよ。
8NAME IS NULL:2005/11/28(月) 22:47:36 ID:G+2VwGHf
DBを使い続けてると、検索などが遅くなるので
再編成?、再構成?とやらをする必要があるそうですが、
MySQLでは具体的にどんなことをするのでしょうか
9NAME IS NULL:2005/11/28(月) 22:49:15 ID:???
>>8
DROP DATABASE
10NAME IS NULL:2005/11/28(月) 23:03:53 ID:+VgsSW6w
MySQLの特徴として
「一度に一つのインデックスしか使えない」という仕様がありますが
サブクエリを使った場合は事実上複数のインデックスを使うことが
可能になりますか?
11NAME IS NULL:2005/11/28(月) 23:16:36 ID:CrG8+bt1
>>1乙。
12NAME IS NULL:2005/11/29(火) 02:23:00 ID:???
>>8
事例的に一番多いのはインデックスの貼り忘れらしい(MySQL ABの人がカンファレンスで言ってた)。
適切なインデックスを追加ってことになるだろう。
13NAME IS NULL:2005/11/29(火) 02:25:53 ID:???
>>10
MySQLのインデックスの特徴は、各インデックスがそれぞれ1発で行の位置を特定できるようになっている、
という理解の方が適切だと思うのだけどね。

インデックスというものの仕組みを考えてみてね〜。
14NAME IS NULL:2005/11/29(火) 13:11:42 ID:Y3dDhzDp
cronについて質問なんですが
指定した時間ごとにExcelで外部データを読み込むなどといった
細かいことも設定できますか?
15NAME IS NULL:2005/11/29(火) 13:45:47 ID:???
>>14
Excelの質問はExcelのスレで。
Windows上での指定時間毎でのプログラムの起動については、Windowsのスレで。
(タイムスケジューラかat使うんでなかったかい)
1614:2005/11/29(火) 14:23:18 ID:???
わかりました。Windowsのスレのほうで聞いてみます。
17NAME IS NULL:2005/11/29(火) 16:54:22 ID:???
>>2
なんでかなり使えるmysqlccを消したんだ?
18NAME IS NULL:2005/11/29(火) 17:26:22 ID:DYkboeX6
SQL文について質問です。
以下のテーブル例で、
AND検索でnoが同じ中で検索したいんです。
つまり、includeとhでAND検索した場合、
noの1と2が出力されるようにしたいんです。
どなたかお願いします。

no word
--------------
1 include
1 stdio
1 h
2 include
2 h
2 int
2 main
2 void
3 include
3 printf
3 return
19NAME IS NULL:2005/11/29(火) 17:42:08 ID:???
>>18

select t.no from t
left outer join t as tsub on t.no = tsub.no
where t.word = 'include' and tsub.word = 'h';
20NAME IS NULL:2005/11/29(火) 20:41:53 ID:???
>>14
なんだこいつはーw

これが日本語版ならねー

VBMyAdmin
http://www.maxxdownload.com/VBMyAdmin.html

Excel-MySQL Converter
http://www.softgalaxy.net/excel-mysql/index.html

Excel - MySQL Magic Converter
http://www.websitedatabases.com/excel-mysql.html

Excel To MySQL Converter Agent
http://www.softxpert.com/excel_to_mysql/index.html

Excel-Mysql converter
http://www.softempire.com/excel-mysql-converter.html
21NAME IS NULL:2005/11/30(水) 08:04:28 ID:???
>>17

だーかーらー。mysqlccの代わりにmysqladministrator使えってMySQL ABが言ってるからだろ。
文句言う前にmysqladministratorを一度DLしてインスコしてみろ。
22NAME IS NULL:2005/11/30(水) 17:48:53 ID:f0aZ6So3
MySQL4.1において
サブクエリは実装されているようですが,ビューの作成は可能ですか?
23NAME IS NULL:2005/11/30(水) 18:17:35 ID:3MwnewXL
order by対象数が多くなると、
いくらインデックス張ってlimitしても、速度が遅くなりますよね。
limit0,100は速いですが、
limit50000,100等になると、
インデックスの数え直しだけで時間がかかるのか、
パフォーマンスが落ちます。
こういった問題に対して、どのような解決方法があるのでしょうか?
ある程度、問題を分割するしかないと思うのですが、
具体的にどうすればいいのか…。
24NAME IS NULL:2005/11/30(水) 18:36:54 ID:???
>>22
MySQL サーババージョン 5.0 または 5.1 で実装されます。
25NAME IS NULL:2005/11/30(水) 23:26:13 ID:???
Mysql側でlimitをかけてページ構造を作る際、
[前へ] 1,2,3,4,5.. [次へ]といった各ページへのリンクを生成するために
全体の行数を知りたいのですが、カウント用の新たなSQL文を作らずに
これを得る方法はありますでしょうか
26NAME IS NULL:2005/11/30(水) 23:26:49 ID:hv27sch7
アゲ忘れ・・
271:2005/11/30(水) 23:41:02 ID:???
>>17
MySQLCCを外した理由ですが、
MySQL ABの発言で
・MySQLCCは数年前に開発は停止。MySQL ABでは継続の予定はない。
・GUI TOOLはMySQL AdministratorとMySQL Query Browserを開発する。
とあり、事実開発は随分と前に停止したままなのでリンクから外しました。

もっとも現在もアーカイブから入手可能ですし、
http://downloads.mysql.com/archives.php?p=mysqlcc
日本語化しちゃって使い込んでる人は、暫く変える必要性はないと思いますが、
少なくてもこれからの人には薦められません。

ただMySQL Administrator/Query BrowserがMySQLCCの後継かというと
あくまでも別ものなんですがね。
28NAME IS NULL:2005/11/30(水) 23:43:42 ID:???
>>25
どのみち、SQLは2回発行するしかないんだが。。。

SELECT SQL_CALC_FOUND_ROWS カラム名 FROM テーブル LIMIT xxx;
でSQLをLIMITの件数だけ取得した後
SELECT FOUND_ROWS();
でLIMITのかかっていない件数が取得できる

なにかで読んだだけで、実験はしていないけど COUNT() 使う方が早いらしいけれどね。
29NAME IS NULL:2005/12/01(木) 00:55:22 ID:???
>>28
おぉ、しかしfound_rows();なんてモンがあったとは
勉強になりますた

どっかでSQL_CALC_FOUND_ROWSとfound_rowsを
一文にまとめてる例があったんですが
試してみるとやはりSQLを分けないと無効なんですね
どうもでしたー
30NAME IS NULL:2005/12/02(金) 01:12:22 ID:???
1024文字の固定長char型を作りたいんだが、
charで作ろうとしたら255文字までだゴルァ!と怒られた。

代替手段としてBLOBとTEXTを推奨されたが、
BLOB・TEXT共に可変長で、VARCHARの延長線上

可変長使うことで速度向上が期待できるような記述もあったんだが、
実際問題、レコードが固定長と可変長で可変長の方が速い?

レコードを固定長にすることで、シーク位置・レコードサイズが乗算で求められるので高速化に繋がると思ってたんだが・・・

ベンチマークでもやってみろってことなんかな
31NAME IS NULL:2005/12/02(金) 01:52:17 ID:???
固定長の方が速いよ。理由はその通り。
32NAME IS NULL:2005/12/02(金) 05:27:17 ID:???
>可変長使うことで速度向上が期待できるような記述もあったんだが、
可変長で無駄なデータ領域が圧縮されることで、
I/Oブロックあたりに格納できるレコード数が増えるので速度が向上する。
>レコードを固定長にすることで、シーク位置・レコードサイズが乗算で求められるので高速化に繋がると思ってたんだが・・・
これもその通り。
問題は固定長のフィールドだけから構成されるレコードをMySQLが
特別にこういう最適化をしてくれるかどうかだな。
なんでもFirebirdは固定長派らしくてVARCHARは最大長分の領域を必ずキープしてるらしい。
33NAME IS NULL:2005/12/02(金) 06:48:13 ID:???
>>30
幸いオープンソースだから、1024文字の固定長char型が使えるようにソースを弄れば?
他に便利だと思う人が多ければ、公式サポートに成る可能性が出てくるし。

>>32
普通は可変長だとseekしまくる分遅いと思うけど。固定長なら計算すれば位置分かるし。
34NAME IS NULL:2005/12/02(金) 08:01:06 ID:???
> なんでもFirebirdは固定長派らしくてVARCHARは最大長分の領域を必ずキープしてるらしい。
DBとはちょっと違う気がするな。
malloc/freeのメモリ管理に要する命令数を稼ぐ効果があるが。
35NAME IS NULL:2005/12/02(金) 12:33:01 ID:???
商用ライセンスで使用する場合、以下の場合ではいくつのライセンスが必要なのでしょうか?
(A)二台のMySQLサーバをインターネットなどで不特定多数が使う場合は1ライセンスなのでしょうか?それとも2ライセンスなのでしょうか?
(B) MySQLを内部で使用するソフトウエア軍(10個のバイナリからなる)を作成し、同じソフトウエアを3人に販売する場合は3ライセンスですか?
36NAME IS NULL:2005/12/02(金) 13:43:44 ID:???
>>35
商用ライセンスのことはメーカか代理店に訊けよ。
あっちもビジネスのことだからちゃんとケースバイケースで
適切なパターンを回答してくるよ。

多分

(A)2ライセンス。ただそこに接続するためのクライアントソフトをMySQLのライブラリを
使用した上で非GPLで配布する場合はどうなるかは、ちゃんと訊くべき。
(これはソフトの作りと配布方法などで、色んなケースがある。完全専用の時は
クライアント個別には要らないと回答されたことがあるが、自分のケースでも同様かは自分で確認すること)

(B)そのソフトウェア群の個別のソフトそれぞれが同時に違うPCにインストールして使用
できる(ライセンス的な話でね)なら、PC台数分ライセンスが必要。要するに3人×PC台数ね。
そうでなければ3人分(PC3台分)
37NAME IS NULL:2005/12/02(金) 13:55:10 ID:i693pvse
MySQLを一回消したいんだけど、どうすれば???
38NAME IS NULL:2005/12/02(金) 14:15:11 ID:???
>>33
>普通は可変長だとseekしまくる分遅いと思うけど。固定長なら計算すれば位置分かるし。
ブロック単位のI/Oとキャッシュ効果でseekしまくるってことは無いと思うぞ。
仕掛けは複雑になりメモリもそれなりに必要になるから、
プログラムで直接読み書きするなら固定長が扱いやすいのは同意だが。
それでMySQLで固定長レコードにしたら速くなるの?
39NAME IS NULL:2005/12/02(金) 14:20:24 ID:???
>>38
実は変わらない
40NAME IS NULL:2005/12/02(金) 14:23:27 ID:???
インデックス化してるだろうから、微妙な差で そんな変わらないんじゃない?
41NAME IS NULL:2005/12/02(金) 15:11:20 ID:???
>>37
何らかのインストーラかパッケージ管理ツールで入れたなら、
そのアンインストール手順に従えば消せる。dataディレクトリは
アンインストールプロセスによっては残す場合もあるので、それは手動で消す。
4237:2005/12/02(金) 15:34:09 ID:i693pvse
>>41
ありがと。やってみる。
43NAME IS NULL:2005/12/02(金) 16:44:50 ID:tY+XsHxk
>>36
ありがとう!
44NAME IS NULL:2005/12/02(金) 17:11:48 ID:c/4Wdly0
A表のカラムが外部キーとして,B表のカラムを参照している場合
B表のレコードを全て削除しようとすると警告が出ますが
これを無視して強制的にA表のレコードを削除・変更することは
可能ですか?
45NAME IS NULL:2005/12/02(金) 18:27:21 ID:???
>>38
キャッシュの中をシークしてるのは同じだろう。
1GBとかの巨大なDBファイルの中をシークしたら固定長と可変長で違いが出る悪寒。
46NAME IS NULL:2005/12/02(金) 19:16:27 ID:???
検証したわけじゃないけど
固定長のみでテーブル構成したら速くなると
「実践ハイパフォーマンスMySQL」や
「 MySQL全機能リファレンス」に書いてあるよ。
一つでも可変長カラムが入ると、別種になるとのこと。
47NAME IS NULL:2005/12/02(金) 19:38:43 ID:???
>>45
もしかして可変長のレコードが先頭からびっしり詰まって格納されてると思ってるの?
MySQLも同じような仕掛けだと思うけど、一般的なDBでは読み書きする単位のブロックがあって、
ブロック長は固定でブロックの中に可変長レコードがいくつか入っている。
当然尺が合わないで使われないで残ってる領域がある。
レコードはブロック番号とブロック内の順位で管理される。特定のレコードを読み込む場合は、
まずブロックを固定ディスクから読み出す。ここは「固定長なら計算すれば位置分かるし」だよね。
あとは半導体メモリ上でブロックの中から必要なレコードを抜き出す。
何GBあってもシークの効率は変わらない。

>>46
管理を別にしてるんですか、賢いDBだな。ちょっと見直した。このことが知りたかったんです。
48NAME IS NULL:2005/12/02(金) 21:37:52 ID:???
0からMySQL(SQL構文を含め)を習得するには、まずどの本を読むべきですか?
49NAME IS NULL:2005/12/02(金) 22:20:03 ID:???
リファレンスマニュアルのサイトとハイパフォーマンス本だけでいいよ。
50NAME IS NULL:2005/12/02(金) 23:26:18 ID:???
んー、正規化くらい知らないとよろしくないんでは?
どの本に書いてあるかは知らないけど。
(データベース論の本には載ってるが、そんなの読みたくなかろうし)
51NAME IS NULL:2005/12/02(金) 23:44:08 ID:???
固定長の話はMyISAM限定だけどドキュメントに書いてあるぞ
おれはMySQLの常識だと思ってた

・Very quick.
・Easy to cache.
・Easy to reconstruct after a crash, because records are located in fixed positions.

ttp://dev.mysql.com/doc/refman/5.0/en/static-format.html
52NAME IS NULL:2005/12/03(土) 02:56:22 ID:???
53NAME IS NULL:2005/12/03(土) 16:18:35 ID:0zoPP5bK
初心者です。

Administratorの日本語化パッチみたいなものってありますか?
あと「かねやんMySQLAdmin」 ttp://www.mmdb.net/m_kaneko/ がXPで使えないんですが、未対応って事ですか?
皆さんはどんなGUI使ってますか?
54NAME IS NULL:2005/12/03(土) 16:25:54 ID:???
GUIしか使えないのにMySQLって無謀じゃね?
他のGUI前提DB使った方がいいよ。
55NAME IS NULL:2005/12/03(土) 19:59:59 ID:???
mysqlコマンドで接続しようとしたとき
mysql -u hoge -ppiyo tablename は接続できるのに
mysql -u hoge -ppiyo -h ipaddress tablename がエラーになるのは
何が原因のときですかね
ERROR 2003: Can't connect to MySQL server on 'ipaddress'
と出ます。
ipaddressは自分自身のIPアドレスです
5655:2005/12/03(土) 20:04:16 ID:???
あ、原因が少しわかった
netstatで見たら待ちうけポートが
127.0.0.1:3306 になってる・・・

0.0.0.0:3306で待ってもらわないと困るのになぁ
何が原因でこんなヘソの曲げ方を・・・
57NAME IS NULL:2005/12/03(土) 21:06:12 ID:???
>>53
かねやん、XPで使えないのはそのせいだったか。
俺はコマンドプロンプトで打ち込みながら勉強します(^^;。
58NAME IS NULL:2005/12/03(土) 21:11:10 ID:???
そんなアドレスありえないだろー
59NAME IS NULL:2005/12/03(土) 22:11:39 ID:???
listenで0.0.0.0=anyの意味になる。
60NAME IS NULL:2005/12/03(土) 22:13:43 ID:???
>>53
Common SQL Environment

っても、テーブル作るのでもSQL書くけどな。
61NAME IS NULL:2005/12/03(土) 23:42:16 ID:???
>>60
ありがとうございます。
インストしてみたけど接続できない・・・。

MySQLのバージョンが5.0だからかなー?
62NAME IS NULL:2005/12/04(日) 00:09:19 ID:???
>>61
4.1.15でもプログラムエラーで駄目(^^;
6360:2005/12/04(日) 01:22:13 ID:???
ヒント:パスワード形式
64NAME IS NULL:2005/12/04(日) 01:26:10 ID:m97nwyo2
>>57
かねやんはXPで使えますよ。
自分つかってますよ。

ハッシュの設定がうまいこと動かなくて
DOSでパスの更新とかしながら
ユーザー登録したりしてますけど・・・

しかしかねやんは、なかなかのこまったさんです。
65NAME IS NULL:2005/12/04(日) 01:30:46 ID:???
>>63
ヒントがわかりません。
バージョン3までしか対応してないでファイナルアンサー?
66NAME IS NULL:2005/12/04(日) 02:27:03 ID:???
>>56
0.0.0.0は駄目だよ。ネットの勉強した方がいい。
6760:2005/12/04(日) 08:42:33 ID:???
>>65
4.1からパスワード形式が変更されてます。

MySQLのパスワードを旧式で設定すれば繋がります。
http://dev.mysql.com/doc/refman/4.1/ja/password-hashing.html
から OLD_PASSWORD を検索して読んでみるべし。
68NAME IS NULL:2005/12/04(日) 09:30:45 ID:???
>>56
my.cnf の bind-address を見れ
69NAME IS NULL:2005/12/04(日) 23:46:09 ID:???
挿入時に、一時的にインデックスの更新を止めたいとき、
/*!40000 ALTER TABLE tbl_name DISABLE KEYS */
を流すといいと書かれているのですが、この前の40000とは、4万レコードという意味でしょうか?
何か別のコードでしょうか?

4万件以上、対象レコードがある場合は数字を増やした方がいいのでしょうか?
70NAME IS NULL:2005/12/05(月) 00:42:46 ID:???
>>69
>/*!40000 ALTER TABLE tbl_name DISABLE KEYS */
を「流すといい」、なんてどこに書いてあったか教えてくれるか?
漏れの知る限り、mysqldumpに-Kオプションを付けると、バックアップファイルに上記の構文が挿入される、って動作しか知らないけど
71NAME IS NULL:2005/12/05(月) 01:27:39 ID:???
ダンプファイルに記述されるってことは、
流しても有効じゃないんですか?

ダンプファイルのこの記述は、効果なしってことでしょうか?
72NAME IS NULL:2005/12/05(月) 03:48:49 ID:Md2InYGC
>>67
> >>65
> 4.1からパスワード形式が変更されてます。
>
> MySQLのパスワードを旧式で設定すれば繋がります。
> http://dev.mysql.com/doc/refman/4.1/ja/password-hashing.html
> から OLD_PASSWORD を検索して読んでみるべし。

でけた!

初心者なので最初なんのことやらさっぱりわかりませんでしたが、色々やってたらでけました。
ありがとうございます。
73NAME IS NULL:2005/12/05(月) 09:14:05 ID:???
>>69
その40000は、バージョン4.0.0以上ではコメント部が有効になり解釈されるという意味
7455:2005/12/05(月) 09:31:19 ID:???
>>66
anyですよ

>>68
サンクスコ
ちょっと確認します
75NAME IS NULL:2005/12/05(月) 10:48:59 ID:???
>>71
そう思ったのならやってみたら?
76NAME IS NULL:2005/12/05(月) 13:42:58 ID:n3fM2t7h
>>44もお願いします
7771:2005/12/05(月) 16:56:48 ID:???
やったけど、速度的な効果が見えなかったので質問してみました。
後出しの情報で、すまんです。
78NAME IS NULL:2005/12/05(月) 19:09:49 ID:???
>>77
いや、やったなら問題ないよ
やってなきゃぶっとばすとこだ
79NAME IS NULL:2005/12/05(月) 20:27:34 ID:inuQmW0c
book_id book_title //本テーブル
1 ももたろう
2 きんたろう
3 白雪姫

author_id author_name //著者テーブル
1 たかし
2 はなこ
3 ひろゆき

book_id author_id //本と著者を繋ぐ奴
1 1
1 2
2 1
3 3

book_title author_name
ももたろう たかし&はなこ
きんたろう たかし
白雪姫 ひろゆき

こういうところから
著者がたかし&はなこ
のレコードだけ取り出すにはどうしたらいいのですか?
8079:2005/12/05(月) 20:34:17 ID:???
MySQL 4.1.7です
81NAME IS NULL:2005/12/06(火) 11:39:50 ID:???
>>80
日本語勉強しろ
82NAME IS NULL:2005/12/06(火) 12:03:05 ID:???
>>79
MySQLだと他の方法もありそうだが、一般的なSQLではこんな感じ。
select ba1.book_id from 本と著者を繋ぐ奴 ba1 inner join 本と著者を繋ぐ奴 ba2 on ba1.book_id = ba2.book_id
where ba1.author_id = '1' and ba2.author_id = '2'
83NAME IS NULL:2005/12/06(火) 23:41:17 ID:F6RPcbOs
553223個のテーブルを

CREATE TABLE `478950571` (
`index` int(5) unsigned NOT NULL auto_increment,
`d` date NOT NULL default '0000-00-00',
`lup` int(7) unsigned NOT NULL default '0',
`m` int(3) unsigned NOT NULL default '0',
`r` int(9) unsigned NOT NULL default '0',
PRIMARY KEY (`index`)
) ENGINE=InnoDB DEFAULT CHARSET=sjis AUTO_INCREMENT=1 ;

のような構造で作りたいのですが
後にテーブル名となる、553223個のデータ(MySQLにレコードとして
記録されています)から上のテーブルを作る
SQL文をどうやって作成したらいいでしょうか?
よろしくお願いします。
84NAME IS NULL:2005/12/07(水) 00:23:28 ID:???
>>83
文字列結合すればいいだけかと。
85NAME IS NULL:2005/12/07(水) 00:41:59 ID:OFeSrOA1
>>84
してみたのですけど
データが大きすぎて固まってしまいました。
86NAME IS NULL:2005/12/07(水) 00:43:51 ID:OFeSrOA1
置換とかする専用のソフト「repl_ace」
でもやってみたんですが、
それでもだめでした。
87NAME IS NULL:2005/12/07(水) 00:57:47 ID:???
553223個のテーブルを作るってどんなものを作ってるんだw
88NAME IS NULL:2005/12/07(水) 01:18:30 ID:xSIao4zF
>>83
このテーブル、作るだけでも半日かかるぞ
設計の見直しをしたほうが良くない?
89NAME IS NULL:2005/12/07(水) 02:00:58 ID:???
耐久か限界テストでもしたいのか?動悸を知りたいな。
90NAME IS NULL:2005/12/07(水) 02:10:41 ID:OFeSrOA1
目的はアマゾンの中古品の価格調査です。
プログラムの勉強がてらJavaとか
いじっています。
アマゾンのサイトからISBNを全て(100万ほど)
集めるとこまではいったのですが・・
フィールド数を増やしていくという手も
考えてはいるんですが・・
やっぱりなんとかしてテーブルを増やして
いきたいです。




91NAME IS NULL:2005/12/07(水) 02:17:50 ID:???
>>90
他の人も疑問に思うと思うのだが
(それが噛み合わない部分)
>やっぱりなんとかしてテーブルを増やして
>いきたいです。
なんで?
92NAME IS NULL:2005/12/07(水) 02:23:52 ID:???
ISBNテーブル作って
その中に追加するのでいいじゃん
93NAME IS NULL:2005/12/07(水) 02:38:11 ID:xSIao4zF
ISBNコードのフィールドを追加すれば、一つのテーブルでOKだと思うけど
9479:2005/12/07(水) 02:38:55 ID:???
>>82
そのやり方だと著者が三人、四人と増えた場合は
「inner join 本と著者を繋ぐ奴 ba3 on ba1.book_id = ba3.book_id」
を増やすんですか?
95NAME IS NULL:2005/12/07(水) 02:40:05 ID:xSIao4zF
データベース設計の初歩として、名前は違うけど同じ構造のテーブルが複数ある
というのはおかしいよ。
意図的なものなら別として。
96NAME IS NULL:2005/12/07(水) 02:42:29 ID:o1g4ijyk
一意のパスワードを自動生成して登録する処理なんですが、
プログラムでランダムな文字列を生成して
select文で既存じゃないかチェックして
既存の時は再度文字列を生成する。
って処理をやってるんですが、これだと同時登録で重複データが出てしまうんです。
UNIQUEキー制約でチェックするのは他のエラーと切り分けるのが嫌なんですが、
そうするとテーブルロックしかないですか?
97NAME IS NULL:2005/12/07(水) 02:50:34 ID:xSIao4zF
テーブルロックにしてもINSERT時のエラーチェックは入れるでしょ。入れない?
それなら、UNIQUEキー制約でチェックするでいいと思うんだが。
98NAME IS NULL:2005/12/07(水) 03:04:28 ID:o1g4ijyk
INSERT時のチェックはもちろんしてます。
ただ、この処理は登録されてない値が出るまでループするしかないと思うんです。
で、データベース側のエラーに対してループをまわすのはどおかと思いまして。。
9990:2005/12/07(水) 03:07:15 ID:OFeSrOA1
>>95
全てのISBNの
日にち、価格、個数、ランキングを
何日かおきに取っていきたいのですが
それでも、日にちごとにフィールドを増やして
いったほうがいいでしょうか?

100NAME IS NULL:2005/12/07(水) 03:20:26 ID:xSIao4zF
>>98
それでも、UNIQUEキー制約を薦めます。
というのは、テーブルロックを使用した場合、アプリケーション側でミスをする
可能性があるからです。つまり、将来的に、パスワードを登録する別のプログラム
が走った場合、そのプログラムがテーブルロックをし忘れる可能性もあるわけです。
UNIQUEキー制約とは、どんな登録アプリケーションでも重複したデータは登録
出来なくするということですから、将来の拡張も考えると、そのほうが、つまり
UNIQUEキー制約を掛けておいたほうが良いと思われます。
101NAME IS NULL:2005/12/07(水) 03:35:05 ID:???
>>99
どんなコンピュータで使うのか知らんが、データベースの設計云々に関わらず遅かれ早かれ使い物にならないと思うよ?
102NAME IS NULL:2005/12/07(水) 03:43:10 ID:xSIao4zF
>>99
やりたいことが良く判らないので。

中古品の書籍に関して、日ごとの販売個数と販売ランキングを格納するテーブル
を作りたいということでしょうか?

テーブル:Book
フィールド1:bookcd <- プライマリーキー/auto_increment
フィールド2:ISBNコード <- UNIQUE制約
フィールド3:書籍に関する情報(著者とか)
フィールド4:書籍に関する情報(著者とか)
・・・・・・・・・・・・・

テーブル:Sales
フィールド1:bookcd <- テーブルBookとリンク/book+日付でプライマリーキー
フィールド2:日付
フィールド3:販売数

コレではダメですか?販売ランキングはSQLで出ると思います。

103NAME IS NULL:2005/12/07(水) 03:50:39 ID:???
基礎も何もわからない状態で数十万件以上のデータを管理しようという時点で既に間違ってる。
数万オーダーから初めて、どういう方法だとどのくらいの件数で大変なことになるか経験した方がいい。

数万オーダーでも相当な量だぞ? 人間が毎日数万件のデータなんて見れないからな。
10490:2005/12/07(水) 03:52:33 ID:OFeSrOA1
>>102
そういうやり方は考えていませんでした。
それでやってみようと思います。
どうもありがとうございました。
10590:2005/12/07(水) 03:54:22 ID:OFeSrOA1
>>103
一度経験してみますw
106102:2005/12/07(水) 04:02:46 ID:xSIao4zF
>>104,>>105
初心者ならしょうがないです。
私も、かつて5000くらいのテーブルを作り散らかしたことがありますから。
しかも、教育でなくて実際の業務。しかも今も稼動している!

お化けみたいなDBを作ってしまっても、それを評価できて、次の設計にフィードバック
出来るようにしましょう。

私に限らず、DB設計をかなりやっている人は、かつていイタい思いをしているはずです。
マニュアルを見ただけでは判りませんからね。DBの評価は。
イタい思いをするのも経験といえば経験。
107NAME IS NULL:2005/12/07(水) 04:21:20 ID:???
プログラム全般に言えるがもし自分が生まれ変わっても
DBの習得過程だけは2度と繰り返したくないなと思う
1人でもマスターしてる人間がそばに居れば別なんだが
108NAME IS NULL:2005/12/07(水) 06:59:52 ID:frlooE31
つか、

>フィールド3:書籍に関する情報(著者とか)
>フィールド4:書籍に関する情報(著者とか)
>・・・・・・・・・・・・・

ってのは、いかがなものか...
109NAME IS NULL:2005/12/07(水) 07:51:44 ID:???
>>553223個のテーブル

55万個? 他の人も言ってるが、パフォーマンス的にもバックアップとかの運用的にも自殺行為だなこりゃ。

110NAME IS NULL:2005/12/07(水) 13:06:49 ID:???
ひさびさに面白い発想だな。
111NAME IS NULL:2005/12/07(水) 14:48:10 ID:???
>>94
そうなります。
他に積集合を使う方法もあります。MySQLで使えるかどうかは知らないけど。
select book_id from 本と著者を繋ぐ奴 where author_id = '1'
intersect
select book_id from 本と著者を繋ぐ奴 where author_id = '2'
112NAME IS NULL:2005/12/07(水) 14:52:57 ID:7ZyY2ZjN
その発想はなかったわ
113NAME IS NULL:2005/12/07(水) 14:58:39 ID:???
>>90
なんか大規模手がけてる気になってるみたいだけど
基本設計ができてないだけじゃん。 そんな難しい話じゃないよ。
あなたが住民基本台帳の設計したらテーブルいくつ必要になるわけ?w
114NAME IS NULL:2005/12/07(水) 15:00:43 ID:???
ISBNコードは足りなくなるとコードの再利用をするから書籍を特定する完全なキーには使えない。
ISBN4-1234-5678-9のうち先頭の数字は国別番号で9はチェックデジット、1234-5678の8桁このうち
先頭数桁が出版社コードで出版社の規模によって桁数が異なる。
新興の出版社で急に出版数が増えた場合などはかなり短いサイクルで同じコードが再利用される。
以上トリビアでした。
115NAME IS NULL:2005/12/07(水) 15:17:59 ID:???
逆に、同じ本なのに版を重ねるとかそういうレベルで ISBN を付けなおす出版社もあると聞いたことがあるぞ。

で、完全には使えないのは確かにそうなのだが amazon の ASIN は書籍につい
ていえば ISBN なのだし、元質問者の意図には問題なしということでひとつ。
116NAME IS NULL:2005/12/07(水) 16:36:34 ID:???
なんか問い合わせるたびに55万のテーブルをunion allする姿が目に浮かぶ。
117NAME IS NULL:2005/12/07(水) 16:53:06 ID:???
まずは脳内ER図を晒せ。
話はそれからだ
11879:2005/12/07(水) 17:56:11 ID:???
>>111
違う方法ですが解決しました。ありがとうございました。
119NAME IS NULL:2005/12/07(水) 19:35:18 ID:???
先日から Windows版 MySQL 4.0.26 を使用しています。

売上管理を行うため下記のようなテーブルを3つ作成しています。

テーブル名:sale
  sale_id    customer_id  ei_send_id   no_send_id
----------------------------------------------
|  10001  |  C10001  |  E10001  |  E10005  |
|  10002  |  C10002  |  E10001  |  E10005  |
|  10003  |  C10003  |  E10002  |  E10003  |
|  10004  |  C10002  |  E10002  |  E10007  |
----------------------------------------------

テーブル名:customer
  customer_id  name   
-----------------------
|  C10001  |  山田  |
|  C10002  |  田中  |
|  C10003  |  浜田  |
-----------------------

テーブル名:customer_etc
  send_id    code   etc_name
-----------------------------------
|  E10001  |  EI   |  第1営業所  |
|  E10002  |  EI   |  第2営業所  |
|  E10003  |  NO  |  第1納品先  |
|  E10004  |  EI   |  第3営業所  |
|  E10005  |  NO  |  第2納品先  |
|  E10006  |  EI   |  第4営業所  |
|  E10007  |  NO  |  第3納品先  |
-----------------------------------

この3つのテーブルから下記のような表を表示したいのですが

  sale_id    name   etc_name    etc_name
--------------------------------------------------
|  10001  |  山田  |  第1営業所  |  第2納品先  |
|  10002  |  田中  |  第1営業所  |  第2納品先  |
|  10003  |  浜田  |  第2営業所  |  第1納品先  |
|  10004  |  田中  |  第2営業所  |  第3納品先  |
--------------------------------------------------

下記のように入力して
select s.sale_id,c.name,customer_etc.etc_name,no_send_id from sale as s inner join customer as c using (customer_id) inner join customer_etc on customer_etc.send_id = s.ei_send_id;

  sale_id    name   etc_name    no_send_id
--------------------------------------------------
|  10001  |  山田  |  第1営業所  |  E10005  |
|  10002  |  田中  |  第1営業所  |  E10005  |
|  10003  |  浜田  |  第2営業所  |  E10003  |
|  10004  |  田中  |  第2営業所  |  E10007  |
--------------------------------------------------

まで表示する事が出来たのですが納品先の名前が表示する方法がわかりません。初歩的な質問だと思うのですが 教えて下さい。 お願いします。
120NAME IS NULL:2005/12/07(水) 19:59:08 ID:???
>>119
そこまで出来ていて、悩む理由が良く判らないが、オマイさんの提示したSQLに2ヶ所追加。
customer_etc は営業所マスタと納品先マスタの2つに分けた方が良いように思うけど
何か意味があるのかな。。。ま、どうでもいい話だが。

select
s.sale_id,c.name,customer_etc.etc_name,no_send_id
, n.etc_name                              //追加
from sale as s
inner join customer as c using (customer_id)
inner join customer_etc on customer_etc.send_id = s.ei_send_id
inner join customer_etc as n on n.send_id = s.no_send_id;  //追加
121NAME IS NULL:2005/12/07(水) 20:22:15 ID:???
学校の宿題の臭いがする
122119:2005/12/07(水) 20:27:07 ID:???
>>120
inner join って繰り返せるのか… 知りませんでした。
仰るとおり納品先と営業所を別ければ良かったのですが今更、仕様を変更できなくて(;´д⊂)
早速のレスありがとうございました。
本当に助かりました!


>>121
違いますよ。
学校の宿題じゃないです。
でも学校の宿題に出るレベルだってことですよね。
こんなの聞いて恥ずかしいッス(;´Д`)
123NAME IS NULL:2005/12/07(水) 21:25:15 ID:???
MySQLに特化しない話ばっかだな
124NAME IS NULL:2005/12/07(水) 21:56:35 ID:OtnhzFLc
一般的にひとつのシステムがあった場合、
ひとつのDBに全てのテーブルを入れるやり方と、
DBを複数作って、テーブルを分散させるやり方、
どちらが一般的なのでしょうか?
125NAME IS NULL:2005/12/07(水) 22:00:10 ID:Hb5pr023
>>124
>DBを複数作って、テーブルを分散させるやり方、
これはちょっと一般的ではないような。
DBを複数作るって、サーバーにとっては負荷のかかることだと思うけど。
とくにメモリーね。
あと、DB間のデータの整合性を取るのはなかなか厄介。
126NAME IS NULL:2005/12/07(水) 22:08:36 ID:???
データベース論の教科書くらい読もうよ。。。
127NAME IS NULL:2005/12/07(水) 22:11:27 ID:Hb5pr023
>>124
分散データベースを作るとか、そういう特殊な事情があるんですか?
128NAME IS NULL:2005/12/07(水) 22:13:09 ID:???
mysql4.1.15を"--skip-character-set-client-handshake"のオプション付きで稼動または停止させるバッチファイルを作りたいのですが、どのように書けばいいのでしょうか
NET STARTだとオプション付けられないんで・・・
129NAME IS NULL:2005/12/07(水) 22:24:19 ID:???
>>124
「一般的」ってことなら、そりゃ1つのDBに入れるんでしょう。
分散するなんてよっぽど本格的なケースでっせ。

ってか、DBとテーブルって用語を間違って使ってたりしないよね…
130NAME IS NULL:2005/12/08(木) 00:05:18 ID:???
夜な夜なMySQLを独学し始めたのですがユーザ管理についてどうしても分からないのです。
このような場合、ユーザ:rootが2つあり、片方のみにパスワードが入っている状態はまずいのでしょうか?
パスワードの無い方を消してしまっても問題はないのでしょうか?
どうかよろしくお願いします。

mysql> select User,password from mysql.user;
+------+----------+
| User | password |
+------+----------+
| root | 暗号化されたパスワード|
| root | |←こちらにはなにもなし
| | |
| | |
+------+----------+
131NAME IS NULL:2005/12/08(木) 00:07:31 ID:7TVWSR0Z
>>114
純粋に質問だけど、雑誌コードじゃなくて書籍のISBNで、
同じ番号が異なる複数の本に割り当てられることがあるわけ?
132NAME IS NULL:2005/12/08(木) 00:16:32 ID:???
コマンドラインから./mysqld_safeとしてを起動した際、自然にはシェルに戻ってこないものでいいのでしょうか?
何かを壊したかな・・・
133NAME IS NULL:2005/12/08(木) 00:17:37 ID:???
ISBNの規定では、再利用は明確に禁じられているけれど、
出版社が勝手に絶版になった本の番号を別の本に割り当てる
ことがある。

もっと信頼性の高い番号として、各国の国立図書館が、国内で
発刊された書籍に割り当てるNBNというものがある。
134133:2005/12/08(木) 00:20:04 ID:???
で、ISBNの重複は、あくまでも『一部の出版社の誤り』ということになっているので、
実用上は問題ないはず。
135NAME IS NULL:2005/12/08(木) 00:38:59 ID:???
>>132
mysqld_safe &
にしとけ。つかマニュアル嫁
136NAME IS NULL:2005/12/08(木) 01:28:37 ID:q4xs/OQo
>>131
十年位前にOpenGL関係の新刊を
ISBNを指定して○善に注文したら
同じISBNの「スクリーンセーバーを作ろう」みたいな
本が来ちゃったことある。
注文し直したら、やっぱ同じ本が来た。
思いあまって、いっそのこと
3Dのスクリーンセーバー作ろうかと思った。
137NAME IS NULL:2005/12/08(木) 05:43:40 ID:???
>>136
ぎゃぁ、そりゃ、あんまりな・・・ お気の毒様。
138NAME IS NULL:2005/12/08(木) 11:16:31 ID:r3NpMV/e
ぶっちゃけ、mysqlを商用利用してるケースでちゃんとライセンス料を払ってるの
率ってどの程度なんだろうか。っていうか、お前ら払ってる?
139NAME IS NULL:2005/12/08(木) 13:35:16 ID:???
>>138
払ってると思うよ。
初めからMySQLを商用ライセンスやGPLに反して使うつもりなら、MySQLじゃなくてPostgreSQLとかOracleをつかうんじゃないかな?
140NAME IS NULL:2005/12/08(木) 14:05:01 ID:???
どうかなあ?
そもそもMySQLを使うLAMPのようなLinuxとかを導入するのって予算的都合だから、払わないで知らんフリしてるんじゃないの?
予算が有れば最初からオラクル導入してサポートも契約するだろうし。
141NAME IS NULL:2005/12/08(木) 14:14:22 ID:???
ISBNの桁数って何年後に増える予定だったっけ?
だいぶ前にニュースになってたけど。
142139:2005/12/08(木) 14:27:01 ID:???
よくわかんない文章だったかなあ。
MySQLをライセンス違反で使うようなタイプの人は、OracleのDev版とかをライセンス違反で使うことの方を選ぶんじゃないかな?
143NAME IS NULL:2005/12/08(木) 16:09:28 ID:???
>>138
ノシ 払ってるよ。

ライセンスの値段削って受注するぐらいだったら、
最初からそんな仕事受けないよ。悪徳建物デベロッパーでもあるまいし。
ただ商用でもGPLでOKなところでは、予算に余裕がありそうだったら
商用ライセンス買ってるけど、GPLのままがやっぱり多いね。
144NAME IS NULL:2005/12/08(木) 17:52:40 ID:???
>>141
頭に三桁つくらしい
145NAME IS NULL:2005/12/08(木) 17:54:34 ID:???
MYSQLの商用ってどこからが商用になんの?
MYSQL使うようなPHPスクリプトを売ったら駄目なの?
MYSQL使ってるショッピングカートで物売ったら駄目なの?
146NAME IS NULL:2005/12/08(木) 18:18:03 ID:???
147NAME IS NULL:2005/12/08(木) 18:29:32 ID:???
>>145
各々のソフト(MySQL/PHP/ショッピングカート)のライセンスを
一度でもいいから、ちゃんと読んでみ。
148139:2005/12/08(木) 18:40:29 ID:???
俺は専門家じゃないのでわからないけど、こんな感じなんじゃないのかな?

>MYSQL使うようなPHPスクリプトを売ったら駄目なの?
GPLに反しないなら商用ライセンス不要。ソースコードを公開しないなどGPSに従えないなら商用ライセンス必要。

>MYSQL使ってるショッピングカートで物売ったら駄目なの?
GPLにしたがってソースコードを公開しているなら商用ライセンス不要。それ以外なら必要。
149139:2005/12/08(木) 18:41:05 ID:???
うっかりGPLをGPSって打ってた・・・orz
150NAME IS NULL:2005/12/08(木) 18:51:20 ID:juXz5HGt
int型のフィールドに放り込んである値をphpで取り出して
gettype()(変数の型を表記するPHPの関数)に放り込んだら
stringって出たんですけど、こう言うことって無いですよね?
151139:2005/12/08(木) 18:59:11 ID:???
>>150
それはPHPの問題だからPHP系の質問スレの方がいいと思うよ。
あと、PHPの変数はちょっと特殊だから本でも立ち読みしてくるといいYO!
152NAME IS NULL:2005/12/08(木) 19:09:58 ID:???
>>148
MySQLをPHPでできたアプリケーションから利用する場合は、
MySQLのFOSSの例外規定に合致するので、そのアプリケーション
に対してはPHPのライセンスが適用されるだけ。
153NAME IS NULL:2005/12/08(木) 20:03:38 ID:???
たとえばGoogleがGoogleのシステムを自社開発しインターネット上で運営する場合は、ソースを公開しなくても商用ライセンスは必要ないのでしょうか?
154NAME IS NULL:2005/12/08(木) 20:30:29 ID:???
意味わからん
155NAME IS NULL:2005/12/09(金) 01:56:16 ID:???
>>153
「ある会社が、Mysqlを使って Google のようなシステムを作り、インターネット上で
そのサービスを公開して不特定多数の人に使わせるとき、その会社、または、
その会社のサービスを使う他の会社は、自分の作った、MySQLを呼び出す
ソフトウェアのソースコードを公開する義務はあるのか?」

と、いう質問か?

MySQLそのものに手を加えていないなら、なぜゆえ公開する義務が課せられると
思う? GPLでも、そんなことは言ってない。
156NAME IS NULL:2005/12/09(金) 02:08:36 ID:???
俺はMySQLとPHPとやりあってた頃に出来上がった3つめのライセンスってのがよくわからん。
結局は安全を取ってPostgreSQL使ってるけど本当はどうなんだろう?
PHPのソースコードは公開しなくてもただで使えるのか?
157NAME IS NULL:2005/12/09(金) 03:31:55 ID:???
まあ飯食う香具師はうまくGPLを回避するように改変して公開するけどね。

>>142
なんとなくLinux無料だから、その上で動かすMySQLも含めた全てが無料みたいな。
当然oracle for Linuxも無料とも思ってるかも知れない。
158150:2005/12/09(金) 07:14:18 ID:???
>>151
あ。PHPの方の問題でしたか。どうもすつれいしました〜。
159NAME IS NULL:2005/12/09(金) 10:02:25 ID:???
inner join のサンプルがあまり無いのは何故ですか?
何か問題があったりするのでしょうか・・・
160NAME IS NULL:2005/12/09(金) 10:02:52 ID:???
>>155
それは、>>148の後半で言っていることとは、違う意見ということだよね。

MySQLのクライアントのライセンスが、どうとかこうとかなかったっけ。
161NAME IS NULL:2005/12/09(金) 15:22:54 ID:FFgTjPBD
>>57
是非、アップルのiWorksを使ってほしいね。
すごい使いやすいっす。

指定がなければ(例えば個人の書類)
MSオフィスよりこれで作った方が遥かに楽で出来が良い(w

Mac購入してから、
もっぱらMacintoshで書類作るようになっちゃった。。
162NAME IS NULL:2005/12/09(金) 15:24:27 ID:???
MySQLを使っているだけで、組み込んでセットで売らなければGPLは関係ない。

セットで売ったとしても、ショッピングカートの場合、
ショッピングカートのソフトウェアの所有者に対してGPLライセンスの縛りが
適用されるので、そのソフトウェアの所有者にたいしてのみ公開すれば良い。

ただ、そのショッピンカートの所有者はもちろんソース再配布の権利を有する。

てな感じだったとおもう。
163NAME IS NULL:2005/12/09(金) 15:59:16 ID:???
>>162
「mysqlのソース」もつけて売ればさらに何も問題ないな
164NAME IS NULL:2005/12/09(金) 16:34:22 ID:???
>>160
>MySQLのクライアントのライセンスが、どうとかこうとかなかったっけ。
うん。だから「MYSQL使ってるショッピングカート」ってだけで
FOSS例外が適応できるかは判らない。Webアプリの多くの場合適応できる筈だけどね。
165NAME IS NULL:2005/12/09(金) 18:55:41 ID:gwKK4JtV
クライアント(相当数)が毎日自分の体重、身長、etcの項目を入力してそれをmysqlで管理しようと思うのですが
最初はクライアント一人一人に対してクライアントの名前でテーブルを作り

Field type
date varchar(10) //日付
tall int(10) //身長
weight int(10) //体重

のようにしようかと思ったのですが、これだとテーブル数が莫大な数になってしまうのでどうかと思って・・。
かといってテーブルを1つにしてすべてのクライアントのデータをそのテーブルに収めるって方法も1つのテーブルが肥大しすぎてどうかと・・。
なにぶん、DBに関してあまり知識がないもので、どなたかいい案はないでしょうか?
166NAME IS NULL:2005/12/09(金) 19:03:58 ID:???
>>165
553223個のテーブルを作ろうとしてる猛者もいるから大丈夫だ。がんばれ。
167NAME IS NULL:2005/12/09(金) 19:12:03 ID:???
>>165
正規化などをもっと勉強しましょう。
テキストの553223ページに書いてあります。
168NAME IS NULL:2005/12/09(金) 22:19:05 ID:miFYUPF0
>>165
テーブル数が莫大な数>>>>1つのテーブルが肥大しすぎて

とにかく、動的にテーブルを作成するのはいただけません。
スキーマは運用中には変更しない。これは鉄則です。
169NAME IS NULL:2005/12/10(土) 06:19:44 ID:???
MidiumText型を越えている文章が5000個(あわせて5GB)存在し、含まれる語句を全文検索したい場合はどうするのがよいでしょうか?
また、一般的なPCでLongText型5000個の全文検索するのは無謀でしょうか?
170NAME IS NULL:2005/12/10(土) 07:20:04 ID:ErKTeUe9
>>168
2ch作ろうとしたら、スレッド毎にテーブル作成する?
それとも全てのスレッドの内容をひとつのテーブルに作成する?
動的テーブルがダメな理由教えてください。
171NAME IS NULL:2005/12/10(土) 08:23:16 ID:???
>>169
そもそもDBに放り込まない
全文検索したい場合は、本文はファイルに保存したままインデックスのみを生成・管理するツールを別途作る。
どうしてもDBでやりたい場合は、せめて単語毎に分割して縦に長いテーブルを作り、インデックスを貼る

>>170
ここは学校じゃない。
逆上する前に自分で勉強してこい。
172NAME IS NULL:2005/12/10(土) 08:26:52 ID:???
171がまともに答えられないに1票
173NAME IS NULL:2005/12/10(土) 08:28:06 ID:???
>>170

漏れなら1つの板=1つのテーブルだな。

通常RDBMSでは1つのテーブルに対してそれぞれファイルを作成することになる。
それだとスレが乱立した場合にはRDBMSが作らなければならないファイル数もがんがん増えて、
システムリソース(同時に開けるファイル数とかOSで制限あるよね?)を食ってしまうのでよろしくない。

さらに、基本的にはRDBMSはファイルは開きっぱなし、んでもってメモリ上にデータをキャッシュできるものは
キャッシュしたままでACIDを保ちつつデータ更新していくわけだけど、動的テーブルはそういった
アーキテクチャと相性が良くない。

のではないかと漏れは思う。他の人補足ヨロ。
174NAME IS NULL:2005/12/10(土) 10:19:19 ID:???
>173
すくなくともスレ用のテーブルと書き込み用のテーブルで、板ごとに2つのテー
ブルを用意した方がいいんじゃないかという希ガス。
175NAME IS NULL:2005/12/10(土) 10:49:15 ID:???
1板1テーブルでいいじゃん
176NAME IS NULL:2005/12/10(土) 13:20:32 ID:???
>>175
それはそれでメリットがあるか
デメリットも多いけど
177NAME IS NULL:2005/12/10(土) 13:53:26 ID:VagZ2wL0
ちょうど今スレッド型総合掲示板作ってるんだけど
一つの書き込みテーブルを板・スレ関係なく共用させてる。
これは無茶かな?
板をたくさん作るから、テーブルを別にしたら
メンテナンス性が下がるんじゃないかと思ったんだけど。
たとえばテーブル定義の変更も、×板数になるから、
別にツール作っておかないと簡単にはできない。
あるIPの書き込みをすべて削除したい時なんかも、
結構面倒くさい。
ただ統合テーブルにすると、
レコード数が膨大になるから、パフォーマンス的な不安も
結構ある。
178NAME IS NULL:2005/12/10(土) 14:10:14 ID:???
>>165
まて、相当数のクライアントっていうが、その相当数っていったいどのくらいなんだ。
あと、クライアント全員の身長の平均とかの計算はしないの?

動的テーブルは全データの集計とか、検索が面倒で効率が悪い。
それにそのテーブルだとクライアントが1万人で、10年毎日データ入れても
たいしたこたないぞ
179NAME IS NULL:2005/12/10(土) 14:16:28 ID:???
phpBBはどんなテーブル構造なんだろう?
180NAME IS NULL:2005/12/10(土) 15:30:51 ID:gdVJ9qUV
>>170
オレなら、そもそも2chの文書データをRDBに入れたりしないな。
181NAME IS NULL:2005/12/10(土) 16:01:49 ID:???
前の奴だったら、1スレ1テーブル作るだろうけとなwww

>>180
俺もそう思うなぁ。 1スレの記事はシーケンシャルアクセスしかしねーしな。
1スレに 1ファイル+1インデックスファイル、記事はケツに書き込むだけ。
DBはせいぜい、それらを纏めるテーブル用だなぁ。
(インデックスファイルもテーブルにしてもよし)
そしたらテーブル数なんて大して必要ないよ。
182NAME IS NULL:2005/12/10(土) 16:11:52 ID:???
mysqlよりも軽いDBって何があるのかね
183NAME IS NULL:2005/12/10(土) 16:25:13 ID:???
>>179
177のような感じですべてのレスで1テーブル。
ただ2chみたいな書き込み量だと速度的なデメリットも出てくるだろうね。
184NAME IS NULL:2005/12/10(土) 16:54:19 ID:U1IqiL9M
>>182
FireBirdどうだい?
185NAME IS NULL:2005/12/10(土) 17:22:20 ID:???
このようなテーブルを
hiragana katakana kanji eigo
りんご,リンゴ,林檎,Apple
ちゃ,チャ,茶,tea



このように正規化するにはどうすればいいのでしょうか?
hiragana sonotanohyouki
りんご,リンゴ
りんご,林檎
りんご,Apple
186NAME IS NULL:2005/12/10(土) 17:36:45 ID:U1IqiL9M
hiragana katakana kanji eigo
りんご,リンゴ,林檎,Apple
ちゃ,チャ,茶,tea

でいいよ
187NAME IS NULL:2005/12/10(土) 17:41:20 ID:U1IqiL9M
正規化の基準は重複したデータを持たないということ。
188NAME IS NULL:2005/12/10(土) 18:10:03 ID:U1IqiL9M
仮に、りんごの漢字名称が変わったとする(実際はありえないけど)
そのとき、1テーブルの1レコードの1フィールドだけの修正のみで
対応ですむのが「正規化された」ということ。あちこちのテーブルの
あちこちのレコードに「林檎」が埋まっていてそれらも修正しなけれ
ばならないのが「正規化されていない」ということ。
189NAME IS NULL:2005/12/10(土) 18:20:43 ID:???
mysql 5.0をwin2kにインストールしたのですが、
インストール時だったか、初回設定だったかで、
「常時起動させない(本当は英語)」オプションを設定しました。たしか。

それで、mysqlを必要なときだけ起動させたいのですが、
起動の仕方が分かりません。どうやったら良いのでしょうか?
だいたいのコマンドは実行してみたのですが‥‥。
190NAME IS NULL:2005/12/10(土) 18:36:14 ID:???
>>189
コントロールパネル-管理ツール-サービスで出来るYO!

それよりWindows2kでmysql root -pってやると
ERROR 1045 (28000): Access denied for user 'ODBC'@'localhost'(using password: YES)
に成っちゃうのはどうすりゃいいんだろう???
191185:2005/12/10(土) 18:40:52 ID:???
たとえば今後フランス語を増やすなどに当たってばらばらにしたいのですが・・・
そう簡単にコマンド一発では無理なのでしょうか?
192190:2005/12/10(土) 18:43:54 ID:???
あ・・・mysql -h localhost -u root -pみたくしっかり打たないとだめなのね・・・
193NAME IS NULL:2005/12/10(土) 18:50:07 ID:U1IqiL9M
>>191
じゃあ

hiragana sonotanohyouki,hyoukisyubetsu
りんご,リンゴ,かな
りんご,林檎,漢字
りんご,Apple,英語
りんご,XXXXX,フランス語
194NAME IS NULL:2005/12/10(土) 19:14:50 ID:???
>>191
こういうレベルの話でいいのかな?
hiragana katakana kanji eigo をtable1
hiragana sonotanohyouki 種類 をtable2とすると
insert into table2 (hiragana, sonotanohyouki, 種類) select hiragana, katakana, 'katakana' from table1
insert into table2 (hiragana, sonotanohyouki, 種類) select hiragana, kanji, 'kanji' from table1
insert into table2 (hiragana, sonotanohyouki, 種類) select hiragana, eigo, 'eigo' from table1
195NAME IS NULL:2005/12/10(土) 19:30:26 ID:???
MySQLに直接的に関係のないネタは自粛されたし
196NAME IS NULL:2005/12/10(土) 23:01:18 ID:U1IqiL9M
このスレはデータベース初心者の書き込みが多いね。
MySQLは入門者用DBなのか?
197NAME IS NULL:2005/12/11(日) 00:24:56 ID:???
>190
thx!!
198NAME IS NULL:2005/12/11(日) 05:20:31 ID:???
RDBMSに入門者用も糞もないとおもうんだが。
199NAME IS NULL:2005/12/11(日) 05:35:22 ID:???
てかMySQL=入門者用って認識は
一般的にあると思うけど…。
200NAME IS NULL:2005/12/11(日) 09:32:52 ID:???
>>199
ではどういった理由から入門者用なのか説明してくれ。簡単にな。
RDBMSへの要求事項から考えると俺にはそうは思えんのよ。
201NAME IS NULL:2005/12/11(日) 10:13:07 ID:???
・機能がシンプル(逆にいうと限定されている)
・値段がタダ
・安定している
・ユーザーが多いので、必要な情報が集まりやすい

ただ4.1以降は、文字コード問題があるから
入門者に適切なDBだとは思わない。
202NAME IS NULL:2005/12/11(日) 15:01:24 ID:vuWWDwd6
4.0だと文字コードの指定は、
configure時とデーモン起動時しかできないんですね?
DBごとに文字コードを変えられないと…。
203NAME IS NULL:2005/12/11(日) 15:03:15 ID:???
PHPとMySQLの組み合わせが多いから
レン鯖にMySQLが広まっているから
204NAME IS NULL:2005/12/11(日) 16:18:50 ID:???
>>202
Yes.
205NAME IS NULL:2005/12/11(日) 16:23:10 ID:???
レン鯖でMySQLなんか使ったら、文字コードで大騒ぎすると思うけどなぁ
設定書き換えたり、再コンパイルできるわけじゃないし。
206NAME IS NULL:2005/12/11(日) 16:47:49 ID:???
たいていのレン鯖はmysql3.23か4
207NAME IS NULL:2005/12/11(日) 18:13:58 ID:Q9S2IxZT
おい、MySQLって早いと聞いたんだが、Oracle10gとどっちが早いんだ!?
208NAME IS NULL:2005/12/11(日) 18:31:23 ID:???
Oracle は速くないじゃん。
209NAME IS NULL:2005/12/11(日) 18:43:47 ID:???
なぜMySQLなのか?

答えは簡単。

postgresqlはユーザがキモすぎる。
商用はメンテナがなっていない。

残ったのがMySQLって訳さ。
210NAME IS NULL:2005/12/11(日) 19:15:10 ID:???
SQLiteは?
211NAME IS NULL:2005/12/11(日) 22:18:55 ID:nrNceXLO
>>207
データベースの速さの単純比較は難しい。
どこも、うちのDBは世界最速だっていうけど、うそじゃないw
212NAME IS NULL:2005/12/12(月) 01:36:51 ID:???
Win2kにMySQL4.1を入れたのですが、コマンドプロンプトからmysqlを使用して接続してもEUCの日本語が化けてしまいます。
Windows付属のターミナルはJISとSJISしか駄目なようです・・・
どうすればよいのでしょうか?
213NAME IS NULL:2005/12/12(月) 03:16:42 ID:???
>>212
Windows付属のターミナル、つまり「コマンドプロンプト」とか呼ばれる奴を使わない。
あれはUTF-8、SJISぐらいしか選べないでしょ。
214NAME IS NULL:2005/12/12(月) 03:19:55 ID:???
>>213
代わりになるソフトがあるのでしょうか?
215NAME IS NULL:2005/12/12(月) 03:29:01 ID:G5S92dnm
化けた文字を読めるように特訓するんじゃ
216NAME IS NULL:2005/12/12(月) 03:35:35 ID:???

パイプが使えるなら、そのまま nkf。
パイプが使えんかったらファイルにリダイレクトして nkf。
気にせんでくれ、眠いから、分からんくせに適当なことをいってたりする。
217NAME IS NULL:2005/12/12(月) 03:44:56 ID:MaMqv63W
>>214
出力をファイルに落として、EUCを対応しているテキストエディッターで見る。
めんどう?
218214:2005/12/12(月) 03:49:24 ID:???
みなさんどうもありがとうございます。
正直、さっきまで>>217の方法でやっていました・・・
Windowsにもnkfがあるようだと分かり助かりました。
化けた文字を読めるようになるまでこれでがんばります。
219NAME IS NULL:2005/12/12(月) 05:45:16 ID:G5S92dnm
そういやWin用にはクエリアナライザみたいなもんてないのか
220NAME IS NULL:2005/12/12(月) 15:24:37 ID:???
文字コード考えたら、ポスグレがいいかなぁ。。。
Win版も使いやすくなったし。
221NAME IS NULL:2005/12/12(月) 19:08:34 ID:???
俺は4をMacとWinで使ってるだけだからよくわからんが・・・
LinuxならEUCが化けないシェルがあるの???
222NAME IS NULL:2005/12/12(月) 21:42:49 ID:???
puTTY
223NAME IS NULL:2005/12/12(月) 21:51:43 ID:???
>>212
マジレスすると set names sjis
224NAME IS NULL:2005/12/12(月) 21:57:48 ID:???
1つのテーブルのみ更新するときは、トランザクション使わなくていい?
225NAME IS NULL:2005/12/12(月) 22:25:54 ID:UFsjVvg+
暗黙のトランザクションというものになるんだろ。

いきなりINSERT文を発行すると、内部でBEGIN TRANSACTIONを発行してくれる
(または、同一の処理をしてくれる)
INSERT文の処理が終わったら同じよう勝手にCOMMIT WORKをしてくれる。
226225:2005/12/12(月) 22:29:50 ID:UFsjVvg+
>>224
ごめん間違えた。

INSERT文だけだったら>>225のとおり。
だけど、ひとつのテーブルのみの更新でも、SELECTやUPDATEやINSERTを複数
発行するときはトランザクションではさまないとダメなんでは

排他の方針をどうするかによって異なるとは思いますけど
227NAME IS NULL:2005/12/12(月) 23:23:23 ID:???
nkfってutf使えないだろう。
iconv使え。
228NAME IS NULL:2005/12/12(月) 23:27:37 ID:???
そいやiconv2のソースコードってどこにあるのかしらん?
229NAME IS NULL:2005/12/12(月) 23:45:17 ID:???
>>227
nkf 2.0 なら使える
230NAME IS NULL:2005/12/13(火) 07:23:18 ID:sdS7JIAD
inって後ろに式を持ってこれないの?
in(select id from 〜〜〜)
みたいに。
231NAME IS NULL:2005/12/13(火) 07:46:34 ID:???
>>230
できる
232230:2005/12/13(火) 08:02:47 ID:???
ですよね。そうじゃないと役立ちませんよね。
その後色々やってたらinがどうとかじゃなくてカッコ内に式を入れるとエラー出されると判明しました。

マニュアルのサブクエリ構文の最初にあった例文を自分のデータベースと合うように変更して
マニュアル:SELECT * FROM t1 WHERE column1 = (SELECT column1 FROM t2);
実行したの:SELECT * FROM r2 WHERE item_id = (SELECT item_id FROM r2);
やってみると
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 'SELECT item_id FROM r2)' at line 1
二つ目のselect以降に問題があります、バージョンのあったマニュアルチェックしてね、
みたいだと思われるエラーメッセージを吐かれて失敗。
マニュアルは4,1で使ってるのは4,0,20なんですけどそんなに大差は無いのではないかと思うのです。

これは一体何が問題なんでしょうか。
233230:2005/12/13(火) 08:14:34 ID:???
ぐ・・・。もしやマニュアルのもう少し下に書いてある
4.0以前ではサブクエリの使用を避けると言うくだりは、
なんとなく使わないんじゃなくて使ってはいけないと言う意味か・・・。
234NAME IS NULL:2005/12/13(火) 10:46:37 ID:???
さぶくえりは4.1から
235NAME IS NULL:2005/12/13(火) 10:55:25 ID:???
>マニュアルは4,1で使ってるのは4,0,20なんですけどそんなに大差は無いのではないかと思うのです。
つまらん妄想を垂れ流す前に少しは自分で調べてみたら?
4.0系と4.1系では、大きく違うよ。
236NAME IS NULL:2005/12/13(火) 12:15:42 ID:???
mysqlのgroup byなんですが、特定のフィールドでだぶってる値をまとめてuniqなものにすると言うことはわかるのですが、この場合、結果として抽出されるレコードは何を基準に選ばれるのでしょう?
だぶってるものをまとめるときに、特定の条件の一件を抽出するっていうのは出来ないものでしょうか?
237NAME IS NULL:2005/12/13(火) 15:26:55 ID:???
各ユーザに対して容量を制限したいんですがやり方はどうやればいいんでしょうか。
238NAME IS NULL:2005/12/13(火) 15:43:57 ID:???
239NAME IS NULL:2005/12/13(火) 16:18:24 ID:???
ごめんなさい、Linuxです。suiddirはできないっすね…
240NAME IS NULL:2005/12/13(火) 16:45:40 ID:8RC2ZHkm
誘導されてきました。

MySQLのMySQLデータベースのuserテーブルやdbテーブルに
フィールド2,3個追加したいんですが、問題あるでしょうか?
理由は管理上初期のままだとわかりにくいからです。

たぶん問題ない気はしますが、
いかんせんmysqlの根幹部分の設定なので不安なのです。
241NAME IS NULL:2005/12/14(水) 07:59:05 ID:???
>>240
もうちょっと詳しく。何をしたいのか、具体的にどんなフィールドを追加するのか。
242240:2005/12/15(木) 10:57:26 ID:???
>>241
レスありがとうございます。

複数のユーザで使用したく、
そのため、それぞれが誰のデータベースであるかを判断しやすくするために
usernameというフィールドを作成して、その
データベースの所有者データを入れたいと考えています。
243241:2005/12/15(木) 14:12:02 ID:???
>>242
こういうの興味あるんで調べてみたんだけど、やっぱ確証は得られなかったよ。ごめんな。

・mysqlデータベースのスキーマは、既存のものは変更してはいけない。(エラーが発生する)
・追加する分には、問題なさげ(※全部確かめたわけじゃないので要注意)
・マニュアルには「弄ってOK」とも「NG」とも書いていなかった。

まあ、あまり役つ情報じゃないけど・・・。

mysqlデータベースを弄らない方法でも実装できるなら、それに越したことはないとは思う。
244NAME IS NULL:2005/12/15(木) 23:05:47 ID:IeMGdFx0
本家のサイトみた??日本語表示になってる。
でも”ホワイトペーパーよみなさい”って。
笑える。
245NAME IS NULL:2005/12/16(金) 02:55:37 ID:???
>>244
機械翻訳? 日本語がない時よりも、やる気なさげに見えて逆効果な気がw
246NAME IS NULL:2005/12/16(金) 13:12:05 ID:???
MySQLのマニュアルで調べようとしたら
ttp://dev.mysql.com/doc/以下が綺麗に消えていて調べられないorz
247NAME IS NULL:2005/12/16(金) 13:41:32 ID:???
読んでる最中にいきなり見れなくなった orz
どうしちゃったんだろか
248NAME IS NULL:2005/12/16(金) 14:14:48 ID:???
あ、直った
249NAME IS NULL:2005/12/16(金) 15:13:33 ID:OfT7rCWQ
現在MySQL4.1を使っているのですが,ビューに対応して
いないのでMySQL5.0にバージョンアップしようと思っています.
しかし,MyNAのFAQを見ましたがバージョンアップの方法は
載っていませんでした.方法しっている方いたらお願いします.
250NAME IS NULL:2005/12/16(金) 17:49:50 ID:???
>>249
MySQL4.1→5.0なら、普通にダンプしてリストアで大丈夫だと思うよ。
4.1は5.0のサブセットみたいなもんだから。
251NAME IS NULL:2005/12/16(金) 18:31:27 ID:OfT7rCWQ
>>250
自宅のPCと大学のPCの両方にMySQLが入っており,
二つのPC間で同期を図る為に,一方のPCにてmysqldumpコマンドで
バックアップ→他方のPCにてそれを元に再構築を繰り返しています.

同じ要領で4.1でdumpして出来たtxtファイルを元に,5.0で構築すれば
いいということですか?
252:2005/12/16(金) 18:44:54 ID:JitHzTI2
253NAME IS NULL:2005/12/16(金) 18:46:05 ID:???
>>252
254NAME IS NULL:2005/12/16(金) 20:39:02 ID:eEO7W2kp
>>253
255NAME IS NULL:2005/12/16(金) 22:17:58 ID:???
>>254
256NAME IS NULL :2005/12/17(土) 00:00:58 ID:KpYTNxbO
レンタルサーバーにMySQLインストールしたのですが,
こんな感じで出来ません。 DBDをインストールしてくれと出た後指示通りに
すると こんな感じ

コマンド /usr/bin/perl Makefile.PL && make を実行中..

Can't exec "mysql_config": No such file or directory at Makefile.PL line 76.

Cannot find the file 'mysql_config'! Your execution PATH doesn't seem
not contain the path to mysql_config. Resorting to guessed values!
Can't exec "mysql_config": No such file or directory at Makefile.PL line 454.
Can't exec "mysql_config": No such file or directory at Makefile.PL line 454.
Can't exec "mysql_config": No such file or directory at Makefile.PL line 454.
Can't exec "mysql_config": No such file or directory at Makefile.PL line 454.
Can't exec "mysql_config": No such file or directory at Makefile.PL line 454.
Can't exec "mysql_config": No such file or directory at Makefile.PL line 454.
Failed to determine directory of mysql.h. Use

perl Makefile.PL --cflags=-I

to set this directory. For details see the INSTALL.html file,
section "C Compiler flags" or type

perl Makefile.PL --help

って出て先に進みません。 どうすれば良いのでしょうか?
OSは free BSDでウェブミンで作業しています。
教えてエロい人〜
257NAME IS NULL:2005/12/17(土) 00:35:23 ID:???
>>255


>>256
空気嫁!
258NAME IS NULL :2005/12/17(土) 00:55:35 ID:KpYTNxbO
>>257
すまん!真剣に悩んでて空気読むの忘れた......orz
逝ってくる。
259NAME IS NULL:2005/12/17(土) 01:10:22 ID:???
>257
文字通り mysql_config というプログラムがないってことだろ。
% mysql_config --cflags
-I/usr/local/include/mysql -O -pipe
みたいにコンパイルフラグを出してくれるヤツだよ。これがないと DBD みた
いなのはコンパイルできない(やりようがない)。

漏れも FreeBSD 環境だけど、 /usr/local/bin にちゃんとある。
軽く調べた感じでは mysql-client 系がインストールされないと mysql_config
は入らないってことのようだな。 mysql-server しか入れてないんじゃね?
260NAME IS NULL :2005/12/17(土) 01:37:49 ID:KpYTNxbO
>259

mysql_configはあるけど階層が深くて。。
DBDはSQLと並列に入れたらいいの?
SQLの直下?
本当にごめんな。出来ない子供を持つと、、、、、orz
親の気持ちがわかるあw〜
教えてエロイ259!
261NAME IS NULL:2005/12/17(土) 01:54:57 ID:???
webminの時点で無謀だろう。
設置も含めて業者に投げるしか。おまいが退職すれば、費用は出せるだろうし。

遠隔地で同期ってすげー使い方だな。
普通はバージョン合わせると思うし、どちらかが常に参照出来るように細工するけどな。
262NAME IS NULL:2005/12/17(土) 02:06:42 ID:iBF79eHA
インストールしました。
Table 'mysql.host' doesn't exist
です。
mysql.hostはバイナリファイルですか?
それは普通はどこに存在しているものですか?
263NAME IS NULL:2005/12/17(土) 02:25:53 ID:iBF79eHA
'mysql.host'じゃなくて、mysql/host.frmが無いということなんでしょうか?
264NAME IS NULL:2005/12/17(土) 08:37:51 ID:???
レン鯖使うのはいいが、セキュリティ気をつけておけよ

総当り攻撃してくる奴がいるからどこかと思ったらレン鯖ばっか
踏み台にされてるって事は侵入されていてデータ盗み放題って事だが、
3306開いてたところもあるし、某社の会員情報サーバっぽいところも・・・・・

使い方わからなくて管理もできない状態で外に出さん方がいいぞ
265NAME IS NULL:2005/12/17(土) 12:29:54 ID:???
このスレの半分はおせっかいでできている
266NAME IS NULL:2005/12/17(土) 12:46:03 ID:???
君の心にぽっかりと開いた 3306
267NAME IS NULL:2005/12/17(土) 14:38:32 ID:hmaBKjaJ
>>251なんですが,これであっているでしょうか?
268NAME IS NULL:2005/12/17(土) 15:08:59 ID:???
レン鯖でDB動かすなんてアフォだし。
DBはインターネットからアクセスできない鯖で動かすべき。
269NAME IS NULL:2005/12/18(日) 11:24:49 ID:???
またまた
270NAME IS NULL:2005/12/18(日) 13:05:18 ID:???
>>268
1行目はどうかと思うが2行目は同意
271NAME IS NULL:2005/12/18(日) 18:04:59 ID:bJQ/s3hS
「mysqlが実行するクエリをコマンド行に直接指定する。」

mysql -e "SELECT COUNT(*) FROM limbs" cookbook


# cookbookはDB名
# limbs はテーブル名


みたいな感じでオライリーの本に載っていたので、
その通りにクエリを送ってみたらエラーになっちゃいました。

この方法ってもしかしてMySQL3系でしかできない事だったりします?


272NAME IS NULL:2005/12/18(日) 20:12:33 ID:???
>>271
いや、構文はあってるし MySQL 4.0 でも通る。
エラーになっちゃいました、じゃないよ。
ちゃんとエラー文をコピペしろよ。
273271:2005/12/18(日) 21:40:15 ID:???
エラーメッセージです。

mysql> mysql -e "select count(*) from limbs" cookbook
->
-> ;
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 'mysql
-e "select count(*) from limbs" cookbook' at line 1

ちなみに、ローカルなWinXPにApache2とMySQL5.0を入れています。

274NAME IS NULL:2005/12/18(日) 21:45:23 ID:???
windowsのコマンドプロンプトからそれやって成功したけど。

MySql 4.1.15
275NAME IS NULL:2005/12/18(日) 21:51:57 ID:???
>>273
オライリーの本は持っていないので、前後にどう書かれているかしらないけれど
コマンドプロンプトから実行するやり方だね。
念のためユーザー名とパスワードも付けた方がいいけど。
 C:\> mysql -e "select count(*) from limbs" cookbook -uユーザー名 -pパスワード

mysql クライアントを起動してやる場合はこんな感じだね。
 mysql> use cookbook
 mysql> select count(*) from limbs;
276NAME IS NULL:2005/12/18(日) 21:52:50 ID:???
>>273
mysql コマンドの実行時オプションなのに、
mysql コマンドを打った後にそんなことしてどうするよ。

mysql> ←これ が出る前に打つもんだ。
277271:2005/12/18(日) 23:03:23 ID:???
>mysql クライアントを起動してやる場合はこんな感じだね。
> mysql> use cookbook
> mysql> select count(*) from limbs;

> mysql> ←これ が出る前に打つもんだ。

まさに。。。。

かなりの醜態を晒してしまってすんませんでした。
このトピックのために費やした5,6時間がむなしいw

ちなみに、
まだ先なんですが、後半のトピックに難解なのがあったりするで
また来てもいいですか?
というか来ます。
278NAME IS NULL:2005/12/19(月) 00:28:39 ID:tPuOVYzW
レスがないが…
>>251でOK?
279NAME IS NULL:2005/12/19(月) 01:26:55 ID:???
>>278
お好きな方で
280NAME IS NULL:2005/12/19(月) 02:17:37 ID:???
OS:Linux
PHP:4.3.11
MySQL:4.1.16

my.cnf
--
[mysqld]
default-character-set = sjis
[client]
default-character-set = sjis
[mysql]
default-character-set = sjis
--

という環境で、SJISのSQLを実行しようとした場合に
SQLエラーが発生します。

発生エラー:引用符が閉じていません。 @ 39
エラー箇所:value = '機能\'

'機能\'
だとエラーとなりますが
'機能\A'
とか\と'の間に何か文字が入るとエラーが発生しません。

さらに、
'機能'
で実行するとApacheがハングアップします。
mysqlコマンドから実行すると

"セグメンテーション違反です"

とか吐いてmysqlコマンドが終了します。

これってMySQLのSQLパーサのバグでしょうか?
同じような現象が出ている方はいらっしゃいますか?
281NAME IS NULL:2005/12/19(月) 02:55:29 ID:???
utf8を使いましょう。
282280:2005/12/19(月) 03:47:00 ID:???
>>281
移行するデータがSJISなのと
ターゲットが携帯だからデータもSJISで保持したいのです。
よって、UTF-8という選択肢はありません。
283NAME IS NULL:2005/12/19(月) 03:53:19 ID:???
>>282
じゃあオラクル代理店に電話してどうすればいいのか聞いてみるといいよ。
284NAME IS NULL:2005/12/19(月) 05:18:29 ID:???
つか、Linux上でmysqlクライアントユーティリティも含めて
SJISで扱った記憶があるんだが、特に悩んだりしなかったような…

>[client]
>default-character-set = sjis
エラー吐いてねぇか?これ。
285280:2005/12/19(月) 05:59:43 ID:???
>つか、Linux上でmysqlクライアントユーティリティも含めて
>SJISで扱った記憶があるんだが、特に悩んだりしなかったような…

ええ、自分もMySQL4.0系でSJIS使いまくりでしたが
mysqlクライアントユーティリティが
Segmentation Fault吐いて落ちるとか
経験したことないので、ちょっと途方に暮れてる状態です。

>>[client]
>>default-character-set = sjis
>エラー吐いてねぇか?これ。

特にエラーは吐いてないようです。

今、MySQL 4.0.26から
4.1.16、5.0.16と順に検証しているのですが
挫折しそうな勢いです...orz
286NAME IS NULL:2005/12/19(月) 06:40:17 ID:???
>280
ああ、おれもC++Builderで接続するので これなったなぁ。
特定の日本語が末尾にくると出るんですよねぇ。これ自体は、結局解決しないで放置。
今は、仕方ないのでスピード落ちるけど ODBC経由で接続して回避してる。

UTF-8にするのが1つの解決かぁ。 難しいなぁ。
287NAME IS NULL:2005/12/19(月) 08:40:27 ID:???
288NAME IS NULL:2005/12/19(月) 09:59:07 ID:???
>>282
そのうちsjis無くなるから今のうちにutf8とかに置き換えた方が良いと思うよ
289280:2005/12/19(月) 10:10:14 ID:???
>>286-288
thxです。

MySQL4.0でdefault-character-set=latin1だとエラーにならないだけで
エラーになるのが普通なのですね。

薄々そんな気がしてたけど、認めたくない自分がおりました。

という事は、4.1以降にする場合は
UTF-8で保持してSJISで吐くのが現実的って事ですね。

取り敢えず覚悟はできました。
助言ありがとさんです。
290NAME IS NULL:2005/12/19(月) 21:09:58 ID:???
4.1.15から4.1.16へのバージョンアップに際して
デフォルトのキャラクタセットをecu-jpからutf8に変更しようと思うのですが、
mysqldumpにてバックアップしたデータの
> ENGINE=MyISAM DEFAULT CHARSET=ujis;
この部分を
> ENGINE=MyISAM DEFAULT CHARSET=utf8;
と書き換えて取り込んで問題ないですか?
291NAME IS NULL:2005/12/19(月) 21:24:43 ID:q0sTyHv/
created table test (
id int auto_increment primary_key,
num int
)
上のようなテーブルで、insert時に自動生成されるカラムidの値を
カラムnumにも同時に入れるにはどうしたらいいですか?
insert後、updateするしかないでしょうか。
292NAME IS NULL:2005/12/20(火) 00:11:13 ID:???
MySQLの良書を探しています、サーバーはレンタルしているので、サーバーの設定
云々の記述は最小限でいいと思います、特にPHPとの連携がしっかり記述してある
本が希望です、
オイラリーのMySQLクックブック〈VOLUME1とか考えているのですがいかがでしょうか?
もっと良い本があれば教えてください。
293NAME IS NULL:2005/12/20(火) 00:22:38 ID:???
MySQL4.1.15(Windows)でテーブルAのaを指定し、Bのcを表示したいと考え、
SELECT B.c FROM A,B WHERE a = 'あ' AND A.b = B.b;
のようにしたところ、きちんと「A」を返してきました。
しかし、bに長めの日本語があるとマッチする物が存在するのにも関わらず見つけることが出来ないようです・
SELECT B.c FROM A,B WHERE a = 'こ' AND A.b = B.b;
Empty set (0.00 sec)
この問題はどのようにすれば回避することが出来るのでしょうか?
どうかよろしくお願いします。

どちらもMyISAM,すべてTEXT
A
+----+------+
| a | b |
+----+------+
|あ | Apple
|こ | こういう長いのはどうもだめらしいこういう長いのはどうもだめらしい
|え | え

B
+----+------+
| c | b |
+----+------+
|A | Apple
|D | こういう長いのはどうもだめらしいこういう長いのはどうもだめらしい
H | え
294NAME IS NULL:2005/12/20(火) 01:40:47 ID:???
>>292
MySQLクックブックかなり良いよ。
基礎からみっちり説明してるし、
一般的な初心者がよく間違えて覚えてる項目も
取り上げてるから安心して身に付けられると思う。

ちなみに、Vol1とVo2と実践ハイパフォーマンスMySQL
の3冊買ってまだVo1のP100までしか進んでないけど、
わかんない事があったらオレに聞いてくれ!
295NAME IS NULL:2005/12/20(火) 12:01:29 ID:???
>>292
SQL全機能リファレンス
実践ハイパフォーマンスMySQL
このあたりが最高峰
296295:2005/12/20(火) 12:02:02 ID:???
「MySQL全機能リファレンス」ね
297NAME IS NULL:2005/12/20(火) 12:37:35 ID:???
「実践ハイパフォーマンスMySQL」は名前の通りの性能分野に特化した本かと思いきや、
かなり手広い分野を説明してて、かなりの良書だということには個人的に同意。
MySQLのヘビーユーザとして有名なYahoo!comのエンジニアが原作書いてるから、流石。

でもPHPとの連携はこの本には書いてないよ。orz
298NAME IS NULL:2005/12/20(火) 12:46:29 ID:BChHfMfC
スタートアップに登録されている[MySQL Command line Client]は
どのexeファイルに対するショートカットですか?
binフォルダのexeを見てもそれらしいのが見付からず…
299NAME IS NULL:2005/12/20(火) 13:40:44 ID:BChHfMfC
すみません.>>298は自己解決しました.
別の問題なのですが

MySQL4.1で作成したデータベースを以下の方法でバックアップし,
mysqldump --all-databases --default-character-set=binary -uroot -proot >C:\bak.txt

MySQL5.0でリストアしようとしたところエラーが起こりました.
C:\Program Files\MySQL\MySQL Server 5.0\bin>mysql -ukeep -pkeep <C:\bak.txt
ERROR 1045 (28000): Access denied for user 'keep'@'localhost'
(using password: YES)

何が原因か分かりません.
対処法の分かる方ご指導お願いします.
300NAME IS NULL:2005/12/20(火) 14:01:52 ID:???
>>299
Access denied for user 'keep'@'localhost'
ってでてるじゃん。
そのユーザーに権限与えてないんでしょ。
301NAME IS NULL:2005/12/20(火) 14:03:49 ID:BChHfMfC
よく見たらrootユーザしかいないのに
ユーザ欄をkeepにしてたからだ
302NAME IS NULL:2005/12/20(火) 14:16:49 ID:???
>>301
で?
303NAME IS NULL:2005/12/20(火) 19:54:55 ID:???
質問です。
列 a, b, c を 列 a, c, b といった具合に
列の移動って可能ですか?
もしよろしけば、やり方を教えてもらえると助かります。
304NAME IS NULL:2005/12/20(火) 20:30:11 ID:???
select a, c, b from table
305303:2005/12/20(火) 20:37:26 ID:???
>>304
すいません。
質問のしかたが、わかりづらかったですね。

テーブル定義上での、列の位置の移動のことです。
306NAME IS NULL:2005/12/20(火) 20:51:57 ID:???
>>305
可能だけどやり方忘れた
いるかのページで出てきたと思うよ
307NAME IS NULL:2005/12/20(火) 21:02:58 ID:???
windows使いってのは、 ERROR 1045 (28000): Access denied for user 'keep'@'localhost' すら読めないのか。
308NAME IS NULL:2005/12/20(火) 21:09:21 ID:???
>>305
やろうとしている事が無意味だと判っているよね?
309NAME IS NULL:2005/12/20(火) 21:22:32 ID:???
>>307

× windows使い
○ ドザ
310293:2005/12/20(火) 22:39:58 ID:???
色々と実験していて分かったのですが、>>293の症状はテーブル内のカラムの並びによってはちゃんと動くことが分かりました。
原因は不明ですがものすごく不思議に感じます。
311NAME IS NULL:2005/12/20(火) 23:29:37 ID:???
テーブル定義と実データとクエリを晒せばだれかが原因を指摘できるかも知れない。
まぁText型フィールドでjoinするという荒技の経験者がいるとも思えないけど...

とりあえず、Text型でjoinなんて真似はやめとけ
せめてsubstrかmd5かしたフィールドにちゃんとインデックスを付けてjoinに使うべきだろう。
312293:2005/12/20(火) 23:43:51 ID:???
特に日本語が駄目なコマンドを含まないしすんなり動くだろうとは思ったものの、本当に変なことはしない方が無難だと身にしみました。
お教え通りmd5化してみます。
どうもありがとうございます。
313初心者:2005/12/21(水) 01:29:38 ID:U/BKSVGX
delete from mysql.user where user=";
を実行後、rootでのログインもできなくなってしまいました。
rootのアカウントも削除してしまったのでしょうか?

mysqlをアンインストール後再度インストールしても、状況が
変わりません。
完全に削除できれば・・と思うのですが、それもできないため、
行き詰っています。
どなたか、フォローください。

※OSは、Linuxです。
314303:2005/12/21(水) 01:45:49 ID:???
>>306 >>308
ありがとうございます。
いるかのマニュアルに書いてありました。

ALTER TABLE tablename MODIFY c int AFTER b
でいいみたいですね。
315NAME IS NULL:2005/12/21(水) 01:50:51 ID:???
>>313
>完全に削除できれば・・と思うのです
アンインストール後にアンインストーラでは削除されない
mysqlのデータディレクトリをrmすれば、再インストール時に
mysql権限データベースもさらのものがインストールされるよ。

マニュアルに書いてあるとおり、インストールスクリプトを動かして
mysql権限データベースだけを最初のデータにしてもいいけど。
あと管理者パスワードを忘れた場合の権限データベースの読み込みを
スキップさせる方法についてもマニュアルに記述があるので、その辺を読め。
316NAME IS NULL:2005/12/21(水) 07:05:26 ID:???
かなり初歩的な疑問で恐縮ですが
4.1端末から5.0鯖へ問い合わせ可能ですか?
要するに互換性というか異なるバージョン間には単に構文の相違だけで
その点に注意すれば基本的にデータベースそのものへのアクセスに制限はないのでしょうか?
317NAME IS NULL:2005/12/21(水) 07:06:28 ID:???
s/構文の相違/新機能追加の有無/
318NAME IS NULL:2005/12/21(水) 07:21:50 ID:???
>>316
MySQL4.1とMySQL5.0とで、付属のmysqlクライアントと
libmysqlcに相違はなかったと思うけど。
319NAME IS NULL:2005/12/21(水) 07:33:29 ID:???
>>316
推奨しないのは言うまでも無いが、プロトコルレベルでできるできないで言えば「できる」。
5.0の全機能が4.1のmysqlclientで使えるかは知らん。
320NAME IS NULL:2005/12/21(水) 20:54:27 ID:B4QGhCLD
>>305
alter table テーブル名 change c c フィールド定義 after a
でできるはず。
たまに使うけど、データベース的にあまり意味がない。
まあ気分の問題だね
321NAME IS NULL:2005/12/21(水) 23:11:41 ID:???
4.1以降で、クライアントの文字コードをujisにして、ujisでテーブル作って、alterでbinaryに変換すると文字化けする
文字化け後、クライアントの文字コードをbinaryにすると、文字化けが直る

これって、ujisのテーブルをujisで読み出してる時でも、
内部的には一度utf8か何かに変換されて元に戻しているってことだよな・・・・・


MYDを直接覗いて文字コード調べてみるとわかるのかな
322NAME IS NULL:2005/12/22(木) 00:06:00 ID:???
>>321
ん? うちの環境では化けないが
323NAME IS NULL:2005/12/22(木) 00:57:56 ID:???
内部はutfってFAQだし。
よくドキュメント読めよ。

ttp://dev.mysql.com/doc/mysql/ja/index.html
日本語Document MySQL AB

日本語だけで使うなら、ソース弄ってutf変換せずに格納できて取り出せてもいいと思うけどね。クエリーで困るかも知れないけど。


4.1と5.0の互換性ぐらい検証しろよ。
検証してみて問題が無ければおまいの責任で使えばいい。
誰かにケツ持ちしてもらいたければ有料サポートに聴け。
ねらーに訊いても、言い訳には使えないよ。おまいの首が飛ぶだけ。
324NAME IS NULL:2005/12/22(木) 23:28:19 ID:???
>> 321
etherealとかstoneでパケットキャプチャーしてみたら
325NAME IS NULL:2005/12/23(金) 09:31:43 ID:???
DELETE FROM `news` WHERE time < (NOW()-86400)
こういうクエリー送ったらテストデータ全部消えた(--;
NOW()-123とかは使えないのでしょうか?
326NAME IS NULL:2005/12/23(金) 11:03:16 ID:???
>>325
NOW() - 10000
は、NOW() の 1万秒前ではなく、NOW()の数値表現である "20051223010000"(01:00:00) から 10000 を引いた
"20051223000000"(00:00:00) になる。

よって、あなたのしたいことは

FROM_UNIXTIME(UNIX_TIMESTAMP(NOW()) - 86400)
DATE_SUB(NOW(), INTERVAL 1 DAY)

のどちらか。
327NAME IS NULL:2005/12/23(金) 11:11:42 ID:???
>>326
そうでしたか(^^;。NOW()自体は日付を返してくるのですね。
ありがとうございます。
328NAME IS NULL:2005/12/23(金) 19:40:49 ID:2RkZ8uVv
mysql> use mydatabase;
mysql> show tables;
上記コマンドを、useせずに
mydatabaseの中のテーブル名を列挙するコマンドはありまうか?
329NAME IS NULL:2005/12/23(金) 19:43:44 ID:???
>>328
show mydatabase.tables;
330NAME IS NULL:2005/12/23(金) 19:46:51 ID:???
>>329
show tables from mydatabase
331NAME IS NULL:2005/12/23(金) 20:06:52 ID:2RkZ8uVv
ありがとうございます。
332NAME IS NULL:2005/12/23(金) 20:10:35 ID:2RkZ8uVv
mysql> use mydatabase;
を実行した後、
mydatabase を useしていない状態にさせるには
他のデータベースを useするしかないのでしょうか?
unuseしたいです。
333NAME IS NULL:2005/12/23(金) 21:25:02 ID:OgXtk4AN
質問です。

売上げデータ22万件をMysqlに入れてあります。
data
+-----------+-------+
| date | price |
+-----------+-------+
|2005-12-23 | 200 |
|2005-09-01 | 120 |
|2005-10-11 | 250 |

dateにインデックスを置いてあります。
このテーブルに対し以下のSQL文を行います。
SELECT sum(price), MONTH(date) FROM data group by MONTH(date)

このSQL文を実行すると6秒程度かかるのですが
もっと速くする方法ありますか?
集計を速くするにはCPU性能が問題でしょうか?

Mysql3.23
Mysqlのバッファ:key_buffer=16M、sort_buffer=4M、table_cache=256
Win XP Home
Celeron2G、メモリ384M
334NAME IS NULL:2005/12/23(金) 22:06:17 ID:???
>>333

>Mysqlのバッファ:key_buffer=16M、sort_buffer=4M、table_cache=256

少ないんじゃないかな。
タスクマネージャとかでメモリをモニタリングして確認してみよう。
335NAME IS NULL:2005/12/23(金) 23:25:40 ID:???
>>333
priceにindexを追加する
key_bufferを128M位まで上げる
336NAME IS NULL:2005/12/24(土) 00:24:22 ID:???
売り上げデータ入れてるのに、メモリ384Mって。。。
512MBぐらいは積んで上げたら?
最近は1万ちょいで1GB買えるのに。
337333:2005/12/24(土) 00:52:04 ID:???
>>334>>335
さんくす

priceにindexなしで6.4秒。
で、priceにindex追加してからやってみた。(3回の平均)
これ以上のバッファサイズは消費メモリが実メモリ超えちゃいます。
key_buffer=128M、sort_buffer=16M :6.3秒
key_buffer=64M、sort_buffer=64M  :6.1秒
key_buffer=16M、sort_buffer=128M :6.1秒
バッファ指定なし         :5.7秒

インデックス追加でバッファ指定なしが速くなりましたが、
バッファ指定で逆に遅くなりました。
SQL実行時のCPU使用率は100%でしたので、
バッファサイズよりCPU速度が問題かもしれません。
338NAME IS NULL:2005/12/24(土) 01:01:48 ID:???
自分もこういう会話をできるようにがんばろ。
339NAME IS NULL:2005/12/24(土) 01:04:18 ID:???
数十万件扱ってるのに384Mは無いよなぁ

サーバクラスのハード使った方がいい気がする。
MEM1〜2G、Xeon3Gとか

CPUがボトルネックになっているんなら、CPUキャッシュの量は効きまくるぞ
340333:2005/12/24(土) 01:10:50 ID:???
>>336
システム開発するような部署ならそうでしょうが、
オレ普通の事務員だからね。
会社がまとめて購入したノートパソコンに何もできないでしょ。
使ってるアプリから出てくる集計データが使いにくいから、
Mysqlでデータを再集計させてます。
341NAME IS NULL:2005/12/24(土) 01:11:59 ID:???
>>340
同じノートパソコンを束ねてMySQLクラスターだ!!!
342333:2005/12/24(土) 01:25:47 ID:???
>>339
やっぱ、サーバーかなぁ、
知識まったくないけど。
ノートパソコンに勝手に何かするのも規則で禁止で、
自分のパソコンを職場に持ち込むのも禁止だから
現状打破はちょっと厳しいです。
PHPでページ表示に20秒以上かかっているので
ページ切り替えにちょびっと勇気いるんです。

>>341
それやったら怒られてクビか、
見込まれてシステム開発に異動だわ
343NAME IS NULL:2005/12/24(土) 01:34:35 ID:???
PHPってことなんで、毎回計算しないで変化しない過去分の結果は
保管しておいて、当月分だけ計算とかにすれば、一瞬じゃないのかな。
344333:2005/12/24(土) 02:00:05 ID:???
>>343
一月分の集計だとページ表示に3秒程度です。
>333のSQL文のMONTHをDAYOFMONTHにして一月集計すると0.5秒でした。
そのため、全体の集計だけだとその方法が計算に時間がかかりませんが、
商品や業者ごとに絞り込めるので保管するファイル数が多くなりそうです。

一度友達のパソコン借りて速度比較してみます。 <勝手にインスコして

345NAME IS NULL:2005/12/24(土) 03:14:32 ID:v51il4UF
外部サーバのMySQLにクエリを発行した場合、
結果セット内のデータはクエリを発行した時点ですべて転送されるのでしょうか?
それともfetchするまでは転送されないのでしょうか?
346NAME IS NULL:2005/12/24(土) 04:01:59 ID:???
>>345
API的には両方の方式が可能。
347NAME IS NULL:2005/12/24(土) 08:31:29 ID:???
>>344
そうそう、index付けた日付にMONTHとかの関数かますと
indexが効が無効になるんだよねぇ。
DAYOFMONTHだと効いたのかな。
348333:2005/12/24(土) 09:56:53 ID:???
>>347
マジで?MONTHだとインデックス効かないの?

説明が足りなかったんだけど、>333のSQL文でyearを絞っていないので
22万件すべてを集計しています。
そのため、インデックスよりSUM関数の実行速度が問題だと思っております。
>>339が言うように、この場合CPU速度がボトルネックになるかもしれません。
349NAME IS NULL:2005/12/24(土) 14:50:00 ID:???
ORDER BYの昇順で
アーとかイーがアラとかイラより後にくるのを

アア
アー
アラ

みたいはできますか?4.1.7です。
350NAME IS NULL:2005/12/24(土) 16:44:47 ID:???
>>333
SELECT sum(price), MONTH(date) FROM data group by 2;
としても変わらないかな。

monthカラムを追加して、インデックスを張れば速くなるかも。
alter table data add month tinyint, add index(month);
update data set month=month(date);
select sum(price), month from data group by month;

351333:2005/12/24(土) 21:31:46 ID:???
>>347>>350
正解!!
言われた通りmonthカラム追加すると
0.20秒でSQL完了しますた。
SUM()よりMONTH()がボトルネックでした。

PHPでは客数や個数のためSQL文を4回繰り返してますが、
20秒以上かかったのが3秒でページ表示できました。
マジありがとうございました。
他の人もアドバイスありがとうございました。
352NAME IS NULL:2005/12/25(日) 11:57:26 ID:JGW5cPL9
0000 から 9999 までの整数しか入らないカラムの場合、
int(4) とするより smallint(4) のほうがデータベース容量的?にはいいですよね

癖というか基本というか int型で作成してしまうときが多いとかありますか?
またそのとき、intで作成したフィールドをsmallintに変換することってできますか?
353352:2005/12/25(日) 13:49:31 ID:???
alter table テーブル名 modify column カラム名 smallint(4);
で解決できました。
探すのにかなり時間かかった・・・
354352:2005/12/25(日) 13:54:16 ID:???
すみません、自己解決しました。

数値型の説明をよく読んでいませんでした。
int(4) とか smallint(4) なんて、まるでお馬鹿な質問でした。

私は間抜けな初心者のようです。
355NAME IS NULL:2005/12/25(日) 16:25:50 ID:???
すいません教えてください
最近PHP+MySQLを使いはじめた者です

$sql = "INSERT INTO test_tbl (no, id, name) VALUES ('', '123', 'tomato')";
$res = mysql_query($sql,$db);

上のようにPHPで実行しても新規レコードが作成されません
エラーはでません $res には true が返ってきません
MySQLには接続してます
test_tbl も作成済みです
no は主キーでオートインクリメントです
他のSELECT文などは正常に実行されます
なにか見落としてるんでしょうか?
356NAME IS NULL:2005/12/25(日) 18:12:14 ID:???
>>355
>他のSELECT文などは正常に実行されます
ということなので前処理のコードは問題ないとして

>エラーはでません $res には true が返ってきません
FALSEならエラーは出てるだろ。
mysql_errno()とmysql_error()使って原因を探ってみ。
357355:2005/12/25(日) 19:24:09 ID:???
>>356
エラーが出ない=エラーがない と思い込んでました
恥ずかしくて原因は書けませんが mysql_error() 一発で解決しました!
これでやっと前に進めます
解決の糸口を見つけられなかっただけに深く深く感謝します
ありがとうございました!
358where notができない。。:2005/12/25(日) 23:36:05 ID:???
CREATE TABLE test(
aa CHAR(10)
);

+--------+
| aa |
+--------+
| 埼京線 |
| 埼京線 |
| 山手線 |
+--------+

上記のテーブルから「SELECT 〜 WHERE NOT」を使用して、
「埼京線」以外を表示させようとしたのですが、

mysql> select aa from test
-> where not aa = "埼京線";
Empty set (0.04 sec)

という結果になり、「山手線」がでてきません。。
なぜなんでしょう???

ちなみに、WinXPにMySQLver4.0.26をいれて
Client characterset: sjis
Server characterset: sjis
と文字コードを設定してあります。
359358:2005/12/25(日) 23:58:41 ID:???
恐縮ですが自己解決いたしました。
すみませんでした!!
360NAME IS NULL:2005/12/26(月) 11:08:08 ID:???
解決したら原因はちゃんと書けって!
無駄にレス消費するなよ!
361NAME IS NULL:2005/12/26(月) 18:46:57 ID:???
>>358-360

質問してすぐに自己解決ってネタあったねそういえばw
362352:2005/12/26(月) 19:49:32 ID:???
ものスゴイ嫌がらせ思いついた
1 :以下、名無しにかわりましてVIPがお送りします :2005/04/25(月) 04:44:27 ID:cxwJSDGr0
例えばさ、ID非表示の板で質問したやつがいるとするじゃん?
で、その答えがくる前に名前欄にそいつのレス番入れて
「すみません、自己解決しました」って入れるんだよ
マジコレはハマるwwwwwww
363358:2005/12/26(月) 20:13:18 ID:???
実はずっと文字コードの問題かなぁって思ってたんですが、
-> where not aa = "埼京線";

-> where not (aa = "埼京線");
のようにカッコでくくってあげないと論理が反転しないようです。
-> where aa <> "埼京線";
でも同じ結果になるんですが、ちょっとwhere not 〜 でやってみたくて。。
364NAME IS NULL:2005/12/26(月) 22:46:52 ID:???
質問です。
クライアントもDBもSJISに設定して使用しているのですが、
半角"・"をinsert等で使用とすると"・"以降の文字が入ってくれません。
INSERT INTO tbl_test (hoge) VALUES("12345・67890") とすると
hogeには"12345"までしか入っていませんでした。

PHPとあわせて使っているので、mysql_errno()をみてみましたがエラーは返らず、
SQL文をいろいろなエスケープ関数を通してみましたが解決できませんでした。
SJISの"・"は特殊な文字コードで、変わったエスケープをさせないといけないのでしょうか

MySQLのバージョンは4.1.7で
値を入れる前にSET NAMES SJIS
をやっております。
365NAME IS NULL:2005/12/27(火) 00:29:24 ID:???
>>364
MySQLが認識するコード以外をインサートすると、そこからバッサリ
切れるのは4.1シリーズの仕様だけど、その文字コードは何?

0xA0と0xA5がそれっぽい文字だが、0xA0ならJIS X 0201から外れて
いるからそうなるかもしれん。
運がよければ、4.1.12以降のcp932対応で新規にカバーした範囲に
入っているかもしれないが。
366NAME IS NULL:2005/12/27(火) 01:01:37 ID:???
なるほど、そうですか
ちょっと文字コードが何なのか見てみることにします。
だめだったらあきらめるしかないな。
367366:2005/12/27(火) 01:07:21 ID:???
失礼↑>>364です
368NAME IS NULL:2005/12/27(火) 14:01:14 ID:oYwRzA17
カラムが5つなのにPKが4つある表というのは
PKが多すぎて設計がおかしいのでしょうか?
369NAME IS NULL:2005/12/27(火) 14:11:23 ID:???
MySQLの質問じゃないですね。
370NAME IS NULL:2005/12/27(火) 14:20:53 ID:???
>>368
よっぽど複雑な関係を持つデータでない限り、その可能性が高いですね。
4つあるPKのうち、タプル間で重複した組み合わせになるものはないですか?例を挙げると、

TableA
ColumnA ColumnB ColumnC ColumnD, ColumnE
1, 2, 3, 4, a
5, 7, 10, 2, g
5, 2, 8, 4, e

これだと、ColumnBとColumnDの組み合わせが重複しているタプルがあるので、
ColumnBとColumnDからなる別テーブルを作って、ColumnBとColumnDは
別テーブルとの関係としてあらわすことができます。
そのとき、テーブル間の新たな関係を表すために、ColumnFを新たに作ります
Table B
ColumnF, ColumnB, ColumnD
1, 2, 4
2, 7, 2

TableAは以下のように変更されます
TableA
ColumnA, ColumnC, ColumnE, ColumnF
1, 3, a, 1
5, 10, g, 2
5, 8, e, 1
371NAME IS NULL:2005/12/27(火) 14:33:38 ID:oYwRzA17
大変丁寧な説明ありがとうございました.
非常に参考になりました
372365:2005/12/27(火) 21:53:58 ID:???
>>366
確認したけど、やはり0xA0は切れる。
4.1.3はNG、4.1.16はOK。
cp932に対応した4.1.12以降なら問題無いと思われる。
373NAME IS NULL:2005/12/28(水) 00:23:26 ID:???
ソース有るんだから、通るように弄っちゃえば? もちろん自己責任で。
オラクルならゴネてみるか、諦めるしか無いけどな。
374NAME IS NULL:2005/12/28(水) 00:35:31 ID:???
OS Windows2000
PHP5.1.1
Apache2
MySQL5.0

こんな感じで開発してます。PHPやらMySQLは初めてです。
ちなみに、顧客の要望により ソースは「EUC」で、
HTML入出力は「SJIS」で、DBは「SJIS」でという状態です。

mysqlのコマンドラインからはINSERT文が正常に実行できます。
でも、PHPからSQL文を発行すると、エラーになります。
利用しているのは mysqli で、Client API version は4.1.7です。
エラーの内容が Data too long for column 'colname' at row 1 なので、
文字コードで何かしらトラブルが起きているなとは思うのですが、
原因がわかりません。(これは、MySqlをEUCで稼動させていたときに
コマンドラインでおきたからです。このときは set names sjis で
解決できましたが…)
文字列を mb_convert_encoding 関数を使ってSJISに強制変換
してみたりもしたのですが、だめでした。

正直お手上げなのですが、どなたか解決方法をご存知ないでしょうか?
375NAME IS NULL:2005/12/28(水) 09:37:57 ID:???
MySQLの時点で間違い。
オラクル案件が適当だな。

Solaris→w2k
Oracle→MySQL
にグレードダウンさせられてる気がする。

MySQLでやるなら、全部utfにして一切変換しない方が問題が無くていいよ。
コード変換遣るなら、文字化けを自己回避出来ないと厳しい。
376374:2005/12/28(水) 10:22:47 ID:???
>>375
ああ…やっぱり…
いや、分かってるんですよ。Oracle使えとか、せめて
MSDE使えよとか、文字コードは統一すんのが常識だろ、とか。
でも、開発者の常識を顧客に押し付けるのはちょっと避けたいので。

で、なんとか自己解決しました。
こんなことする人少ないんだろうけど、念のためね。

クエリを発行する前に、必ずクライアント側の文字コードを
サーバー側に教えてあげること。
私は mysqli を使っているのでクエリ実行の前に必ず次の
構文を実行します。(EUC使ってるからね!のおまじない)

mysqli_query($db, "SET NAMES UJIS");

原因として推測できることとしては、以下の通り。
WebブラウザからSJISで入力し、念のため再出力したところ、
SJISで表示されますが、どうやらPHPを通したところでEUCに
変換されてしまうような感じです。
おかしなことに、PHPの変換関数(EUC->SJIS)を掛けても無駄なようで
このおまじないが必ず必要な模様。(mysqliドライバの問題か?)
INSERT,UPDATE,SELECT問わず必ずおまじないをいれましょう。
377NAME IS NULL:2005/12/28(水) 10:47:51 ID:???
show variables like 'char%';

378NAME IS NULL:2005/12/28(水) 10:50:35 ID:ehwFWZS/
>>376
いや、何かがおかしい。
もうちょっと探ってみたほうがよいかと・・・
379NAME IS NULL:2005/12/28(水) 11:55:21 ID:???
374さん、それは単にクライアント側の文字コードの設定が行われていなかっただけです。

MySQL5.0からStrict Modeが実装され、これまでINSERT時にTrancateが生じる場合に
Warningを出すのみであったのが、Errorを返すこともできるようになりました。

おそらく374さんはインストーラ付きのWindowsバイナリ配布版を使っているのだと推測しますが、
インストーラによって自動生成されたmy.iniにはこのStrict Modeを有効にする記述が追加されます。

# Set the SQL mode to strict
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

つまり、Data too long for column 'colname' at row 1 というエラーメッセージは、これまでのMySQL的な
解釈で言えば、Trancateが発生したということです。

以下の手順で再現可能です。(上記設定がmy.iniにあるものとする)

use test;
create table t1 (c1 char(1) charset sjis);
insert into t1 (c1) values ('12'); ←サイズ1のカラムに2文字入れるのでエラー
set names latin1;
insert into t1 (c1) values ('あ');  ←文字コードをlatin1としたのに日本語を入れたのでエラー
set names sjis;
insert into t1 (c1) values ('あ');  ←文字コードをsjisと設定したのでOK

PHPを使用されているということですが、latin1でコンパイルされたドライバを使用しているのでしょう。
その場合、MySQLに接続したら"SET NAMES XXX"が必要となるのは自然なことです。


380NAME IS NULL:2005/12/28(水) 16:15:54 ID:???
381364:2005/12/29(木) 00:40:22 ID:???
>>372
文字コードを確認してみたら0xA5でした。
で、もう少し試してみたところどうやら0xA0以降である、
半角カナが全部だめでした。

半角カナ全部なのでconfigureの設定が間違ったのか足りなかったのかだとは思っていましたが、
この状態でも同じconfigureで4.1.16にすれば大丈夫なのかな

とりあえず今は、半角カナがきたら全角カナに代えて入れるようにしてお茶を濁しています。
382365:2005/12/29(木) 01:38:17 ID:???
>>381
4.1.7は更にピンポイントバグが有るとは知らなんだ。
http://bugs.mysql.com/bug.php?id=6223
4.1.7だけINSERT/LOAD DATAで半角カナ全滅みたいよ。
383NAME IS NULL:2005/12/29(木) 01:50:47 ID:???
まじかよ・・・・・ウチも4.1.7だ
俺も迂闊だったがちとMysqlそのものに不安を覚える
384364:2005/12/29(木) 03:03:17 ID:???
マジですか・・・
4.1以降用の文字コード対応が中途半端だから思い切って4.0系にするか、4.1.16にするか
なんにせよ4.1.7は使い物にならないですね。
わざわざ調べていただいてありがとうございました。
385NAME IS NULL:2005/12/29(木) 11:51:16 ID:???
半角カナ全滅でも問題ないや。化ける元凶だし。
386NAME IS NULL:2005/12/29(木) 12:58:10 ID:???
俺も半角カナは使わないし、そういうデータは全角にして扱ってるが
データベースとして、文字コード上規定されている文字が正常に
且つ容易に扱えないことは致命的だと思う。コード変換機能が盛り込まれたなら、
その機能も"望ましい"形にまとまるようにならないとユーザには受け入れられない。
387NAME IS NULL:2005/12/29(木) 18:01:35 ID:???
つまり致命的になるくらいなら、sjisのサポートは辞めるべきだよな。
全部utfで終了。
388NAME IS NULL:2005/12/29(木) 18:31:23 ID:???
Vineのmysqlが早くutfになると良いなぁ
389NAME IS NULL:2005/12/29(木) 22:49:01 ID:???
ズバリ欠陥品じゃん 4.1.7
390NAME IS NULL:2005/12/29(木) 22:53:07 ID:???
自分で作れよ

漏れはbinaryにしてる
391NAME IS NULL:2005/12/29(木) 23:51:08 ID:6xIsf9cf
binaryにすると煩わしいことはなくなるの?
392NAME IS NULL:2005/12/30(金) 00:01:19 ID:???
コード変換機能自体無理が有るしなあ。過信し過ぎだよ。
日本語データ→UTF@MySQL→日本語データで間にUTFが挟まるから必ず失われるし。

sjisって指定したら、変換を無視して、sjisのまま格納して取り出すようにソースを弄ったほうがいいよ。
393NAME IS NULL:2005/12/30(金) 00:54:30 ID:???
>>392
最近ソース修正を熱心に勧めているみたいだけど、5.0.13
&4.1.15提供の --skip-character-set-client-handshake
じゃダメなの?
http://dev.mysql.com/doc/refman/5.0/en/news-5-0-13.html
http://dev.mysql.com/doc/refman/4.1/en/news-4-1-15.html
394NAME IS NULL:2005/12/30(金) 04:30:07 ID:???
オラクルと違ってオープンソースだし弄れる物は弄った方が速いでしょ。
どこかの業者に金払って解決でもいいけどさ。
395NAME IS NULL:2005/12/30(金) 05:21:37 ID:???
なんか4.1.7を必死に叩いている香具師がいるみたいだが、
既にver4.1系は4.1.16が出ているんだが・・・・。
396NAME IS NULL:2005/12/30(金) 09:27:01 ID:???
>>392
サーバとクライアントが同じcharsetならUTFは挟まらないよ
397NAME IS NULL:2005/12/30(金) 09:50:55 ID:b/H/qjrZ
やぱり癌はJavaだろ?
398NAME IS NULL:2005/12/30(金) 10:05:07 ID:???
>>397
いや、別にJavaはどうでもいい。使ってないもんで。
399NAME IS NULL:2005/12/30(金) 10:49:53 ID:???
格納する時にutfに変換されて、取り出す時にutfから変換されてるよ。
utfにマップされてない文字データを突っ込めば壊れるのが証。

Javaはutf前提だからなあ。MySQLとはutf同士で相性がいいけど。
Javaにもutfに変換させずに扱えばいいけど、苦労する。

latin1でコンパイルされてるphpとかが癌だね。馬鹿除けでわざとかも知れねーけど。
400NAME IS NULL:2005/12/30(金) 12:35:22 ID:???
>>399
PHP5のSQLiteがUTF-8じゃなくてlatinでコンパイルだとか
結局あいつら自分ところで別に困ってないからUnicodeとかに
程度にも移行するつもりが全然ないんだよ。
(「困ってなければ変えない」は正しい選択ではあるが)
401NAME IS NULL:2005/12/30(金) 13:41:27 ID:???
>>394
オプションのスイッチを切り替えた方が早いし安全。

>>399
> 格納する時にutfに変換されて、
本当ですか?CREATE xxxで明示的に指定したコード、
或いはシステム変数character_set_databaseで暗黙的
に設定されたコードでしょ。
402NAME IS NULL:2005/12/31(土) 11:13:17 ID:???
PRIMARY キーを元によく検索をするのですが、このような場合は
INDEXつけたほうがいいのでしょうか。
403NAME IS NULL:2005/12/31(土) 11:24:46 ID:???
>>402
試してみればよくわかる。
404NAME IS NULL:2005/12/31(土) 11:30:23 ID:???
おれもインデックスつけるのめんどくせっと思ってつけてなかったけど、
つけてみたら爆速になった
405NAME IS NULL:2005/12/31(土) 11:47:17 ID:???
>>404

>>404 あたりまえ






















馬鹿すぎる。
406NAME IS NULL:2005/12/31(土) 11:51:49 ID:???
>>402
SHOW INDEX FROM DB名.TABLE名 でKey_nameがPRIMARYって
行を見れば、その質問は意味が無い事が判ると思うけど。
もうちっと説明すると、MySQLではKEYとINDEXは同義語で、
PRIMARY KEYはPRIMARY INDEXと言い換えても同じ。
http://dev.mysql.com/doc/refman/4.1/ja/create-table.html
407NAME IS NULL:2005/12/31(土) 12:01:00 ID:???
PRIMARYって既にINDEX?
では>>404さんがいっていた
INDEXつけたら爆速ってどういうこと?
408NAME IS NULL:2005/12/31(土) 12:11:47 ID:???
>>407
MySQLのマニュアルやコマンドの結果より>>404の書き込み
が納得できるというなら、思った通りの事をやれば?
409NAME IS NULL:2005/12/31(土) 12:21:58 ID:???
KEY は、通常 INDEX のシノニム。 バージョン 4.1 以降、
キー属性 PRIMARY KEY は単に KEY として指定することもできる。
この機能は他のデータベースとの互換性を考慮して実装された。

だって!爆速って どういうことだ?
410NAME IS NULL:2005/12/31(土) 14:58:53 ID:???
普通PRIMARY KEY にINDEXなんてつけるのか?
411NAME IS NULL:2005/12/31(土) 15:19:15 ID:???
>>406
>"キー属性 PRIMARY KEY は単に KEY として指定することもできる。"
これは PRIMARY KEY = KEY であって
PRIMARY INDEX とすることは出来ないんじゃなかろうか。
そして、だからこそ "KEY は、**通常** INDEX のシノニム。" と記述されているのでは。
create_definition の PRIMARY KEY 指定は
PRIMARY [KEY|INDEX] じゃなくて PRIMARY KEY 固定なのが気になるな

まぁ 4.0 を入れてる俺は確認めんどいからやんないけど。
412NAME IS NULL:2005/12/31(土) 16:09:57 ID:???
投稿日付のフィールドを作ろうとしています。どんな形がいいか考えています。

調べたところこんなサンプルがありました。

- XOOPSは、 int 10 unix timeの形
- OpenPNEは、 datetime 0000-00-00 00:00:00

このメリット、デメリットってなんでしょうか?
413NAME IS NULL:2005/12/31(土) 16:26:48 ID:???
>>411
それがphpMyAdminだとできるんですよ!
414NAME IS NULL:2005/12/31(土) 18:54:46 ID:KWInO9ZE
レコード数の取得でPEAR_DBで
$sql = 'SHOW COUNT(*) FROM XXX';
$res = $db->query($sql);
$rocordcnt = $res->fetchRow();
したら
Fatal error: Call to undefined method DB_Error::fetchRow()
になりました。
$sql = 'SHOW * FROM XXX';だったら$rocordcntに最初にヒットしレコードが
配列で入るのですが、count(*) を得るにはどうしたらよいですか?
他の方法のありますが、勉強のために count(*) の結果の取得を教えて下さい。
415NAME IS NULL:2005/12/31(土) 20:48:42 ID:???
>413
416NAME IS NULL:2005/12/31(土) 22:29:12 ID:???
>414
そもそも SQL 自体がどっちもおかしいぞ。
エラー内容と原因くらい自分で調べろ。
ttp://pear.php.net/manual/ja/package.database.db.db-error.php
417NAME IS NULL:2005/12/31(土) 23:39:36 ID:???
>>412
DATETIME の方が良い、わざわざunixtime突っ込むのは馬鹿
418NAME IS NULL:2006/01/01(日) 00:47:12 ID:trwHeoMJ
>>414
MySQLにはSHOW文があるのか?
419NAME IS NULL:2006/01/01(日) 02:47:59 ID:???
>>417
DATETIMEってどこの時間ってどうやってわかるの?
それがGMTなのか?JSTなのか?って
420NAME IS NULL:2006/01/01(日) 02:51:24 ID:???
>>418
あるこたある
421NAME IS NULL:2006/01/01(日) 13:51:40 ID:???
>>418
ふっ、しょーもない質問だな。
422 【中吉】 【1925円】 :2006/01/01(日) 18:13:33 ID:???
↑今後のMySQLの動向
423418:2006/01/01(日) 18:31:31 ID:trwHeoMJ
show tables
とかではなくて、>>414
$sql = 'SHOW COUNT(*) FROM XXX';
なんだけど。

MySQLのSQLにはShowステートメントがあるのか?
424NAME IS NULL:2006/01/02(月) 12:13:40 ID:???

          ,へ                      \     |    /     ,ハ百
         \ \                   \   |  /      ム.只
         /へ/)                    ./ ̄\
    ∧_∧∩  )(            ‐ ‐ ‐−──( ゚ ∀ ゚ )──−‐‐ =夫=_
    .(*・∀・)7   (  !      ______ノ'""ゝ. \_/       フi三iヽ
   ゚ .冂つム゚_」   Y       (_   ____)    ':;  |  \      '─'
  ゜ ム_」」」」ゝ   人    ___) (__∠__   \|    \
   (,_,,ノ `ー´   (  ';   (__________)   ~':;,,.     \
   ,' . / .'     ヽ (_        ,,;::'~            ~':::;;,,,_
  / / '        \ヽ.  __,,,,-‐''"~     ∧_∧   ( ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄)
   '0      __,,..l⊂Z_).⊃!         ( ´∀` )    ̄ ̄ ̄ ̄) (二二二二二......  0
  0Π0- ‐‐'''""   |;;:.:. ヮ . .:::;|        ,べヽy〃へ  ( ̄ ̄ ̄             0Π0
  HΠH       ∩.∧_∧∩    ∧∧/  :| 'ツ' |  ヽ  ̄λ_λ ̄ ̄ ̄ ̄ ∧∧ ̄ HΠH
 EEE      匸(´∀`;)フ   (,゚Д゚,). o |=宗=! o |  ( `ー´) ヮ    (゚ー゚*) EEE
  |l|lil|ili|        瓜ゞッ=Lく   ,くリ=ッ=[ゝ.__」「「「「L_.」  厂〉=ッ冂づ ヌ Oヮ⊂[]ヨ  |l|lil|ili|
,,.<卅卅ゝ.__.,.,.,___.__.,.,.,(__)ヾZ)'_.,.,_じ(ノルハ)Jつ」」」」」⊂ソ.,_.,_.(入ム]つつ.__,L!__. (_」つ.,<卅卅ゝ,,.,,

〜ラッキーレス〜
2006年新年あけましておめでとうございます!
さて、このレスを見た人は、コピペでも良いので26分以内に3つ以上のスレに貼り付けてください
そうすれば今年中に、体の悪いところは全て治るわ好きな人に告白されるわ出世するわで大変なことです!!
425NAME IS NULL:2006/01/02(月) 18:36:30 ID:???
恐縮ですが、
ローカルなWinXpにMysql4.0.26を入れて

Client characterset: ujis
Server characterset: ujis

というように文字コードを全てujisで統一してます。

この場合、コマンドプロンプトでDBに格納したデータを
select文で表示させると日本語が文字化けしてしまうのですが、
これを解消する方法ってありませんでしょうか?
426NAME IS NULL:2006/01/02(月) 20:22:48 ID:???
コマンドプロンプトはsjisでないと化けるんでないか?
427NAME IS NULL:2006/01/02(月) 20:54:29 ID:???
winのコマンドプロンプトは
SJISとUTF-8しか使えないんでなかったかな?
428NAME IS NULL:2006/01/02(月) 21:22:03 ID:OxQAW/OR
>>425
>>212から>>229あたりを参照
429NAME IS NULL:2006/01/02(月) 21:52:04 ID:???
支援

>>212-229
430NAME IS NULL:2006/01/02(月) 22:17:11 ID:???
http://www.mysql.gr.jp/mysqlml/mysql/msg/12071
の階層化をやろうと思っているのですが

http://dev.mysql.com/tech-resources/articles/hierarchical-data-4.png
の「TELEVISION」と「PORTABLE ELECTRONICS」の順番を入れ替えるときは
どのようにしたらいいのですか?
431NAME IS NULL:2006/01/03(火) 12:52:00 ID:???
>>430

「TELEVISION」のidと、その子アイテムのidを
「PORTABLE ELECTRONICS」のidより大きくする。
432NAME IS NULL:2006/01/03(火) 18:31:43 ID:???
MySQLCC 0.94betaなんですけど、1000件以上あるテーブルの1000件目以降見たい時って
どうすんの?初歩的な質問でスマソですが。
433NAME IS NULL:2006/01/04(水) 10:29:49 ID:???
今更ながら・・・・

datetimeは64bit
unixtimeは32bit

datetimeはnow()とかで適当に放り込める
unixtimeはアプリ側で変換する必要がある


phpとかでプリプロセッサ使ってるならunixtimeで十分
2038年までダケドナー
434NAME IS NULL:2006/01/04(水) 11:04:02 ID:???
簡単な管理DBを作っているんですけど、教えてください。
作業テーブルがあり、それにstatusカラムがあります。
レコードの状態を示しており、今は、enum('作業中', '終了')で
設定しています。こんな場合はテキスト、よりも整数でやったほうが
データが少なくてすむかなぁと思って悩んでいます。
でも直感的にわかるのはテキストだし。どっちがベターでしょうか。
435NAME IS NULL:2006/01/04(水) 18:02:31 ID:???
MySQLのユーザって通常はGRANT文を使うと思うのですが、
MySQLデータベースのUserに直接追加する方法でもOKでしょうか?
436NAME IS NULL:2006/01/04(水) 18:59:09 ID:Zlms4U+3
PHPでログインするスクリプトでMySQLを利用しようと思い勉強中ですが
以下のような感じのナイスなのはないでしょうか?
$sql の部分がまだ理解不十分ですが、SQL文で認証(比較)できればと



session_start();
session_register("sUID");

$form_id = $HTTP_POST_VARS["form_id"];
$form_pass = $HTTP_POST_VARS["form_pass"];

if ( !$_SESSION["sUID"] ) {
$sql = "SELECT db_id, db_pass FROM login WHERE db_id = $form_id";
// db_pass も $form_pass と比較させたい
$rs = mysql_db_query($db,$sql);
// マッチしない場合 false 判定をさせたい
if ( !$rs ) { print "認証失敗"; exit; }
$sUID = $rs;
}
437436:2006/01/04(水) 19:59:35 ID:Zlms4U+3
よくわかりませんが以下ので動作はするようになりました。
どう見ても変です。>>440さん本当にありがとうございました。


if ( !$_SESSION["sUID"] ) {
$sql = "SELECT db_name FROM login WHERE db_id = $form_id" AND db_pass = $form_pass;
$rs = mysql_db_query($db,$sql);
if ( !$rs ) { print "認証失敗"; exit; }
$row = mysql_fetch_array($rs);
if ( !$row ) { print "認証失敗"; exit; }
$sUID = $rs;
}
print "$row[0] さん";


もっといい方法とかありますでしょうか?
438NAME IS NULL:2006/01/04(水) 20:02:13 ID:???
>>434
> こんな場合はテキスト、よりも整数でやったほうが
> データが少なくてすむかなぁと思って悩んでいます。

そのために enum があるんでしょ、と私は言いたい。

>>435
良い。
が、FLUSH PRIVILEGES を忘れるな。
http://dev.mysql.com/doc/refman/4.1/ja/privilege-changes.html
439NAME IS NULL:2006/01/04(水) 21:19:42 ID:???
>>438
もしかしてenumは参照ですか!?
440NAME IS NULL:2006/01/04(水) 23:40:57 ID:???
>>439
「enumは参照」っていう意味が分からないんだけど、ちょっと説明してくれる?
ほかの DBでの話し?
441NAME IS NULL:2006/01/05(木) 11:19:23 ID:???
>>436
つか、PHPのバージョンはいくつなんだ?
$HTTP_POST_VARSは非推奨だろ。
442436:2006/01/05(木) 16:51:38 ID:???
スレ違いすんまそん、PHP Version 4.4.1 です。(MySQL 5.0.16)
下位互換性のために$HTTP_POST_VARSで記述されてるサイトが多かったのですか。
これからは$_POSTを使用します。
443NAME IS NULL:2006/01/05(木) 16:52:43 ID:lInURVFv
掲示板風なものを作ろうと思ってるんだけど、
「プロバイダで一括削除」等の管理をしやすくするためには、
IPアドレスはどういう形式で格納したら効率的ですか?

'192.168.0.1'という文字列で格納するのがいいのか、
3232235521と数値にして格納するのがいいのか、
それともこういう用途に適したいい方法があるのか
444NAME IS NULL:2006/01/05(木) 17:25:33 ID:???
逆引きした結果も保存しとけば?
445NAME IS NULL:2006/01/05(木) 18:15:32 ID:???
>>443
PostgreSQLみたいなネットワークアドレス型がある訳ではないので
192168000001のようにして数値で扱うのがいいんじゃない。
C0A80001とか3232235521だと視覚的にも判りづらいから。

>>444
逆引きできるIPアドレスとも限らんので、
その場合、同じ処理が掛けられないと思う。
446NAME IS NULL:2006/01/05(木) 21:01:04 ID:???
>>445
プロバイダのネットアドレスをxxx.xxx.xxx.xxx/24 とか与えると消すようにしたいのだろうから、
その方法だとネットマスクの処理に手間がかかる。
フツーの整数にした方がビット演算が効くからそっちの方がいいでしょ。


# 視覚的にってんなら192.168.0.1とかは2進数の方が判りやすいぞ。
447NAME IS NULL:2006/01/06(金) 04:25:59 ID:???
IPアドレスの格納は整数にして、INET_ATON 等で相互変換させる。
448NAME IS NULL:2006/01/06(金) 13:45:57 ID:1Cw6srvg
フィールド名に number を使うのは禁止?
これを使うとなんかうまく動作しないのよ、でも調べたがみつかんねー
449NAME IS NULL:2006/01/06(金) 13:57:15 ID:???
SQLかなんかの予約語になるんじゃないかい
450NAME IS NULL:2006/01/06(金) 14:34:28 ID:???
>>449
NUMERICは予約されているが、
NUMBERはないみたいだが。
http://dev.mysql.com/doc/refman/4.1/ja/reserved-words.html
451NAME IS NULL:2006/01/06(金) 19:58:53 ID:???
全然MySQLと関係なくなってるが、

逆引きチェックの方が実用的だと思うけどなあ。
アドレスなんてコロコロ変わるよ。
ocnとかdionとか膨大だし。
そんなわけで逆引きアドレス格納に1票。
452NAME IS NULL:2006/01/07(土) 01:15:22 ID:???
PHPのadodbで使えるO/Rマッパーってないですかね
453NAME IS NULL:2006/01/09(月) 05:38:00 ID:t5f/1qSc
MySQLを入れ直したら、GNOME端末でコマンドヒストリが無くなりました。
以前のように上キーで履歴を使え様にするにはどうしたらよいですか?
454NAME IS NULL:2006/01/09(月) 12:39:27 ID:???
入れ直したってのはどこかからバイナリを持ってきたのか、それともソースをコンパイルしたのか。
ソースからならたぶんreadlineを使っていないせいじゃないかな。
455NAME IS NULL:2006/01/09(月) 15:59:17 ID:???
configureのreadlineってそういう意味だったのか
勉強になった
456NAME IS NULL:2006/01/09(月) 17:29:36 ID:???
設定情報のようなめったに変わらないものと
ステータスのような割と頻繁に変わるものを
同じテーブルに持っても 問題ないでしょうか
457NAME IS NULL:2006/01/09(月) 22:40:21 ID:???
データベースのフィールドを運用途中で追加することに問題ってあるのでしょうか?
458NAME IS NULL:2006/01/09(月) 23:07:15 ID:???
>>457
後から必要になったのなら仕方あるまい。
459NAME IS NULL:2006/01/09(月) 23:23:21 ID:???
>>457
問題になるときもあれば、ならないときもある。
例えば
SELECT * FROM `table`
とか
INSERT INTO `table` VALUES (1, 2)
とかしてて
カラムの順番や数に依存するときは問題あるでしょ。

460NAME IS NULL:2006/01/10(火) 01:13:29 ID:GkVtn9lh
Perl-DBIを使っているということは、old_passwordを使っている
ということですか?
461NAME IS NULL:2006/01/10(火) 10:31:57 ID:???
SELECT * FROM table WHERE 文字列strが4桁の数字;

このWHERE節ってどう書けばいいの?
462NAME IS NULL:2006/01/10(火) 13:10:21 ID:???
463NAME IS NULL:2006/01/10(火) 20:49:44 ID:???
独習でMySQLの使用方法を勉強中で詰まってしまっています。
使用バージョンはVer.4.1.16です。
長文になりますが、判る方がいたら、教えてください。

表1のようなテーブルを扱うとします。
表2のようにtype毎の合計を求めることは式2のようなSELECT文で出来ています。

  (表1) 例    (表2) type毎の合計
  +----+-----+  +----+----------+
  | type| value|  | type| SUM(value)|
  +----+-----+  +----+----------+
  |  A |  100|  |  A |      200|
  |  B |  500|  |  B |      500|
  |  A |  100|  |  C |      600|
  |  C |  300|  +----+----------+
  |  C |  300|
  +----+-----+

  (式1) SELECT * FROM table0 ;
  (式2) SELECT type,SUM(value) FROM table0 GROUP BY type ;

教えていただきたいのは、表3にあるように、各type毎の合計を求めた後で、
その結果の値同士を計算する方法です。
GROUP修飾で'A-B'というtypeを作成することは可能なのでしょうか?
どのような式を組めばよいのか、教えてください。

また、表4にあるような各type毎の合計を求める時に、
全体の中の比率(%)を表示させる方法も、式の組み方を教えてください。
GROUP修飾でtype毎に分類してしまっている状態で
全体の合計値を求めることは出来るのでしょうか?

  (表3) Aの合計 - Bの合計 (表4) 各typeの全体に占める割合
  +----+----------+    +----+----------+-----+
  | type| SUM(value)|    | type| SUM(value)|  ratio|
  +----+----------+    +----+----------+-----+
  |   A|      200|    |  A |      200|   15.4|
  |   B|      500|    |  B |      500|   38.5|
  | A-B|     -300|    |  C |      600|   46.2|
  +----+----------+    +----+----------+-----+

どちらもよくありそうに思うのですが、例示も見つからず困っています。
よろしくお願いします。
464NAME IS NULL:2006/01/10(火) 21:07:57 ID:???
一旦、テンポラリに出して、その後に計算したら?だめ?
似たような(か、どうか知らんけど)例で平均値や偏差値を出して云々というのをテンポラリで出した後算出している例を
MySQLで学ぶSQL実践のツボって本で見てたんで言ってるんだけど。

かくいう私も勉強中のものなんで一発でそういうの出せたら良いなとは思うけど。
465NAME IS NULL:2006/01/10(火) 22:09:44 ID:???
>>463
発想が Excel的だな。

SQL(リレーショナルデータベール) と Excel(スプレッドシート) とは違うものだということを
まず理解すべし。

SQLでの SELECT は、大まかに言って、

1. FROM (テーブルの限定)
2. WHERE (行の限定)
3. GROUP BY (行の統合)
4. HAVING (行のさらなる限定)
5. SELECT (列の限定・拡大)
6. ORDER BY (行の順序付け)

の順に処理される(ちょっと日本語が曖昧で申し訳ないが)。

つまり、「行」というのは、1. でテーブルが限定された後は、
減ることはあっても増えることはない。
「列」なら 5. で、(その行で取得・計算できる情報に限り)増やすことが出来る。

君の言う「A, B を計算後に、A - B の行を増やしたい」というのは、
「3. が終わってから、まったく別の行を増やしたい」と言っているので、SQLで普通にやるのは無理。
アプリ側での対処が普通だし、そのほうが作りやすい。

また、「全体の集計値に対する割合」を知りたいというのも、その行で計算できる情報では無いので、
1つの SQLでは無理。2つの SQLに分け、変数でも使って

select @total := sum(value) from table0;
select type,sum(value),sum(value) / @total from table0 group by type ;

とすべし。
466463:2006/01/10(火) 23:07:18 ID:???
>>464
CREATE TEMPORARY TABLE を使用するんですね。
GROUP BYの作業を終えた時点で一呼吸おけるというのは、
ありがたいです。

ただ、テンポラリのテーブルを作成しても、
1行目から2行目の値を引くという作業や
各行を全体の合計値で割るという作業が
とても泥臭くなりそうでまいってしまいます。
平均値や偏差値ならば専用の関数で簡単に計算できそうですが。


>>465
まさにEXCELなら簡単にできるのにと思っていました。
クライアント側としてMySQLのコマンドラインツールを
使用しているので、データベースとしての機能と
表作成ツールとしての機能を混同していたようです。

示唆いただいたユーザ変数を駆使すれば
無理に表作成ツールとして使うことも出来るようですが、
いずれPerlやC言語からの使い方も勉強する予定なので、
結果同士の計算や各項目の割合を求める方法は、
その際にでも考えてみたいと思います。

ありがとうございました。
467NAME IS NULL:2006/01/10(火) 23:39:51 ID:???
>466
そもそも複数の行同士での演算が必要って時点で、
テーブルの設計が間違ってる気がする。
正規化とか勉強するといいのでは。
468NAME IS NULL:2006/01/11(水) 00:28:51 ID:???
>>461
4桁の数字が 1000〜9999 という意味なら、
SELECT * FROM table WHERE str BETWEEN 1000 AND 9999;
469NAME IS NULL:2006/01/11(水) 11:11:53 ID:???
>>461
動作は未確認だが
SELECT * FROM table WHERE str REGEXP '^.{4}$'
でどうか。
470461:2006/01/11(水) 11:29:51 ID:???
>>462
ありがとう
正規表現が使えるのは今日初めて知りました

>>468-469もありがとう
471NAME IS NULL:2006/01/11(水) 11:50:30 ID:???
> SELECT * FROM unko;
だと問題ないけれども
> SELECT * FROM unko INTO OUTFILE '/tmp/unko.out';
だと
ERROR 1045: Access denied for user: 'tinko@localhost' (Using password: YES)
とエラーになる。
ユーザ権限の種類で、mysqlの中から外のファイルを
いじれる権利みたいなのってあるんだっけ?
472NAME IS NULL:2006/01/11(水) 12:01:59 ID:???
>>471
1045: Access denied
でぐぐると「これはパスワードが間違っているときに出るエラーです。」
とでてくるのだが。
473471:2006/01/11(水) 12:05:50 ID:???
>>472
ありがとう
マニュアルをよく読んだらユーザ権限の中に
読みどおりファイル権限というのがあったよ
userテーブルをいじって対処できました
こういうときばっかりはグーグルより2chだね
474NAME IS NULL:2006/01/11(水) 18:42:20 ID:???
Mysql & PHPで不特定多数ユーザー向けのWEBシステムを
構築しようと思っています。

PHPを介してDBデータへ接続させる際に、
MySQLユーザーアカウントを付与しますが、
このアカウントは1つだけでも問題ないのでしょうか?

それとも、
同時にアクセスしてきたユーザーのことを考えて、
予備のアカウントを複数作成するべきなんでしょうか?

ちなみに、
ユーザーはselectを用いた閲覧専用のクエリしか
送らないようになってます。
475NAME IS NULL:2006/01/11(水) 19:34:13 ID:???
ダイレクト接続ではなく、要はPHPが接続するに過ぎないんだから1つでしょ
476NAME IS NULL:2006/01/11(水) 22:39:10 ID:fwqbb4ss
結構変な質問だと思うけど、質問させていただきます。
concatをつかって、ある行を仮想的に作り出す。
(例えばidとtitleを’_’で仕切って’id_title’など)
その仮想的に作り出したフィールドをもとに、joinできないものだろうか??
field名をas〜などとしても無理だった。
もしご存知の方がいらしたら。ぜひ!!
477NAME IS NULL:2006/01/11(水) 22:42:50 ID:???
>>476
あんたが何言ってんのかわかんないけど、

select * from A left join B on concat_ws('_', A.id, A.title) = concat_ws('_', B.id, B.title);

とか、そういうこと?
478NAME IS NULL:2006/01/11(水) 23:29:50 ID:fwqbb4ss
>>477
まあだいたいそうなんだけど、
select a.id,a.title,concat(a.id,'_',a.title) as makeField from DBA a left join DBB b on a.makeField
= b.id_title where ・・・・;
みたいな感じ。
479478:2006/01/11(水) 23:35:19 ID:fwqbb4ss
追記しますが、厳密にそういう形でないと困るという訳ではないが、
上記のmakeField(concatで作り出したfield)と外部の表にある、とあるfieldとjoinしたい!!
という訳です。
480NAME IS NULL:2006/01/12(木) 07:13:32 ID:???
>>479
それで joinかwhere でつながらないかい?
しかし日本語を含む長いtextでのjoinについては、このスレで
ちょっと前に話題が出て、問題ありだった様な気が…
481NAME IS NULL:2006/01/12(木) 13:36:17 ID:FrPHCos/
5.0でも集合演算except, intersectは使えないのですか?
482mixi解析:2006/01/12(木) 14:34:16 ID:???
もし、知っていたら教えてほいんだけど、
mixiのマイミク登録って、理論的には承認するIDと承認されるIDの二つのカラムの
テーブル構造だと思うのです
でもさ、それって理論的なMAX値は(登録者数)x(登録者)のレコード数になると思うのですよ
今、何十万人だっけ?100万人か?
ってことは理論的に1億レコードを想定することになるんだろうか???
もし、そうなら、これって普通の考え方なんだろか?
スレ違いの話題だったらスマソ
483NAME IS NULL:2006/01/12(木) 14:38:14 ID:???
>482
マイミクって1000だったかその辺で制限あるんでなかった?
それにレコード数の見積もりは、理論上の最大値じゃなく
実際問題としてどのくらいになるかでいいんじゃないの。
まぁそれにしても会員数次第ではあるが。
484mixi解析:2006/01/12(木) 16:03:34 ID:???
>>483
なるほど。
1000登録までって制限付ですか
ごめん、(登録者数)x(登録者)だったら、1億じゃ足りないね^^;
「想定する実際問題」の値で運営するのって難しい判断だろうな
mixiみたいに自社開発案件だからできるけど、納品案件だったら顧客の
とんでもない仕様を突きつけられることになっちまうもんね

それに「友達の友達」って関係図の検索ってどんなテーブル構造なんだろう??
どう考えても、あんなにすばやく検索できるのは、なんかテーブル構造に仕掛け
でもしない限り思いつかないんだけどな
485 :2006/01/12(木) 18:36:38 ID:NI/3Vo8w
重くなったのでshow processlist;みたら
unauthenticated user がありました。
skip-networkingしてるのでlocal以外からは接続できません。
ぐぐるとバグの可能性があるとかでいろいろみてみたら
--skip-name-resolveがいいらしいと・・
--skip-name-resolveやると何か問題ありますか?
稼働中なので設定変えるのがこわいです
バージョンは4.0.20です
486NAME IS NULL:2006/01/12(木) 21:10:07 ID:7YlGT1cD
差集合(table1-table2)できたよ〜

SELECT a.* FROM table1 a
WHERE a.id <> ALL (
SELECT c.*
FROM table1 b LEFT OUTER JOIN table2 c
ON b.id = c.id
WHERE c.id);
487478:2006/01/12(木) 22:59:43 ID:PpvIqsEu
>>480
ごめんなさい。477で書いてあるようにすればつながるよ!!って事だったんですね。
見事つながりました。ありがとうございました。

でも、俺のやりたい事は、concatだけでなく、その部分の前にifを入れてみたりしたやり方。
で、実験的にやってみたところ、5分ぐらいたっても回答なし・・・。
ちなみにそのsqlを公開すると、
select a.id,a.title,b.conAft from aDB a left join bDB b on if(a.id<37,concat(a.id,'_',37),if(a.id>37,concat(37,'_',a.id),'NG')) = b.conAft limit 10
という文章。
帰ってこない・・・
488NAME IS NULL:2006/01/12(木) 23:20:22 ID:???
イントラネット内でmysqlサーバに別PCのクライアントから接続する場合の手順は

1.サーバでmysqlサービスを起動させる
2.クライアントPCからtelnetを使ってサーバに接続
3.mysqlのフォルダに移動し、リモートアクセス可能なユーザーでログイン

これでいいのでしょうか?
今までlocalhostでのアクセスしかしたことがないので、リモートログインのやり方がよくわかりません
489NAME IS NULL:2006/01/13(金) 00:08:13 ID:???
>>488
それでも良いけど、それはサーバ機のMySQLサーバに、
サーバ機のMySQLクライアントを使って接続するパターン。
サーバ機-クライアント機の間はtelnetのプロトコルで接続され
MySQLのC/Sの関係ではローカル接続。

サーバ機のMySQLサーバに、クライアント機のMySQLクライアント
(クライアントのOSに合わせて用意されてる。公式に用意されてなければ
ソースからコンパイル)を使って接続するパターンもある。
その場合、3306番ポート(MySQLのデフォルト設定)を使って、
サーバ機-クライアント機の間はMySQLの通信プロトコルで接続される。

前者は標準的なtelnetだと暗号化されてないのでsshなりを使うべきだし、
後者はSSLなりを噛まさないと素でデータが流れる。
イントラとは言え注意すること。
490359:2006/01/13(金) 01:10:11 ID:???
mysql> SELECT * FROM t1;
+-----+--------+--------+--------+
|name | code1   | code2  | code3  |
+-----+--------+--------+--------+
| Tom |     1 |     2 |     3 |
+-----+--------+--------+--------+

mysql> SELECT * FROM t2;
+-----+--------+
|code | Fruit    |
+--------------+
| 1  | リンゴ    |
| 2  | バナナ   |
| 3  | みかん   |
+--------------+

上記の2つのテーブルを結合(?)して

<イメージ結果>
+-----+--------+--------+--------+
|name | code1   | code2  | code3 |
+-----+--------+--------+--------+
| Tom | リンゴ  | バナナ  | みかん |
+-----+--------+--------+--------+

というように、
codeを名前に置き換えたテーブルを
出力させたいのですが、
どのようなSQL文になると思われますか?

491NAME IS NULL:2006/01/13(金) 01:41:21 ID:???
>>489
ああ、ありがとうございます
クライアント機のmysqlクライアントでサーバに接続する方法が知りたかったので
早速試してみます
492NAME IS NULL:2006/01/13(金) 11:16:41 ID:???
あるユーザーがそのデータを登録しているか否かを判定する場合って、
whereでそれを検索してcount(*)が1以上か、とかで判定するしかない?
493NAME IS NULL:2006/01/13(金) 11:44:07 ID:???
>>490
何がやりたいのか、うすらぼんやりとしか分かりませんが
下のようなテーブルデザインで考えてみたらどうでしょうか。

Fruits Table
+-----+--------+
| fid | fruits |
+--------------+
| 1 | リンゴ |
| 2 | バナナ |
| 3 | みかん |
| 4 | イチゴ |
| 5 | スイカ |
+--------------+

Person Table
+-----+--------+
| pid | person |
+--------------+
| 1 | Tom |
| 2 | Ken |
| 3 | July |
+--------------+

Favorite Table
+-----+------+
| pid | fid |
+-----+------+
| 3 | 3 |
+-----+------+
| 1 | 2 |
+-----+------+
| 1 | 1 |
+-----+------+
| 2 | 2 |
+-----+------+
| 2 | 5 |
+-----+------+
| 3 | 4 |
+-----+------+

このデザインなら、後からFruitsの種類を増やしても
テーブルにコラムを追加する必要がありません。
つーか、まずSQLの基礎から勉強すべきでしょう。
494493:2006/01/13(金) 11:46:24 ID:???
ちっ、半角スペースはHTMLの仕様で2個以上の連続は
無視されるんだった。

HTMLの基礎から勉強してきます。
495NAME IS NULL:2006/01/13(金) 13:40:59 ID:???
>>487
aDB と bDB は、それぞれ何件?
1万件も無いようだったら、マシンがしょぼいんでしょう。

それ以上なら、

create temporary table tmp_aDB
select id, title, if(a.id<37,concat(a.id,'_',37),if(a.id>37,concat(37,'_',a.id),'NG'))
from aDB;

って、テンポラリテーブル作って試してみたら?
MySQLのバージョンが高いのなら、View を作ってもいいだろうけど。

あと、仮名でも、aDB ってのは、aTABLE のほうがいいかもね。

>>490
select name, a.Fruit, b.Fruit, c.Fruit
from t1
left join t2 as a on t1.code1 = a.code
left join t2 as b on t1.code2 = b.code
left join t2 as c on t1.code3 = c.code
;

>>492
アプリ側で名に使っているか知らないけど、
普通は「検索結果が 0行なら無し」でいいんじゃないの?
496NAME IS NULL:2006/01/13(金) 20:34:55 ID:QbLu7ovg
わけあってナロー環境なので具ぐれなくて質問します。
windows版Mysql4.2.1です。select文で正規表現使えますか?
具体的には「あ行か行」で始まる名前とかを選択したいです。
497NAME IS NULL:2006/01/13(金) 21:43:56 ID:???
Windows版MySQL4.1.16でキャラクタセットをeucjpmsにするとエラーで
サービスが起動しないのですが、諦めるしかないんですかね。
仕方ないのでとりあえずujisにしてるんですが。
498497:2006/01/13(金) 21:52:15 ID:???
すいません。調べ足りませんでした。
499NAME IS NULL:2006/01/13(金) 22:19:50 ID:???
作ったデータベースの構造をsql構造で出力してくれるコマンドかスクリプト
ってありませんか?

googleで「MySQL データ構造 出力」などで検索しても出てきませんでした。

やりたいことは現在データの入っているデータベースからデータ構造だけ
抜き出して、新たにDBをセットアップできるようにしたいのです。

#phpMyAdminのエクスポートでsqlを選んで実行するとデータまで入ってくるので
データの入っていない CREATE文だけがあるようなものをイメージしています。
500NAME IS NULL:2006/01/13(金) 22:34:51 ID:???
>>496
REGEXP を使え。

>>499
mysqldump --no-data を使え。
501NAME IS NULL:2006/01/13(金) 22:35:04 ID:???
えっ...
mysqldump -d
502NAME IS NULL:2006/01/13(金) 22:36:28 ID:???
Mysqldumpとれば最初の方に出てくるからソレをエディタで編集とかは駄目?
503NAME IS NULL:2006/01/13(金) 23:48:55 ID:???
+------+------+
| field | word | 図1
+------+------+
| bbb | hi   |
| bbb | mn   |
| aaa | de   |
+------+------+

+------+
| word | 図2
+------+
| hi   |
| mn  |
+------+selectでbbbを検索すると図2のようになりますよね。

select * from where 別のテーブル like '%word%'
for( i = 0 ; 引っかかった数-1>i ; i++) { 「or '%word%';」 }

説明ベタなのでソースっぽいのを載せましたが(一個の場合はifでfor文をスルー)
図2の引っかかった数と、図2に引っかかったものを上から1つづつ、順次に取り出す(選択?)することは可能ですか?
504NAME IS NULL:2006/01/14(土) 00:38:39 ID:???
>>503
ソースよりも結果を示せ。

+------+------+
| field | word |
+------+------+
| 合計 |  2   |
| bbb | hi   |
| bbb | mn   |
+------+------+

てな感じにしたいの?

ん、多分違うな。
505NAME IS NULL:2006/01/14(土) 00:40:21 ID:8aKIOeQA
>>499
show create table テーブル名
だとだめ??
506NAME IS NULL:2006/01/14(土) 00:58:53 ID:???
>>504
すみません。
MYSQLというかJAVAでデータベースを弄るソースなので、でもどこで聞けばいいのかわからず
mysqlでselectで絞り込んだものからどの程度情報を取り出せるのか教えてもらいたく、質問させていただきました。

テーブルの中に入ってる必要はないですが、>>504さんのあげてるように、
select後のテーブルから合計2という情報は知りえるのでしょうか?

+------+------+------+
|  ID  | word | field |
+------+------+------+
| 25   | bbb  |  hi  |
| 29   | bbb  |  mn |
| 34   | aaa  |  de  |
+------+------+------+

+------+------+
|  ID  | word |
+------+------+
| 25   | hi   |
| 29   | mn  |
+------+------+

IDを使えばselect後のテーブルも選別しやすいでしょうが、番号が離れていればやはり不都合だと思われます。
select後のテーブルを上から順次選択する方法はないでしょうか?
507NAME IS NULL:2006/01/14(土) 01:29:32 ID:???
>>506
JAVAでは使っておらんで分からんが、普通は、select 結果を 1行ずつ取得できるような
方法があるはず。調べてみんしゃい。

あと、その「結果を 1行ずつ取得」する前には、「結果の行数」は知ることは出来ないはず。

まあ、知らなくても、1行ずつ全部を取得できるはずだけど。
508NAME IS NULL:2006/01/14(土) 01:35:28 ID:???
>普通は、select 結果を 1行ずつ取得できるような方法があるはず。調べてみんしゃい。
これはmysqlの機能で、ですよね?
貴重な情報本当にありがとうございます。
結果の行数はそもそもfor文を抜けるために必要ろうなと思っていたので、
その一行づつ取得するのが終わったらfor文を抜けるとかやれたらとかまあそれは取らぬ狸の皮算用
一行づつ取得について調べてきます。
ありがとうございました。
509NAME IS NULL:2006/01/14(土) 02:16:57 ID:???
ここで質問してる連中ってマニュアルは全く読まないんだな。
それで人類と言えるのか?
510NAME IS NULL:2006/01/14(土) 02:43:29 ID:???
>>509
そんな人たちがいるからこそ儲かるビジネス

つ 有償サポート

でもOSSにそういう意味でそれを求めるのは意味が無いとおもう。
511NAME IS NULL:2006/01/14(土) 06:40:49 ID:???
1行ずつ取得見つかんない selectしてるものを1行ずつってことですよね?
卒研で胃が痛いです
+------+------+
| field | word | Bテーブル
+------+------+
| bbb | hi   |
| bbb | mn   |
| aaa | de   |
| ccc | mn   |
| ddd | de   |
| eee | mn   |
| aaa | de   |
| bbb | mn   |
| ccc | de   |
+------+------+
このテーブルからfieldの種類を取り出したいのですがどうすれば?
(上のテーブルだとaaa,bbb,ccc,ddd,eeeの5つを取り出すということ)
onakaitai
512NAME IS NULL:2006/01/14(土) 07:05:34 ID:???
SELECT COUNT(DISTINCT field) FROM Bテーブル
513512:2006/01/14(土) 07:08:24 ID:???
すまん、項目数じゃなくて項目を取り出したいだけなら
SELECT DISTINCT field FROM Bテーブル
514NAME IS NULL:2006/01/14(土) 07:15:33 ID:???
ありがとうございます。
しかし、種類の数ではなく、
+------+
| field |Bテーブル
+------+
| bbb |
| aaa |
| ccc |
| ddd |
| eee |
+------+
fieldの重複部分をなくした状態を取得できないかなと
説明下手ですみません。
515NAME IS NULL:2006/01/14(土) 07:17:52 ID:???
すみません
リロードしてませんでした。
親切に教えていただき本当にありがとうございます。
もし卒業できたら貴方様の力添えのおかげです。
516NAME IS NULL:2006/01/14(土) 07:43:59 ID:???
COUNT()の数値を持ち出すのはそもそも意味が違うぞ
そんなコードで卒研通るならいいが、通してしまう教授も何もわかってないな。

その程度のことなら検索すればいくらでも出てくるし、サンプルコードまで出てくる。
http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&rls=GGLD,GGLD:2004-05,GGLD:ja&q=java+mysql

これでわからんならそもそも向いていないので専攻を変えることをオススメする。
一週間しかJava使ってない漏れでもわかるぞこんなの
517NAME IS NULL:2006/01/14(土) 12:14:14 ID:???
MySQL4.0を使っています。
実験用にMySQL4.1もインストールしたいのですが、バージョンの異なる2つMySQLをインストールすることはできますか?
518NAME IS NULL:2006/01/14(土) 12:15:57 ID:???
>>517
できます
519NAME IS NULL:2006/01/14(土) 16:03:29 ID:???
文系の大学でデータベース論みたいな講座で、卒研が実際にはおもいっきりプログラミングってのはありがちな罠。
理系の大学で、プログラミング出来ないってのは致命的だけどな。
520NAME IS NULL:2006/01/14(土) 20:05:19 ID:???
卒論でデータベースの操作コードなんてウラヤマシス
521PHP Mysql初心者:2006/01/15(日) 23:08:49 ID:OAfTmBF8
MySQL についての質問

MySQL とPHPを用いたWEBサイトを持っているのですが下記分からないことがありますので、ご教授お願いいたします。MySQL とPHPについては初心者です。

質問内容
 MySQLのデータベースでデータを設定しました。MySQLでは ちゃんと日本語表示ができるのですが、WEBに表示させると 日本語ではなくなります。英数小文字アルファベットはうまく表示します。よく言う化けるのではなく、???
が表示されます。
なお、2つのSQLを持っているのですが、一方では問題なく日本語が表示されます。
片方だけが ??? の表示になります。

日本語表示はWEBのHTMLのところで うまくいく方はja-sjis
うまくいかないほうは  ja-utf-8 を使っています。htmlでの
日本語表示は両者ともOKです。
             SQL仕様
  うまくいく方           
phpMyAdmin2.6.4-p12 MySQL4.0.25
Language japanese Ja-euc, Ja-sjis、Ja-utf-8 も選択可能
Ja-sjis を選択するとうまくいく。
うまくいくほうは
SQLデータベースに日本語で 東京 と入力すると SQLでは 東京      、
と表示されと web でも 東京 と表示される。

Hokkaido と入力すると hokkaido と表示される。              
 
うまくいかない方phpMyAdmin2.6.4-p12   MySQL4.1.13
Language japanese (ja-utf-8)
MySQL charset(文字セット) UTF-8  unicode(utf8)
Mysql 接続照合順序  Utf8-general-ci またはujis_japanese_ci,またはujis_bin,または
Sjis_japanese_ci,またはsjis_bin

うまくいかないほうは                    
SQLに日本語で 東京 と入力するSQLデータベースでは 東京 と表示され
WEB では ?? 表示される
Hokkaido と入力するとSQLデータベースでもwebでも
Hokkaidoと表示される。

うまくいかないほうでも日本語表記をできるようにするにはどうすればよいのでしょうか。
ご教授お願い致します。

522NAME IS NULL:2006/01/16(月) 01:06:16 ID:???
PHPは誰がどのパッケージをインストールしたんだ?

恐らく、PHPに組み込まれているMySQLライブラリがlatin1辺りになっている。
4.0系では文字コード変換がされないので素で出てくるが、
4.1以降では文字コード変換がされるので、mysqlライブラリでアクセスする際の文字コードに気をつけないと'?'になる。

この手の質問はもう嫌と言うほど出てきて対処法もいろいろ出ているので、
過去ログ見るなり、googleで調べるなりしてくれ。
523NAME IS NULL:2006/01/16(月) 09:59:28 ID:ORbHEjhu
522 さま
ありがとうございました。
調べてみます。
524NAME IS NULL:2006/01/16(月) 12:31:52 ID:???
MYSQLって文字化けとの戦いが普通なんですか?
525NAME IS NULL:2006/01/16(月) 13:06:09 ID:???
>>524
普通は最初に退治しておく
EUCならEUCで全部まとめちゃう
526NAME IS NULL:2006/01/16(月) 13:08:31 ID:???
デフラグに相当するものとして ダンプしてまたぶちこむ
というのがあるけど
能力計測とかで わざとフラグメンテーションさせたいときは
コマンド一発で何かうまい方法無いかね
527NAME IS NULL:2006/01/16(月) 15:20:14 ID:b6FaLeio
MySQL4.0.26(sjis)を使用しています。
PHPでスレッド式の掲示板を作成しているのですが、投稿した本文から検索するSQLを発行するのにとまどっています。

CREATE TABLE `res` (
`key` int(10) NOT NULL default '0',
`no` mediumint(7) NOT NULL auto_increment,
`name` varchar(50) NOT NULL default '',
`mail` varchar(43) NOT NULL default '',
`time` varchar(12) NOT NULL default '',
`com` text NOT NULL,
`ip` varchar(15) NOT NULL default '',
PRIMARY KEY (`key`,`no`),
) TYPE=MyISAM AUTO_INCREMENT=1 ;

がレスを保存するテーブルです。
`com`に投稿した本文が入っているのですが、ここから例えばMySQLという文字を検索する場合に最適なクエリはどのようにすればよいでしょうか?
現在は

SELECT * FROM `bbs`.`res` WHERE `com` LIKE '%MySQL%'

として検索しているのですが、どうしても40秒以上かかってしまいます。

フルテキストインデックスも考慮したのですが、投稿したときにインデックスが邪魔で時間がかかると思うので使用していません。
528NAME IS NULL:2006/01/16(月) 15:30:17 ID:???
>>527
中間一致だとテーブルを端から全件読んで検索をかけるからデータ数に比例して時間がかかるようになる。
他の検索条件と組み合わせるか、あきらめてフルテキストをつかいねぇ。
529527:2006/01/16(月) 15:32:19 ID:???
フルテキストを使用すると投稿の際時間は相当かかりますか?
実験出来る環境にいないので、とりあえずやってみるということが出来なくて。。
530NAME IS NULL:2006/01/16(月) 15:43:28 ID:???
アフォな質問ですが教えて下さい。

MySQLのデータベースをおいてあるパーティションの容量が100%になった場合、
テーブルが壊れますか?また、その最後に書き込みしているデータベースにアクセス
することはその後可能ですか?(HDDが一杯の状態で)
書き込みができない場合にはタイムアウトで処理をキャンセルする機能とか存在するんでしょうか?

531527:2006/01/16(月) 19:15:38 ID:???
FULLTEXTインデックスを貼ってみようと思いましたが、FULLTEXTは
日本語に対応していないと言うことなので諦めました。

現在約300万のレコードが入っているのですが、どうすれば高速に検索できるでしょうか??
532NAME IS NULL:2006/01/16(月) 19:49:01 ID:???
>>527
namazuとか使うのはダメ?
533NAME IS NULL:2006/01/16(月) 20:04:50 ID:???
>>531
茶筅で単語抽出して、それでインデックス作るのはやったことがある。
もっとも自分のところだとベタ検索でも全然問題なかったのだが。
534NAME IS NULL:2006/01/16(月) 20:05:23 ID:???
>>527
TEXTは確か、頭200バイト前後だったと思うけどindexつけられるんだよね。
LIKE に効くかどうかとか詳しい事は知らないので、俺もちょっと知りたい所。

で、もし効くとした場合、仮に頭256バイトに付けられると仮定して、
検索用テーブルを作る。「記事番号、本文」の2カラム。
本文は、256バイト毎に入れる。本文1Kなら4レコードみたいな。
検索はこれに対して行う。

切れ目を跨いだワードの検索をどうするかとかは知らんw
535NAME IS NULL:2006/01/16(月) 21:11:45 ID:???
マニュアルにちゃんと書いてあるんですけどね。
536NAME IS NULL:2006/01/16(月) 23:07:52 ID:???
mysqlサーバPCに、別のクライアントPCからプロンプトで「telnet サーバPCのIP 3306」と打つと、
4.0.20a-nt・〜 とmysqlバージョンの後に意味不明な文字が出て、少し経つと「ホストとの接続が切断されました。」と出て接続が切られてしまいます。
これは、サーバの方で3306番、mysqlのデフォルトポートが開いてない、ということなんでしょうか?
サーバPCで「netstat -an」と打つと、確かに「 TCP 0.0.0.0:3306 0.0.0.0:0 LISTENING 」と答えが来ているのですが・・・
537NAME IS NULL:2006/01/17(火) 00:08:28 ID:???
>>536
本当に意味不明な文字が出るのか?
538?527:2006/01/17(火) 00:15:29 ID:???
やっぱりわかりません。。
もうテーブルにデータが大量に入っているので、茶筅とかは考慮していません。。
539NAME IS NULL:2006/01/17(火) 00:23:56 ID:???
>>536
telnetでポート叩いて結果が返ってきて、netstatで結果が返ってきて、
どこをどうやったらそういう解釈になるんだ?

telnetでポート叩いてみるのも、他人から聞いただけで意味わかってないのか?


自分で答え書いてるだろが・・・・・・
540NAME IS NULL:2006/01/17(火) 00:35:15 ID:???
>>538
レコードは300万として、テキスト総量は何M?
総当たりだから、マシンスペック以上は無理じゃないかな?
namazuみたいなインデックス方式なら話は別だけど、これだと
例えば「日本」で検索しても、「日本語」に対してhitしないんだよね。
541527:2006/01/17(火) 05:27:40 ID:???
1.2GBです。
やはりサーバーに依存しますよね。。

ありがとうございました。レプリケーション等で対処してみようと思います。
542NAME IS NULL:2006/01/17(火) 14:42:09 ID:???
>>536
今試してみたけどそれで正常
543NAME IS NULL:2006/01/18(水) 03:50:26 ID:???
>>527
あくまで参考だが、個人的に興味もあったのでFULLTEXTインデックスを試してみた。

MySQL Ver. : 4.0.24
レコード : 約5万
データ総量 : 約25MB

LIKE 検索
こんなカンジで→ SELECT * FROM `bbs`.`res` WHERE `com` LIKE '%ほげほげ%'

時間(micro秒)
0.868223190308
0.750785112381

FULLTEXT検索
こんなカンジで→ SELECT * FROM `bbs`.`res` WHERE MATCH (`com`) AGAINST ('ほげほげ')

時間(micro秒)
0.0713179111481
0.0538399219513


日本語検索も問題なくいけた。

思ったよりずっと高速化した。
データ総量が全然違うが、試してみる価値はあるのかもしれん。
544NAME IS NULL:2006/01/18(水) 07:59:37 ID:???
>>543
それって、「ほげほ」や「ほ」「ほげ」 で同じようにヒットします?
545NAME IS NULL:2006/01/18(水) 11:49:33 ID:???
>>534 の見て思ったんだが、まず TEXTへのインデックスは LIKEにも
頭にワイルドワードを使わなければインデックス効果がある。 'ほげ%' はOK

ってことは、534 のレコードに、本文を1文字ずつずらして抜き出しレコード追加。
抜き出す文字数は現実的に検索されそうな文字量でいいだろうから10〜20バイト程度。

これで、LIKE '探したい文字%' とやれば、頭にワイルドカード指定したのと
同じ効果があり、相当速いのではないだろうか。

必要テーブル容量は、仮に全部日本語として、ソースデータ総量の
(1レコード抜き出しバイト数 /2) 倍 程度。 レコード数は(総量/2)レコード。
1.2Gなら、 約10G、6億レコードってところか。
546NAME IS NULL:2006/01/18(水) 13:56:49 ID:U6VCCe9M
もし、わかる方がいらっしゃいましたら教えて頂きたいのですが

OS:FC3
にmysql4.1.15を以下の手順でインストールしました。

# groupadd mysql
# useradd -g mysql -d /usr/local/mysql mysql
# passwd mysql
# chown -R mysql:mysql /usr/local/mysql/
# cd /usr/local/src
# tar zxvf mysql-4.1.15.tar.gz
# cd mysql-4.1.15
# ./configure --with-charset=ujis --with-extra-charsets=all \
--with-mysqld-user=mysql --prefix=/usr/local/mysql
#make
#make install
#/usr/local/mysql/bin/mysql_install_db

この後
#/usr/local/mysql/bin/safe_mysqld --user=mysql&
で起動しようとしたのですが
# Starting mysqld daemon with databases from /var/lib/mysql
STOPPING server from pid file /var/run/mysqld/mysqld.pid
060118 13:10:32 mysqld ended
となってしまいます。

/var/log/mysqld.logをみると
060118 13:10:32 mysqld started
060118 13:10:32 InnoDB: Started; log sequence number 0 43634
060118 13:10:32 [ERROR] /usr/local/mysql/libexec/mysqld: Can't create/write to file '/var/run/mysqld/mysqld.pid' (Errcode: 2)
060118 13:10:32 [ERROR] Can't start server: can't create PID file: No such file or directory
060118 13:10:32 mysqld ended

なぜ/var/run/mysqld/mysqld.pidファイルが作成されないのかがわからないのですが・・・
547NAME IS NULL:2006/01/18(水) 14:00:24 ID:???
mysqlユーザのパスワードって何で暗号化されてる?
マニュアル見てもわからんかった
548NAME IS NULL:2006/01/18(水) 14:22:51 ID:???
>>546
No such file or "directory"
          ↑ここに注目!
549NAME IS NULL:2006/01/18(水) 14:31:39 ID:???
>>547
もう一度マニュアル読め。はっきりと書いてある。
ハッシュアルゴリズムはSHA1っぽいが詳しくはソース読まないとわからん。
550NAME IS NULL:2006/01/18(水) 14:46:00 ID:U6VCCe9M
>>548
/var/run/配下にmysqldを作成したら、うまく起動できました。
どうもありがとうございます。
初心者なものでinstall時に自動で作成してくれるものと思ってました・・・
551NAME IS NULL:2006/01/19(木) 03:50:10 ID:???
DAYOFMONTHとMONTH関数の違いは何ですか?
552572:2006/01/19(木) 04:26:59 ID:???
ありがとうございます。

HDD容量は必要以上に有り余っているので特に心配はありません。検索速度は非常に早くなるようですね、、

現在テーブルには3つのインデックスがあり、
一つはマルチカラムインデックスの主キー、
残りの二つは投稿者IDと内部IDの通常インデックスを張っています。

このテーブルの名前(varchar50)と本文(text)の2つのカラムにそれぞれFULLTEXTインデックスを張ってみます。

一応DBをコピーしてテストしてみます。

検索速度やレコード変更速度等、結果が出しだいまた報告します。よろしくお願いします。
553572:2006/01/19(木) 09:58:04 ID:/bnY9/LX
導入前

SELECT name (LIKE)
2.4546411037445秒
SELECT com (LIKE)
2.4688010215759秒
INSERT
0.00033998489379883秒

##############################3

名前(varchar) INDEX

SELECT name (LIKE)
1.5695791244507秒

SELECT name (against)
0.00019598007202148秒

INSERT
0.00036096572875977秒
###############################

+本文(TEXT)
SELECT com (LIKE)
2.4709792137146秒

SELECT com (against)
0.00019407272338867秒

INSERT
0.00050210952758789秒

処理速度は大変向上しましたが、検索結果は全く当てにはなりませんでした。。
検索として使用するのであれば、このインデックスはおすすめできないような気がします。

今回使用したクエリです。
クエリキャッシュの効果はいらないので"SQL_NO_CACHE"を使用しました。

SELECT SQL_NO_CACHE * FROM `bbs`.`res` WHERE `name` LIKE '%てすと%'
SELECT SQL_NO_CACHE * FROM `bbs`.`res` WHERE `com` LIKE '%てすと%'
SELECT SQL_NO_CACHE * FROM `bbs`.`res` WHERE MATCH (`com`) AGAINST ('てすと')
554NAME IS NULL:2006/01/19(木) 11:47:53 ID:???
データベースを作ってユーザAに権限を与えたのですが、
その権限を確認するにはどうしたらいいんでしょう。
555NAME IS NULL:2006/01/19(木) 15:12:25 ID:???
556NAME IS NULL:2006/01/19(木) 15:16:16 ID:???
>>554
そのユーザーになってアクセスしてみる。

もしくは、mysqlデータベースの dbテーブルとか調べる。
http://dev.mysql.com/doc/refman/4.1/ja/privileges.html
557NAME IS NULL:2006/01/19(木) 15:16:30 ID:8OrQfmam
>>554
Navicatで見る
558NAME IS NULL:2006/01/19(木) 15:27:16 ID:???
>>463
表3は、SUM関数の結果同士の演算

表4は、サブクエリで総合計を求めて、割り算で比率を求める

559NAME IS NULL:2006/01/19(木) 19:59:32 ID:???
>>558
具体的な SQLを、どぞ。
560NAME IS NULL:2006/01/19(木) 21:34:37 ID:???
>>556-557
情報dクス 調べてみます!
561NAME IS NULL:2006/01/19(木) 22:28:13 ID:???
だよFもんTH関数なんてあるの?と思ったら、DAY_OF_MONTHなんだ。
562NAME IS NULL:2006/01/19(木) 23:00:12 ID:???
>>556-557
おまえら、もう少しまともな返答してやれよ

>>554
つshow grants for
563NAME IS NULL:2006/01/19(木) 23:29:57 ID:SGWTWbu3
MySQL4.1の環境です。
テーブルはujisの文字コードです。

データのエントリー作業をしているのですが「〜」の波線だけ
「?」に文字化けしてしまいます。なにか対策はないでしょうか?
564NAME IS NULL:2006/01/20(金) 01:50:01 ID:???
>>563
・UTF-8を使う。
・サーバの変換機能を抑制する(mysqldのオプション)。
565NAME IS NULL:2006/01/20(金) 02:18:29 ID:???
http://support.microsoft.com/default.aspx?scid=kb;ja;286776
JIS X 0213 の間違った実装をした MS が悪いのでどうにもならんような。
566NAME IS NULL:2006/01/20(金) 03:35:26 ID:???
>>565
そういう話ならujisを指定するのが間違いで
eucjpmsを指定するのが筋かね、MySQL4.1/5.0ならば。
567566:2006/01/20(金) 03:36:29 ID:???
568NAME IS NULL:2006/01/20(金) 13:01:43 ID:mentXhyV
二つのMySQLサーバをたてているのですが、
片方のサーバに接続した状態で、
もう一方のサーバのテーブルのデータを検索することは
できるのでしょうか?
569NAME IS NULL:2006/01/20(金) 15:21:38 ID:???
>>568
言わんとしてることが良く判らないが、こういうことか?
http://dev.mysql.com/doc/refman/5.0/en/federated-storage-engine.html
570NAME IS NULL:2006/01/20(金) 15:29:47 ID:mentXhyV
例えば、192.168.0.1のPCと192.168.0.2のPCに
MySQLサーバをインストールしているとします。
ユーザは、どちらのサーバのテーブルのデータも
検索できるものとします。
その時、192.168.0.1のサーバに接続した状態のまま、
192.168.0.2のサーバ内にあるテーブルのデータを
検索することができるのだろうか、
ということです。
571NAME IS NULL:2006/01/20(金) 15:38:31 ID:???
俺は絶対に釣られないぞ!
572NAME IS NULL:2006/01/20(金) 15:55:50 ID:???
>>562
キャー ありがとう!!
573NAME IS NULL:2006/01/20(金) 16:23:41 ID:???
>>570
なら>>569で提示したものだ。
574NAME IS NULL:2006/01/20(金) 18:45:09 ID:mentXhyV
573様
ご教示ありがとうございました。
できました。
575NAME IS NULL:2006/01/20(金) 22:23:34 ID:???
設定がおかしくなって訳分からん状態になってしまったので、
全部まっさらにしてやり直そうと思い、mySQLをアンインストールしたのですが、
次にmySQLを入れてもデータが残ってるようで、初期化が出来ません。
何処を消せば初期化出来るようになりますか?
576NAME IS NULL:2006/01/20(金) 22:35:08 ID:???
>>575
DROP DATABASE 文を何度か実行して実データを全て消す
(=データディレクトリを削除する)
my.ini を消す。

両方やれ
577NAME IS NULL:2006/01/20(金) 23:47:11 ID:???
データベースのサイズを制限する方法ってありますか?
578NAME IS NULL:2006/01/21(土) 00:44:34 ID:???
$Result_ID = mysql_query($SQL);
echo($Result_ID);

出力結果
--------------------
Resource id #3

気になったのですが、
上記のように結果セットをそのまま出力するとIDが表示されますが、
この数字って何を示してるんでしょうか?
579NAME IS NULL:2006/01/21(土) 01:08:26 ID:???
>>578
ググってこのページを見つけるのに5分も掛からなかったぞ。
http://pc.spo.to/mysql_php/mysql_php.html
てか、そもそも何の言語かPerlerの俺には判らんかった。
580NAME IS NULL:2006/01/21(土) 02:18:04 ID:???
それはmysqlではなくphpの質問だな
581NAME IS NULL:2006/01/22(日) 21:38:19 ID:???
int 10で格納していたのを、あまりに数が大きくなってきたので例えばint 11に途中から
変更した時にどんな問題点がでてきますか?
582NAME IS NULL:2006/01/22(日) 22:58:55 ID:???
>>581
int(10) で足りなくなったのなら int(11) でも簡単に足りなくなるのではないのか。
もしそうなら、さっさと bigint にすべき。
アクセスが遅くなるわけでもなし
MySQL を使った何かのプログラムが「10桁」というのに
依存しすぎてる場合を除けばまず問題無い。
583NAME IS NULL:2006/01/23(月) 02:12:37 ID:???
int型のauto_incrementで4,294,967,295越えたら、どうなるんですか?
0に戻ったりします?それとも勝手にbigintになったり?
584NAME IS NULL:2006/01/23(月) 02:16:17 ID:???
クエリでヒットしたカラム自体にそのヒット数を通算カウントされていくという
オートマトンっぽいテーブル仕様はmysqlで実現可能ですか?
585NAME IS NULL:2006/01/23(月) 02:57:45 ID:???
>>583
0 に戻らないし、 bigint にもならない。
それ以上増やすことが出来ないので、そこで止まってしまう。
その状態で auto_increment のカラムを指定せずに
INSERT を行うと大抵 Duplicate entry エラーでクエリは失敗する事になる。

最初からこんなことが発生しないように
テーブル定義をするべきなので当然といえよう
586NAME IS NULL:2006/01/23(月) 03:43:24 ID:???
例えば、板テーブル、スレッドテーブルがあってスレッド合計は、SUMすれば出てきます。
しかし毎回計算するのも間抜けなので板テーブルにthread_totalを作るというのはアホですか?
587NAME IS NULL:2006/01/23(月) 04:01:11 ID:???
じゃー、bigintにしてても18446744073709551615以上はauto_incrementで
insertできないってことですか。。

普通それ以上の数をauto_incrementする場合どうしてるんですかね?
588NAME IS NULL:2006/01/23(月) 04:13:42 ID:???
その前に人類は滅びる
589NAME IS NULL:2006/01/23(月) 06:03:52 ID:???
>>587
そんなに中出…いや insertしないし
590NAME IS NULL:2006/01/23(月) 19:25:28 ID:???
INDEXについてマニュアルを見て疑問に思ったので質問させてください。
mysql> CREATE TABLE test (
-> id INT NOT NULL,
-> last_name CHAR(30) NOT NULL,
-> first_name CHAR(30) NOT NULL,
-> PRIMARY KEY (id),
-> INDEX name (last_name,first_name));
次のクエリには name インデックスが使用されません。
mysql> SELECT * FROM test WHERE first_name="Michael";

これでfirst_nameでもインデックスを有効にするには、複合インデックスを使わず、last_name、first_nameそれぞれのインデックスを生成すればよい、ただし実際に使われるインデックスは1つのみ
という認識で合っていますか?
591NAME IS NULL:2006/01/23(月) 20:22:08 ID:???
環境は
Apache 2.0
PHP 5.1.2
MYSQL 5.0
です。

php.iniの設定です。
magic_quotes_gpc = off
magic_quotes_runtime = off
magic_quotes_sybase = off

エスケープ文字に関して悩んでいます。
エスケープ文字対策として
insert時には登録する文字列($string)に対してphpの addslashes() 関数を使用しています。
(例)
$string = addslashes(入力文字列);
$sql = "insert into test (string) values ('$string')";

select時には以下のような対応をしています。
$filter = "検索に使用するフィルタ文字列";
$filter = str_replace("\\","\\\\",);
$filter = str_replace("'","''",$filter);
$filter = str_replace("%","\%",$filter);
$filter = str_replace("_","\_",$filter);

$sql = "select test from string like '%$filter%'";

%_'での検索は上手くいくのですが
バックスラッシュでの検索が出来ません。

(例)
aaa\aaaという文字列に対してフィルタに\と入力して検索した場合引っかからない。

\文字の扱いがどうしてもわかりません。
↑のような処理でなにかお気づきの点がありましたら教えてください。
592591:2006/01/23(月) 21:02:38 ID:???
すいません。
上手く処理されていました。
ソースの間違えとかではなく私の勘違いでした。



593NAME IS NULL:2006/01/23(月) 21:05:10 ID:???
>>586
いや、アホではない。

つまりデータの冗長化(この場合は、sumの計算結果を保存しておくこと)の是非の問題かと思うが、

・その冗長化に意味がある(処理の高速化、など)
・きちんと保守できる(データ挿入時に忘れずに入れる、関係の定義が変更になっても忘れない、など)
・他に悪い影響を及ぼさない(容量を極端に増やさない、など)

のであれば、冗長化も十分にありえる手法かと。
594NAME IS NULL:2006/01/23(月) 22:18:52 ID:???
>>591
余計な事にレスして済まんが、DBに渡す文字列をエスケープする時は
データベースアクセスAPI毎に用意されているエスケープ関数を使うべきで
addslashes()はあくまで最後の手段と考えるべきだ。
595NAME IS NULL:2006/01/23(月) 22:41:21 ID:???
いっせーのせで接続したら一度にどのくらい接続できるんだ?
30クライアントくらい?
596591:2006/01/24(火) 00:11:27 ID:f/WlHjh4
>>594
勉強になります。
データベースアクセスAPIに関してはほとんど知識はありませんが
これから学習したいと思います。
レスありがとうございました。
597NAME IS NULL:2006/01/24(火) 01:08:26 ID:???
>>595
そんなのどのデータベース製品だろうと、DBチューニングで決める事柄
一般解は無し。
598NAME IS NULL:2006/01/24(火) 02:22:09 ID:???
>590
そんな時のためのEXPLAIN
599NAME IS NULL:2006/01/24(火) 03:21:04 ID:???
ちょっとお聞きしたいのですが、
MySQL4.0.23をWinXPに入れて、
コマンドプロンプトから長時間操作していると、
急にPCがクラッシュして

"システムにダメージが発生したのでOS再インストールしてください。"

みたいな英文(40行ぐらい)が表示されるんですが、
こういう経験ありますか?

ちなみに、電源ボタンから再起動すると
「システムは深刻な状態から回復しました」
とメッセージボックスが表示されます。
普通に使えるようになるんですが。。。


600NAME IS NULL:2006/01/24(火) 03:48:07 ID:???
>>599
長時間ってもプロンプトからの操作なので、
人間が持続できる時間と考えても、そういうことはないね。

Windowsは問題ないんだけど、Linuxは良く止まるんだが等々は
PCのメモリ周りに問題があることが多い。電源供給が足らないとかもね。
memtest86あたりで一度チェックしてみては。
601599:2006/01/24(火) 04:58:00 ID:???
>>600
なるほど、やっぱハード周りですか。
602NAME IS NULL:2006/01/24(火) 10:11:05 ID:???
>>597
どこで設定するの?
603NAME IS NULL:2006/01/24(火) 11:22:14 ID:???
>>595>>602
マジレスするとn個のスレッドを立てて「よーいどん」で接続を張りにいかせる実験をすれば分かる。
MySQLの場合、関わってくるのは最大接続数を規定する max_connections と、あとTCP/IPの
リソース取得に関係する back_log。

max_connectionsはデフォルトで100、back_logはデフォルトで50だっけな。
両者とも300くらいに設定すれば同時に200個のスレッドからよーいどんで接続要求を
出させた場合、全部で100msくらいで200個の接続が完了する。

あとは自分で調べてネ ノシ
604NAME IS NULL:2006/01/24(火) 20:52:02 ID:XkwmC+re
MySQLとPostgreSQLって実際の業務でどのくらい使われてるんでしょうか?
自分SEなんですけど、OracleやDB2やSQLServerを使った案件しかやった事ないんですが、
本当にMySQLやPostgreSQLって使った案件ってそんなにあるんでしょうか??
誰かお願いします。
それと仮に案件あるとして、たぶん、MySQLやPostgreSQLでデータベースのキャラクタセット
を指定できると思いますが、やっぱ、UnicodeではなくShift-JISとか使われてるんでしょうか?

605NAME IS NULL:2006/01/24(火) 20:56:57 ID:???
yahooはpostgresql、googleはmysqlじゃなかったっけ?
606NAME IS NULL:2006/01/24(火) 21:11:37 ID:???
yahoo.comはMySQLだというのを聞いたことあるが
607NAME IS NULL:2006/01/24(火) 21:12:03 ID:???
yahooもmysqlだった(http://www-jp.mysql.com/customers/)。

他にはNASA、BBC、MIT、UCB、Apple、Intel、Sun、/.、Wikipedia...
608NAME IS NULL:2006/01/24(火) 21:16:01 ID:???
googleって検索がmysqlなの?
609NAME IS NULL:2006/01/24(火) 21:16:52 ID:???
PostgreSQLの開発元のUCBがMySQLとは・・・
610NAME IS NULL:2006/01/24(火) 21:20:07 ID:???
>>593
遅レスでサンスコ

合計出すのもそんなに処理時間がかからないと思いますが、コード的に楽という
のもあるので SUMの結果を入れるフィールドを作ってみようと思います。
611NAME IS NULL:2006/01/24(火) 21:21:07 ID:XkwmC+re
>>604です。
つまり、ここで発言・質問してる人って趣味でやっている人でしょうか??
それとも、仕事で触っている人でしょうか??
612NAME IS NULL:2006/01/24(火) 21:52:35 ID:???
>>611
> >>604です。
> つまり、ここで発言・質問してる人って趣味でやっている人でしょうか??
> それとも、仕事で触っている人でしょうか??

俺は仕事でPostgres、MySQLを使っている。
MySQLの案件というのは、あることはあるがやはりOracleとかのほうが
一般的じゃないのかね?
character setについては、このスレ見ると良く分かるが
utf8が無難、というかutf8意外だと痛い目にあう
613NAME IS NULL:2006/01/24(火) 22:27:32 ID:???
>>604
ISPの鯖屋みたいなところが相手の仕事じゃないと、DBMSの価格や性能の違いが
余り出ないから慣れてるものをずっと使う感じがするけどね。
ウチが関わるようなところは小中規模なレベルなので、
MySQLやPostgreSQL、あとSQLServer(含むMSDE)が多いです。

>UnicodeではなくShift-JISとか使われてるんでしょうか?
Windowsが先方から指定されて、MySQLを提案&採用するようなケースでは
自分はShift-JIS以外は使ったことがありません。
614NAME IS NULL:2006/01/24(火) 22:43:06 ID:???
>>611
9割仕事で1割趣味かなぁ。
615NAME IS NULL:2006/01/25(水) 04:58:57 ID:???
質問者ですが、質問しているのは趣味の人が多いんじゃないんですかね。

OracleとかDB2とかいじったことないですし、有料のものはいじる気もないですし、
必要性もないと思います。(というか違いがわからない。)
Webアプリに使っているのでレンタルサーバで多く導入されているMySQL,Postgreを
使いたいと思う心理。
616527:2006/01/25(水) 05:16:53 ID:C2WCInvb
お久しぶりです。
あれからいろいろ探していたところ、
マニュアルに
http://dev.mysql.com/doc/refman/4.1/ja/nutshell-4-0-features.html
という記事を見つけました。

この記事には
大きいテキストの FULLTEXT インデックスが、バイナリと自然言語の両方の検索ロジックで作成可能になった。
と書かれていて、

これのバイナリロジックを使用すれば日本語での検索もできるようになると思うのですが、バイナリはどのように使用すればよいのでしょう?
617NAME IS NULL:2006/01/25(水) 05:24:34 ID:???
いま流行りのLivedoorもMySQLだったはず。MySQLセミナー主催とかしてたし。

Yahoo!comは昔からMySQL、Yahoo!Japanはシステムは別だったが今はどうなんだろう。
Google.comもMySQLのBigUserだがMySQLのMyISAMを独自に改良して使っているとおもわれる。

欧米の企業って日本の企業に比べると自社お抱え技術者の人数が多い。
だから社内に技術ノウハウが結構あって、コスト削減のためにオープンソースプロダクト採用
してるところも多く、そういうことろが伸びたわけ。

日本は欧米と比べるとSIer依存が大きいわけだが、いまSIerがいろいろOSS導入に関しては
悩んでるところだろう。SIer的には商用プロダクトやめてOSSつかうと「売上が減少する」
(高額なOracleなどを仕入れ販売してマージン稼いでた)から、OSSへの移行の進捗は
芳しくないという部分もある。

しかし最終的には日本ユーザ企業のコストダウン圧力に負けてOSSが日本でも普及するでしょう。

とか思ってる。マジレススマソ。
618NAME IS NULL:2006/01/25(水) 09:51:33 ID:???
shellのコマンドラインから1行でgrantを実行して権限を変更する方法はありますか?
619NAME IS NULL:2006/01/25(水) 11:10:37 ID:???
たまにはSQLiteのことも思い出してあげてください
620NAME IS NULL:2006/01/25(水) 11:26:29 ID:???
>>618
これじゃ駄目? (hoge.sqlに実行したいSQL文を書いておく)
shell> mysql < hoge.sql
621NAME IS NULL:2006/01/25(水) 11:53:01 ID:???
>>620
ありがとう
そういう使い方ができるってことはパイプでもいけそうですね〜!
622NAME IS NULL:2006/01/25(水) 20:23:52 ID:???
mysqldumpでバックアップ取ったファイルをそれでまたかぶせたりとかよくやったりしてるけどな。
623NAME IS NULL:2006/01/25(水) 20:41:07 ID:???
phpmyadminの質問OK?
624NAME IS NULL:2006/01/25(水) 22:32:21 ID:???
>>623 とりあえず、して味噌
625NAME IS NULL:2006/01/26(木) 01:40:47 ID:???
total_pointというフィールドに入っている合計点に新しいポイント足してUPDATE
したい時ってどう書くのでしょうか?

というよりこういうのどうやって検索すればいいんだろう?
単語が思いつかない。
626NAME IS NULL:2006/01/26(木) 01:41:40 ID:???
ちなみにflashmyadminというFlashベースの管理ツールがある。

UTF8のDBの文字は表示されなかった。
なんでだろ。
627NAME IS NULL:2006/01/26(木) 01:46:47 ID:???
>>625
自己レス。

UPDATE data SET total_point=total_point+1;

これでいいはず
628NAME IS NULL:2006/01/26(木) 04:28:41 ID:???
>>625
解決してるのを蒸し返すのもなんだが、
>というよりこういうのどうやって検索すればいいんだろう?
まずは、マニュアル嫁としかいいようがないよ。
http://dev.mysql.com/doc/refman/4.1/ja/update.html
UPDATEの項にそのまま書いてあるし、更によく読むと
こういった1行完結のUPDATEには、ロック処理を敢えてやる必要ないことなどが判る。
629NAME IS NULL:2006/01/26(木) 08:09:46 ID:???
>>617
あんたの言うとおりだ。
630NAME IS NULL:2006/01/26(木) 09:21:50 ID:JRZNHhZI
WindowsXP PROでMYSQL4.1.15を動かしています。
リモートで接続するためにmy.iniにskip-networkingとenable-named-pipeを書き加えたらWindowsXPのリモートホストからmysql --protocol=pipe コマンドで接続できました。
ところがCで書いたWindowsクライアントからMYSQLに接続できません。
mysql_options(msql,MYSQL_OPT_PROTOCOL,"MYSQL_PROTOCOL_PIPE")
msql = mysql_real_connect(msql,"localhost" , "user","password","db", 0, NULL, 0)としています。
どう修正したらいいのでしょうか。
631NAME IS NULL:2006/01/26(木) 10:24:42 ID:???
>>630
「リモートで接続する」ために、なんで
「my.iniにskip-networking」と記述しちゃうの?
632630(リモート接続):2006/01/26(木) 10:50:01 ID:JRZNHhZI
>>631
クライアントのホスト側でmysqlコマンドを実行したらリモート接続できているのでskip-networkingの記述は問題ないと思います。

mysql_real_connectで指定するホスト名を"."にしたらローカルからは接続できるようになりました。
しかし別のホストにインストールしたクライアントからは接続できません。
633630(リモート接続について):2006/01/26(木) 10:55:04 ID:JRZNHhZI
追記 mysql_real_connectのunix_socket パラメータを"MYSQL"に変えてます
634NAME IS NULL:2006/01/26(木) 10:57:40 ID:???
とりあえず630はマニュアル読み直してきた方が良さそうな悪寒。
635NAME IS NULL:2006/01/26(木) 11:18:43 ID:???
>>632
>クライアントのホスト側でmysqlコマンドを実行したらリモート接続できている
これも変。貴方の使ってる"クライアント"や"ホスト"や"リモート"の意味が
一般に使われるものとは違ってるのかもしれない。
クライアントを"お客さん"の意味では使ってないよね。

>mysql --protocol=pipe コマンドで接続できました。
因みにこれは名前付きパイプを使用する設定だけど、
そのパイプはネットワークで共有してるのかい。
まあ、してて且つ出来てるからリモート接続が可能と判断してるのだろうけど。
念のため。
636635:2006/01/26(木) 11:22:00 ID:???
ああVMとかで仮想OSでやってのかな。
だったら、環境をもちっと詳しく説明して欲しい。
637630(リモート接続について):2006/01/26(木) 11:49:24 ID:JRZNHhZI
>>635
>これも変。
確かに変かも。「クライアントのホスト側でmysqlコマンドを実行したら」は「クライアントが動作しているマシン側でmysqlコマンドを実行したら」がいいのかも。

>そのパイプはネットワークで共有してるのかい。
わかりません。名前付きパイプはファイルと同じようなものとしか知らないし、マニュアルにもどこに作られるのか書いてません。どうしたらわかるのかぜひ教えてください

>ああVMとかで仮想OSでやってのかな
VMとか仮想OSとかは使っていません。
638NAME IS NULL:2006/01/26(木) 16:14:49 ID:VAoZdxJl
CPUamd64 FreeBSD 5.4-RELEASE ports
mysql4.1.16 なんですが、最近サイトを見てみたら、
linux の場合、amd64 は別のダウンロードになっている。

FreeBSDには区別はないようだけど、これはどうなんだろう?
639NAME IS NULL:2006/01/26(木) 18:19:35 ID:???
>>638
見てるのがバイナリパッケージだから区別があるんでないの?
Source RPMやLinuxでもソースパッケージのやつには区別がないでしょ。
640NAME IS NULL:2006/01/26(木) 18:37:08 ID:VAoZdxJl
>>639
そういうことですか。amd64で3回くらいクラッシュした
ので、気になっていました。最近落ち着いていますけど。

どこに問題あるか分からない、FreeBSD0-amd-stable、mysql、apache2.2

いまはstable はやめてます。
641NAME IS NULL:2006/01/27(金) 10:52:07 ID:???
>>640
FreeBSD/amd64 を使っている人の会話とは思えないなー
642NAME IS NULL:2006/01/27(金) 22:08:12 ID:WXQfxalG
ID|point1|point2
-------------
0 |A   |A
1 |B   |B
2 |B   |C
3 |C   |B
4 |C   |A

select ID form table where point1 = "B" or point1 = "C"

ID 1/2/3/4 が残る

select ID form table where point2 = "A" or point2 = "B"

IDが 1/4 が残る

といった風に、point1で絞り込んだものを、point2で絞り込みたいのですが
MySQLのバージョンが3でサブクエリが使えず、一つのクエリ文にできません。

どうやったらシンプルに一つのクエリ文に出来るでしょうか?
643NAME IS NULL:2006/01/27(金) 22:22:13 ID:???
>>642
ID = 3 は残らないの?
644642:2006/01/27(金) 22:24:20 ID:???
>>643
失礼。3も残ります。
645NAME IS NULL:2006/01/27(金) 22:31:34 ID:???
>>644
例題通りの内容なら
select id from table where (point1 = 'B' or point1 = 'C') and (point2 = 'A' or point2 = 'B');
でいいと思うけど。
もっと複雑な条件なら、こねくり回すより一時テーブルでも使ってシンプルに処理した方が楽ぢゃない?
646NAME IS NULL:2006/01/27(金) 22:32:50 ID:RMh9y0tr
Apache2+PHP5+MySQL4をWindows 98SEインストールしたのですが
mysql>show databases
をやっても
mysql> SHOW DATABASES;
+----------+
| Database |
+----------+
| test |
+----------+
1 row in set (0.06 sec)
な感じで、あるはずのMySQLの管理用DBが見当たりません。
無くても問題無いものなんでしょうか?
647NAME IS NULL:2006/01/27(金) 22:42:06 ID:???
上rootでloginしたら見えました。
648NAME IS NULL:2006/01/27(金) 22:44:08 ID:???
>>642

SELECT t1.ID
FROM table AS t1, table AS t2
WHERE t1.point1 IN ( "B", "C") AND t1.ID = t2.ID AND t2.point2 IN ("A", "B")

とかかな?
試してないけど。

あ、 OR のかわりに IN を使ってます。
OR のほうがいいなら適当に書き換えてちょ。

649NAME IS NULL:2006/01/27(金) 23:20:37 ID:TDOvnH/K
MySQLで再帰的な?行の選択ってどうすればいいんでしょうか

たとえば

1  abc  def
2  ghi  jkl
3  def  mno
4  pqr  stu
5  mno  vwx
 
という表から
abc  vwx
def  vwx

のように左から3番目のフィールドと
2番目のフィールドが等しいものを再帰的に選択する
といったことです
所望の表はいいかげんな表現です
言いたいことは、2番目と3番目のフィールドが
等しいものを数珠繋ぎ式に取得したいということです

無理そうだなとうすうす感じてはいるのですが・・・
ご意見ありましたらお願いします
650NAME IS NULL:2006/01/27(金) 23:28:58 ID:???
SQLで再帰なんて一般的にできるの?
651642:2006/01/27(金) 23:55:18 ID:???
>>645,>>648
レスありがとうございます。
参考にさせてもらいます。

上記2つのやり方+一時テーブルの3つの中から
パフォーマンスがいいのを選択しようと思います。
652NAME IS NULL:2006/01/28(土) 00:00:18 ID:???
>>650

SQL99 なら WITH RECURSIVE句 でできるよ。


653NAME IS NULL:2006/01/28(土) 00:43:30 ID:???
レンタル日記システムを作ったのですが
当初、そんなにユーザが増えると思っていなかったので
1ユーザ=1テーブル と設計しました。
ユーザが想像以上に増えてしまったため、
table_cacheをはみ出てしまい、
テーブルのオープンに時間がかかってしまっています。

テーブルをまとめればいいのですが、
現在 1ユーザ=1テーブル のため、
日記が更新されない時はquery cacheがヒットしてくれます。
また、writeロックが頻繁に行われるため、速度が劇的に低下しそうです。

これを解決したいのですが、いいアイデアが浮かびません。
皆様のお知恵をお貸しください。
よろしくお願いします。
654NAME IS NULL:2006/01/28(土) 01:13:17 ID:???
データ構成の見直しは当然として、DBだけでどうにかしようとせずに
アプリケーションレベルのキャッシュも検討すべきでは?

しかし日記システムでwriteロックが問題になるなんていったいどういうシステムなんだ。
655NAME IS NULL:2006/01/28(土) 01:14:11 ID:???
サービスの提供を辞める
656NAME IS NULL:2006/01/28(土) 01:30:09 ID:???
しかしなんで1スレッド=1テーブルとか、1ユーザ=1テーブルとか、
システム稼動中にテーブルががしがし増えていくような作りをするんだよ。
オブジェクト指向でいったら、1ユーザ=1クラス定義ってことになるんだぞ???
657NAME IS NULL:2006/01/28(土) 03:26:16 ID:???
>>653
テーブル構造が第3正規形になっていない
SQL が非効率的
インデックスを使うべき列にインデックスを適用していない
実は遅いのは MySQL じゃなくて MySQL を使ったプログラムの処理の方

およそこの程度の部分を見て解決策を考えれば自然とわかりそうなもんだが。

>>656
きっと1テーブルに1千万とか1億レコードとかあるんだよ。ハハハ。
658NAME IS NULL:2006/01/28(土) 07:31:03 ID:???
55万のテーブル作ろうとした香具師を思い出した ww
659NAME IS NULL:2006/01/28(土) 10:36:46 ID:???
それで便乗なんだけど
テーブルの構成そのものが動的に変化するようなものを
どう扱えばいいか悩んでる

CSVっぽいテキストデータをもとにDBに突っ込むんだけど
先頭行に各項がintかtextかとかが書いてあって
次の行からそれの実データが入ってるような感じ
テーブルを動的に作ればいいやとか軽く考えてたら
マジで種類が増えてきて困った
テーブル55万とか笑えない。なきそう。
660NAME IS NULL:2006/01/28(土) 13:15:30 ID:???
テーブルは型を定義して初めて存在する。
型が定義できないならDB使うのやめるか、自分でそういう処理系を作れ。
661NAME IS NULL:2006/01/28(土) 14:39:06 ID:YsFL5hLY
>656
すみません、作っちゃったんです・・・
ユーザが増加していく途中で、ちょっとやばそうに感じたので、
書き込みのときに行しかロックしないinnodbを使うことを考えたのですが、
MyISAMみたいに、定義ファイルと、データファイルと、インデックスファイルが
別々じゃないことが気持ち悪くて、やめてしまいました。
そのときは、table_cacheを8192くらいまで増やして対応してしまいました。
662NAME IS NULL:2006/01/28(土) 15:03:13 ID:???
>>661
だからなんでロックする必要があるの?
1記事1クライアントでしょ。精々クライアントで複数窓
開いた時の対処ぐらいっしょ。
663NAME IS NULL:2006/01/28(土) 15:04:01 ID:???
>>654
アプリケーションレベルのキャッシュは以前はやっていたのですが、
複数APサーバ間のデータの同期がどうしてもうまく行かなかったんです。
定石とかあればご教示ください。

>>657
> テーブル構造が第3正規形になっていない
たとえうまく正規化できているとしても、
テーブルにロックがかかることには変わりはないのではないのでしょうか?
(むしろ増える??)

SQL文、インデックスに関してはexplainとかで調べてみたところ、
問題ないようです。

ただ単純にtable_cacheをどんどん増やしてしまって
(例えば/proc/sys/fs/file-maxの数に届かない限界くらいまで)
大丈夫なのでしょうか?
664NAME IS NULL:2006/01/28(土) 15:09:05 ID:???
>662
テーブルをロックするのは私のアプリじゃなくて、
MySQLサーバが勝手にしちゃうのかと思います。
テーブルの更新は多いもの、多いときで、秒間10回以上あります。
665NAME IS NULL:2006/01/28(土) 15:45:21 ID:???
http://dev.mysql.com/doc/refman/4.1/ja/table-locking.html

ここの10行目あたり、挿入がされているときに読み取りができるみたいね
666NAME IS NULL:2006/01/28(土) 16:47:28 ID:???
>>642
よくわからんけど、Webアプリなんでしょ??
トランザクションは短くしてるんだよね??
ページをまたがってトランザクション持ち越してないよね??
667NAME IS NULL:2006/01/28(土) 20:11:08 ID:???
>>661
4.1以降ならinnodb_file_per_tableを使えばテーブルごとに別ファイルになった気がするよ。
(データとインデックスは一緒だけど。frmは元々別だ)

管理テーブルが別にあるのでMyISAMと違って単純コピーでOKじゃないけれど
いちおうリストア手順もある。

668NAME IS NULL:2006/01/28(土) 22:33:25 ID:bnFq4f4x
JDBCなんですが、、、
import java.sql.*;
class DbTest{
public static void main(String[] args){
try{
Class.forName("com.mysql.jdbc.Driver");
String strConn="jdbc:mysql://localhost/jamyto"
+"?user=Mulder&password=TrustNo1"
+"&useUnicode=true&characterEncoding=sjis";

Connection conn=DriverManager.getConnection(strConn);

Statement stmt=conn.createStatement();

String strSql="SELECT*from person";

ResultSet rs=stmt.executeQuery(strSql);


669NAME IS NULL:2006/01/28(土) 22:39:53 ID:bnFq4f4x
while(rs.next()){
System.out.println(rs.getInt("id")+":"+rs.getString("name"));
}
rs.close();
stmt.close();
conn.close();
}
catch(SQLException e){
System.out.println("データベースのエラーです。");
System.out.println("エラーメッセージ:"+e.getMessage());
}
catch(Exception e){
e.printStackTrace();
}
}
}
これでAccess denied for user:'[email protected]'ってなっちゃいます。助けて

670NAME IS NULL:2006/01/29(日) 00:39:03 ID:???
>>669
そりゃあれだ。そのテーブルに対して
Mulder@localhsotの使用許可が無いだけだあん。
mysql mysql で許k
671NAME IS NULL:2006/01/29(日) 13:05:53 ID:???
先頭一致で探すのと
完全一致で探すのは
検索速度に差が出ますか?
672NAME IS NULL:2006/01/29(日) 14:52:13 ID:???
実際にやってみればすぐ分かります
673NAME IS NULL:2006/01/29(日) 15:06:39 ID:???
変更が大変だから質問してるんだけど
674NAME IS NULL:2006/01/29(日) 15:22:13 ID:???
答えが得られない人はたいてい我儘で自己中心的な物言いをしています。
他人に教えを乞う理由が「面倒くさいから」では誰も答える気にならないでしょ。
口先だけでも繕えばいいじゃないですか?私だったらそうします。
あなたがたは本当にそんな自明の事すら気づかないのですか?
だから池沼って言われちゃうんですよ。
あなたの書いたものを見た人がどう感じるか気にした事がありますか?
人の気持ちを推し量るのは難しい事ですが、
あなたがたの書き込みはその努力を放棄しているように見えます。
まるで他人は全て俺の奴隷だと思っているように見えます。
私には文章が下手とか若くて経験不足とかネットの匿名性とかのせいには思えません。
それはあなたという人間について何か本質的なものを語っているように思えるのです。
そして私はそれに何か不気味なもの、我々が悪と呼んでいる何かを感じます。
だからあなたの書き込みには攻撃的なレスが付きます。
本能的にあなたを恐れているから、あなたに何か邪なものを感じるからです。
どうなんですか?あなたは人類の敵なんですか?邪悪の源ですか?
いったいあなたは何に魂を売り渡してしまったんですか?
675NAME IS NULL:2006/01/29(日) 15:43:51 ID:???
>>674 もっと簡潔にまとめてくれ。
676NAME IS NULL:2006/01/29(日) 15:51:20 ID:???
>>674あまり長いとわからんよ
677NAME IS NULL:2006/01/29(日) 15:55:11 ID:???
>>673
死ね
>>675
馬鹿
>>676
池沼
678NAME IS NULL:2006/01/29(日) 16:11:15 ID:???
>>674
んん、このコピペもらっとこ。

>>673
氏ね。
679NAME IS NULL:2006/01/29(日) 16:19:47 ID:???
>>673
実際の運用なんかを変更しなくても、サンプル用のテーブルやデータを作って、
それで実験してみましょう。

データベースの処理速度なんて、所詮、データベースの細かなバージョンや
環境によって左右されるものです。

人のやったテスト結果が、自分の環境でも同じとは限らないので、
自分で試してみるのが確実です。
680NAME IS NULL:2006/01/29(日) 16:31:09 ID:???
これからはどんな質問にも「実際にやってみればすぐ分かります」と答えようね。
681673:2006/01/29(日) 16:35:11 ID:???
うわすっげーレス付いてるし叩かれてるしww

実際やってみたけど変化無し。意味ねーww
50万件程度だけどな。

>>679さんのように返して欲しかったな。
運用データ変更しちゃったよww


682NAME IS NULL:2006/01/29(日) 16:38:38 ID:???
>>680 既にそういう傾向だけどなーー。
683NAME IS NULL:2006/01/29(日) 16:40:05 ID:???
>>681

実際にやってみればすぐ分かったようだねwwww
684673:2006/01/29(日) 16:42:41 ID:???
>>683
うん。だから>>672は間違ってないww

>>680 >>682
いい傾向じゃんかww
685NAME IS NULL:2006/01/29(日) 16:54:01 ID:???
>>672のレス見て、そして>>673のレス見て、
この馬鹿は実際にやってみても判らないだろうなぁとは思ったけどやっぱりね。
たった一行のレスがその人間についての本質を語るって事があるんだなぁ。
686673:2006/01/29(日) 17:48:29 ID:???
実際にやってみたら、解決しました。
























今後はこういう悪戯も出来そうだな。
687NAME IS NULL:2006/01/29(日) 18:41:21 ID:???
トリップ推奨
688673:2006/01/29(日) 19:34:56 ID:???
大漁だなwwww
689NAME IS NULL:2006/01/29(日) 19:59:15 ID:???
>>688
いや、ひとりで書き込んでるんだけど?
690673:2006/01/29(日) 20:58:06 ID:???
俺が馬鹿だった。
今では反省している。
691NAME IS NULL:2006/01/30(月) 00:17:14 ID:???
MYSQLの文字コードの設定で一般的に多く使われるものはなんでしょうか?
692NAME IS NULL:2006/01/30(月) 00:35:31 ID:???
ISO-8859-1
693NAME IS NULL:2006/01/30(月) 01:23:24 ID:xS63ihda
MySQL 3.23.58 + PHP4です。
普通のINSERTクエリを使っているのに、なぜか2重にデータが登録されてしまいます。
デバックしてみても、クエリは1回しか発行されていないし、phpMyAdminから同じ
クエリを実行しても正常にデータが登録されます。

テーブルの構造は
PRIMARYキー(auto_increment)|普通のvarchar列
です。

PRIMARYキーの数字を指定しても、+1されて登録されます。どなたかアドバイスを
ください。ブラウザからサーバへ2重にデータが送られているとしか思えないのですが
その場合、PRIMARYキーの重複でエラーが出るだろうし…。
694NAME IS NULL:2006/01/30(月) 01:29:34 ID:???
>>691
やってみたらわかる
695694:2006/01/30(月) 02:09:07 ID:???
原因が分かりました。
バカバカしい原因でしたが、もしかしたら似たような症状で
困っている人のために残しておきます(いないか orz)。

現象:PHPから1回だけクエリを実行しているのに、2回実行される。
原因:HTMLのヘッダでCSSリンクミスがあり、ブラウザが2回読み込みにいっていた

ちなみに、MacIEでは再現されず、SafariやFirefoxでCSS(JSファイル等も?)の
リンクエラーがあると2回サーバーにアクセスする挙動みたいでした。
696NAME IS NULL:2006/01/30(月) 07:36:46 ID:???
>>695
ということは2重登録の防止処理がないようだから、
何らかの処理を組み込んどいた方がいいよ。
ブラウザでコンテンツのリロードや、戻るでPOSTし直す場合もあるから。
既にHTTPのLocationで飛ばしてるぐらいはやってるのかも知れないけど。
697NAME IS NULL:2006/01/30(月) 09:57:37 ID:???
http://st.srvf.org/d/?date=20031124
この方の日記より
>どうやら大抵のJDBCドライバは、PreparedStatementをキャッシュするらしい
とあるのですが、
MySQLのJDBCドライバはこの機能がついているのでしょうか?
ついているのでしたら、そのドキュメントを見たいのですがどこにあるのでしょうか?
698NAME IS NULL:2006/01/30(月) 11:15:46 ID:???
>>697
JDBCドライバによる性能向上のための技術は、99.9%がキャッシュ機能の利用だよ。
ちなみにMySQLのJDBCドライバ、すなわちConnector/Jについてのキャッシュ機能については、
公式のリファレンスマニュアルに全部書いてある。

ttp://dev.mysql.com/doc/refman/5.0/en/cj-configuration-properties.html (英語)

あるいは誰かが日本語にこれを訳したっぽいやつを見るといいかも。

http://ikda.net/fswiki/wiki.cgi?page=Connector%2FJ+%A5%EA%A5%D5%A5%A1%A5%EC%A5%F3%A5%B9%A5%DE%A5%CB%A5%E5%A5%A2%A5%EB%C6%FC%CB%DC%B8%EC%CC%F5#p10

接続プロパティ名でいうと、この辺かな。
・prepStmtCacheSize
・prepStmtCacheSqlLimit
・cachePrepStmts
・cacheResultSetMetadata
・cacheServerConfiguration
699NAME IS NULL:2006/01/30(月) 11:18:47 ID:???
>>697
そうそう、言い忘れたけどMySQLサーバ側にPreparedStatementが実装されたのはMySQL 4.1からで、
MySQL 4.0の場合はConnector/J自身によるPreparedStatementエミュレート実装(実態はStatementで
若干高速化)なのでサーバのバージョンも良く考えた方がいいよ。
700NAME IS NULL:2006/01/30(月) 11:31:13 ID:???
>698
どんぴしゃの情報ありがとうございます。
どうやらデフォルトではキャッシュはされないようですね。
接続時URLにcachePrepStmts=trueをセットすることによって有効になるようですね。
感謝感激雨あられです!
701NAME IS NULL:2006/01/30(月) 14:48:50 ID:???
rootでログイン後、use mysql;が1044で弾かれるんだが、何ででしょ?
create database test_php;
は通るけど、
create database php_test;
は1044で弾かれたりする。

どうも解せないので質問してみますた。

#mysql --version
mysql Ver 11.18 Distrib 3.23.58, for redhat-linux-gnu (i386)
702NAME IS NULL:2006/01/30(月) 16:46:08 ID:???
LinuxでユーザごとQuotaを設定する方法が分かった。
使う人あんまいないと思うがとりあえず可能だってことが分かったので書いておく。

データベースディレクトリに任意のディレクトリを作成し、ユーザ名はmysql(コンパイル時に指定したユーザ)で、
groupを制限かけるために新しく作って変更する。で、データベースディレクトリをchmod g+sしてやる。groupquotaを設定してやる。
あとはデータベースをディレクトリ名と同じで作ってやると、その中に出来るファイルは全部グループが自動的変更され、
groupquotaの設定通り容量オーバーになると書き込み(読み込み・接続もだが)が出来なくなる。
順序はべつにデータベース作ってからでもいいが chgrp -R で中身のファイルも変更してやるといい。

データベースサーバーがWeb等と同じ鯖であるなら自分のディレクトリからファイルを消せばまた
接続できるようになるので、それから消せばいい。鯖が別々の場合には、何らかの形で
quotaを一時的に増やしてやると良い。

703NAME IS NULL:2006/01/30(月) 17:46:00 ID:???
>>700
そのrootでログインてのはMySQLの"root"ユーザで間違いないんだよな? (OS側のrootユーザとは別物)

704NAME IS NULL:2006/01/31(火) 00:07:16 ID:???
学校でmysqlの宿題が出ました。
どうしたら、いいかな?
705NAME IS NULL:2006/01/31(火) 00:12:00 ID:???
実際にやってみればすぐ分かります
706NAME IS NULL:2006/01/31(火) 08:05:33 ID:???
実際にやってみたら、解決しました。
707697:2006/01/31(火) 11:20:07 ID:???
>>698
設定したところうまくいっているようです。
どのように確認したかといいますと、
Com_stmt_prepareの値が今までと比べて激減したためです。
ありがとうございました。
708NAME IS NULL:2006/01/31(火) 20:22:14 ID:4CGnXA//
MySQL + PHPでの質問なのですが、
htmlからの取得した条件で検索した結果を、ページ制御を
かけながら、検索結果を表示するいい方法はありませんか?
limitや一時テーブルを作成する以外の良い方法を駄目な私に恵んで下さい。
709NAME IS NULL:2006/01/31(火) 20:53:06 ID:???
実際にやってみればすぐ分かります
710NAME IS NULL:2006/01/31(火) 21:36:59 ID:???
>>708
PHPで処理するか、JavascriptでDOMでも使ってページを制御。
711708:2006/01/31(火) 21:58:18 ID:???
実際にやってみたら、駄目な私でも出来ました。
712NAME IS NULL:2006/02/01(水) 16:41:26 ID:???
XOOPSを試しているんですが文字化けするんですが、
MySQLをutf-8で動かしているせいのような気がするのですが、
そのデータベースだけujisで保存したりする方法ってあるのでしょうか。
713NAME IS NULL:2006/02/01(水) 16:46:14 ID:???
XOOPSは開発者もコミュニティもイカレポンチなので使わない事を推奨
714NAME IS NULL:2006/02/01(水) 16:46:46 ID:???
phpから呼び出して使っているのですが
numがキーでvalという項目があるテーブルhogeについて
valを1足して、そのvalを読む ということをしたいです。

UPDATE hoge SET val=val+1 WHERE num=1;
SELECT * WHERE num=1;

こういうことを一発でうまくやる手法はありますか?
やはり普通にテーブルロックだの何だのをしないと
ダメでしょうか
715NAME IS NULL:2006/02/01(水) 17:08:06 ID:???
>>714
それはFAQです。
引数付きのLAST_INSERT_ID()関数を使って、下のようにします。
UPDATE hoge SET val=LAST_INSET_ID(val+1) WHERE num=1;
そしてAUTO_INCREMENTの時と同様にLAST_INSERT_ID()で値を取得すればいい。
716NAME IS NULL:2006/02/01(水) 17:19:10 ID:???
>>713
そこをなんとか教えて下さい。
俺もこんなの入れたくないんだが入れてくれ上司に頼まれて・・・
717NAME IS NULL:2006/02/01(水) 17:25:57 ID:???
>>716
やってみればすぐに分かります。





というのもそろそろあきたからマジレスすると、

>そのデータベースだけujisで保存したりする方法ってあるのでしょうか。

my.cnfに"default-character-set=utf8"と設定してあっても、
テーブル作成時のCREATE文に"default charset=ujis"と付ければ
そのテーブルはutf8じゃなくてujisになる。

指定しない場合には、"default-character-set=utf8"が適用されてる。

XOOPSが自動生成したテーブルのDDL文を覗いて見れ。

"show create table xxxx"な。
718NAME IS NULL:2006/02/01(水) 17:27:06 ID:???
>>716
まともな用途ならやめとけ。
何回、HPが書き換えられても、Xoopsのせいじゃないと言い張りつづけ、セキュリティーホールが指摘されると切れる管理者が作ってるCMSだ。
719714:2006/02/01(水) 17:26:15 ID:???
>>715
ありがとうございます。大変助かりました。
後ほど妹のパンツうpさせていただきます。
720NAME IS NULL:2006/02/01(水) 17:33:28 ID:???
そのパンツをブルセラショップに売ってオライリーのクックブック買えば全部載ってる。
721NAME IS NULL:2006/02/01(水) 17:35:13 ID:???
>>712
MySQL4.1以降なら方法はあるよ。
マニュアルに記述されてるから、ちゃんと嫁。
722NAME IS NULL:2006/02/01(水) 17:35:19 ID:???
>>717
おお、ありがとうございます。早速やってみます。結果は明日ぐらいでしょうが・・・

>>718
XOOPSに変わるものとか存在しますか?
723NAME IS NULL:2006/02/01(水) 17:37:40 ID:???
>>718
それは正確には今のCubeじゃなくて、fork前のXOOPSの方だよね。
724NAME IS NULL:2006/02/01(水) 17:41:07 ID:???
>>720
たとえば今回のパンツFAQはVol.1と2どちらに載ってるもの?
725NAME IS NULL:2006/02/01(水) 17:49:54 ID:???
>>724
オライリージャパンで目次見たらVol.2のようだ。
726NAME IS NULL:2006/02/01(水) 17:56:59 ID:???
おらいりのデータベース本は表紙が両生類爬虫類ばかりで
家族にはすこぶる評判が悪い
727NAME IS NULL:2006/02/02(木) 00:00:26 ID:???
ハイパフォーマンスはハイタカで
実践PgSQLはマンモスだけどなーーー。
728NAME IS NULL:2006/02/02(木) 01:21:08 ID:???
>>722
XOOPS Cubeなら安全だ。日本語情報も充実している。そっちにしとけ。
729NAME IS NULL:2006/02/02(木) 01:22:37 ID:???
ステータスを管理するフィールドの中身って文字列にしてる?
それとも数値にして別にステータス管理用テーブルを作ってる?
730NAME IS NULL:2006/02/02(木) 01:50:10 ID:???
オライリーでは相撲取りも動物扱いだしな
731NAME IS NULL:2006/02/02(木) 03:11:34 ID:???
>>730
+1
732NAME IS NULL:2006/02/02(木) 08:41:22 ID:???
>>729
数値にしてる。
例えば「4:危険」「5:非常に危険」としている場合
条件で4以上であるなどと、さくっと出せるから。
ステータス間に繋がりが無い場合は、ディクスペース多少
食うだろうけど、文字でも良いと思うよ
733NAME IS NULL:2006/02/02(木) 10:43:33 ID:???
734NAME IS NULL:2006/02/02(木) 14:48:12 ID:kLKQXPuJ
すいません。MySQL初心者です。
4.0.25をインストールしたのですが、Start the Serviceしてもサーバーに
接続できません。
どなたか教えてください。お願いします。
735NAME IS NULL:2006/02/02(木) 14:53:07 ID:???
>>734
悪いんだが、MySQLの設定をはじめるようなレベルじゃないんじゃないの?
教えようにも教えようが無いよ・・・
736NAME IS NULL:2006/02/02(木) 14:54:40 ID:???
>>729
ENUM型なんか使ってみたりした。
手動でSELECTしたりするならわかりやすいけど、
ほとんどphpから叩いてたのでそんなに嬉しい気はしなかった。
737NAME IS NULL:2006/02/02(木) 15:05:44 ID:???
>>734
では、詳細な状況を"教えてください"としか...

Serviceで起動できないのなら、設定ファイルの記述が適正でない場合が殆ど。
起動できて接続できないのなら、マニュアルと巷のインストールドキュメントを
ちゃんと色々読んでみそ。
738NAME IS NULL:2006/02/02(木) 16:01:03 ID:???
>>733
SoftAgencyの名前がない。もしかして切捨てですか...
739NAME IS NULL:2006/02/02(木) 17:42:20 ID:???
>>734
その質問じゃMySQL初心者以前に、技術系ML初心者。誰も答えられん。
740NAME IS NULL:2006/02/02(木) 18:02:41 ID:???
>>732
なるほど。そういうメリットもありますね。

数値のメリット: diskスペースの節約
文字列のメリット: ソースが分かりやすい

みたいな感じで思ってました。

数値の場合、ステータスの名前とか説明のテーブルは作ってますか?
741NAME IS NULL:2006/02/02(木) 18:03:37 ID:???
>>736
ENUM型って2種類のステータスしか扱えなくないですか?
なんか勘違いしてるかな、俺
742NAME IS NULL:2006/02/02(木) 21:02:51 ID:???
743NAME IS NULL:2006/02/02(木) 22:52:44 ID:???
すいません。MySQL初心者です。
検索がうまくいきません。
どなたか教えてください。お願いします。
744NAME IS NULL:2006/02/02(木) 22:58:05 ID:???
>>743
それで答えられるようなエスパーさんは、今休暇中です
745NAME IS NULL:2006/02/02(木) 23:24:05 ID:???
社外秘なので内容は書けないんです。
お願いします。
746NAME IS NULL:2006/02/02(木) 23:43:06 ID:???
唖然
747NAME IS NULL:2006/02/02(木) 23:44:00 ID:???
それはずっと秘密のままにしておきましょう
748NAME IS NULL:2006/02/02(木) 23:47:36 ID:???
>>745
では、社内で解決してください
749NAME IS NULL:2006/02/02(木) 23:52:35 ID:???
わからないなら答えないでください。
わかるひと教えてください。
750NAME IS NULL:2006/02/03(金) 00:05:37 ID:???
>>749
まじで師ね
751NAME IS NULL:2006/02/03(金) 00:17:33 ID:???
すいません。回答者です。
言っている事がわかりません。
どなたか教えてください。お願いします。
752NAME IS NULL:2006/02/03(金) 00:24:52 ID:???
これどっからどこまでがネタなの?
753NAME IS NULL:2006/02/03(金) 00:27:06 ID:???
まんこ♪まんこ♪あんあん♪
754NAME IS NULL:2006/02/03(金) 01:27:57 ID:???
>>752
おれもオモタ
ネタにしては稚拙だし本気にしては馬鹿すぎる
755749:2006/02/03(金) 02:30:17 ID:???
解決しました。ありがとうございました。
756NAME IS NULL:2006/02/03(金) 06:30:00 ID:???
誰も訳が判らないうちに一つのドラマが終わりますた
757NAME IS NULL:2006/02/03(金) 10:39:08 ID:???
アバターのような画像ファイルをDBにつっこもうか、ファイルのまま保存しようか
迷っています

双方のメリット・デメリットって何でしょうか?
758NAME IS NULL:2006/02/03(金) 10:43:20 ID:???
>>757
最近の流行はやってみればわかる
らしいよ
759NAME IS NULL:2006/02/03(金) 13:37:45 ID:???
>>757
ファイル保存
760NAME IS NULL:2006/02/03(金) 14:07:04 ID:???
>>757
マルチメディア(藁)データを、そのままファイルのまま管理すればいいのか
DBに入れた方がいいのかは「やってみれば判る」

DBからの読み込みをキャッシュするようにして、DBに入れた方が
一元管理出来て良いと思うけど、自分ところはWebサーバx1にDBサーバx1の
簡単な構成なのでファイルのままでやってる。
761NAME IS NULL:2006/02/03(金) 14:24:40 ID:???
>>757
ローカル(開発環境)と同期とったとき、
データ管理がマンドクサイからファイルで保持
762NAME IS NULL:2006/02/03(金) 21:15:44 ID:???
>>757
実際の運用なんかを変更しなくても、サンプル用のテーブルやデータを作って、
それで実験してみましょう。

ファイルやデータベースのメリット・デメリットなんて、所詮、データベースの細かなバージョンや
環境によって左右されるものです。

人のやったテスト結果が、自分の環境でも同じとは限らないので、
自分で試してみるのが確実です。
763NAME IS NULL:2006/02/03(金) 22:54:19 ID:???
結局、自分で試してみろよ、になってしまうなw
764NAME IS NULL:2006/02/04(土) 02:33:45 ID:???
画像ファイルをDBに放り込むような奴とは一緒に仕事したくないがな
765NAME IS NULL:2006/02/04(土) 06:56:16 ID:???
DBに画像ファイルを格納するメリットって思いつかない。
766NAME IS NULL:2006/02/04(土) 07:47:18 ID:???
大手はほとんどやってるけど?
767NAME IS NULL:2006/02/04(土) 10:53:55 ID:???
>>765
人事システムの社員DB等で、顔写真とかどうするつもりなん?
768NAME IS NULL:2006/02/04(土) 10:56:23 ID:???
>>767
その場合でもファイル保存で支障はないと思うが
769NAME IS NULL:2006/02/04(土) 12:14:55 ID:???
ファイルシステムというOS標準装備のDBを使わないのはもったいない
770NAME IS NULL:2006/02/04(土) 15:14:44 ID:???
DBに画像ファイルも入れられるのを知らないやつ多すぎw
771NAME IS NULL:2006/02/04(土) 16:23:19 ID:???
>>770
ただのバイナリデータである画像は入れられるが、ファイルは入れられない。
772NAME IS NULL:2006/02/04(土) 16:45:57 ID:???
DBに画像ファイル(のデータ)を入れる・・・

メリット
・レコード操作時の1アクションで追加削除が出来る
・ファイルとして扱わずに済む

デメリット
・DBがエッセンスとしてのデータ以外のデータで膨れる
・ファイルとして見れない(メリットのと相反するが)
773NAME IS NULL:2006/02/04(土) 17:31:08 ID:1yc2ZL1r
MERGEテーブルを使用しているのですが、
例えばa,b,c,d,e..とMyISAMがあり、allというテーブルに
MERGE設定し、UNION()でa,b,c,d,e..を設定し、作成したのですが
WHEREで条件検索するときにどのテーブルから引き出したのかを知りたいのですが、無理でしょうか?

MySQL4.0.26を使用してます。
774NAME IS NULL:2006/02/04(土) 19:22:21 ID:???
ダメリット
・DBのサイズが膨らみ保守に時間がかかる。
・・ファイルとして扱う事が出来ない。
775NAME IS NULL:2006/02/04(土) 19:23:38 ID:???
>>773 試してみればわかるよ。
776NAME IS NULL:2006/02/04(土) 21:17:03 ID:???
画像をDBに入れていると思われる大手サイトってある?

メリットがよくわからんのだが…
binaryとして検索するメリットってないよね?
777NAME IS NULL:2006/02/04(土) 21:32:47 ID:???
>>776
データとして入れておけばいいんだから
ファイルとして扱うことがまったく無いなら
選択肢としてはアリかも
778NAME IS NULL:2006/02/04(土) 21:49:38 ID:???
>>776
サイズの大きな画像データを大量にDBに入れるのは、DBのバックアップ
などの保守が面倒。100万枚のJPEG画像も通し番号を付けて、番号を
区切って、10000のディレクトリーに入れといた方が、管理が楽。
779NAME IS NULL:2006/02/04(土) 23:06:03 ID:???
>>778
その代わり、FSの制約に縛られるじゃない?
たとえばそのあまりに大量のファイルはディレクトリ分割しないとダメとか。
あとファイルシステムならではとして、そのDBに
アクセス権限をもっていない第3者にも見られてしまう。
780773:2006/02/04(土) 23:22:53 ID:1yc2ZL1r
SELECT * FROM `all` WHERE `name` LIKE '%test%';
で、結果が帰ってきた場合、どのテーブルから返ってのかがわからなくて不便なんです。。
781NAME IS NULL:2006/02/05(日) 00:12:19 ID:???
DBに画像データを格納するのはDBサイズの膨大と画像データアクセスへのカプセル化とのトレードオフだね。
782NAME IS NULL:2006/02/05(日) 00:38:43 ID:???
>サイズの大きな画像データを大量にDBに入れるのは、DBのバックアップ
などの保守が面倒

どっちにしろ画像データのバックアップもするんだから保守の面倒さは同じ
783NAME IS NULL:2006/02/05(日) 00:42:38 ID:???
>>780
各テーブルa,b,c,d,e..にテーブル識別のフィールドを作れ。
784NAME IS NULL:2006/02/05(日) 02:03:34 ID:???
巨大な可変長のレコードにすることで、
・ディスクシーク回数の増加
・ディスクキャッシュの効率低下
・レコード削除・追加処理の速度低下、断片化

数千〜数万件程度で、目に見えるくらいの速度差が出てくるんじゃないかな

DB経由するよりも、ファイル直接の方が単純転送速度比較しても速いし、
DB鯖にトラフィックを集中させるのも、システム設計として根本的に間違ってる。
画像等のファイルを分離して別鯖(NASでもよい)にしておくのが効率的。


こうなる前に設計段階からちゃんと考えとけよ?
http://itpro.nikkeibp.co.jp/members/SI/ITARTICLE/20030530/1/
785NAME IS NULL:2006/02/05(日) 02:45:06 ID:???
あれ、blobってそもそもそのへんの面倒をうまいこと見てくれる
フィールド型じゃなかったっけ。
786NAME IS NULL:2006/02/05(日) 03:00:24 ID:???
データベースだけ見るんじゃなくてシステム全体で考えなよ。
787NAME IS NULL:2006/02/05(日) 03:53:37 ID:???
>>784
リンク先
>DBコネクション・プーリング機能を利用するDB接続関数「pg_pconnect」を
いや、それコネクションプーリングじゃないから。
788NAME IS NULL:2006/02/05(日) 09:17:15 ID:???
下のコードはAPI文書によれば
Exceptionを吐くのですが、
何事もなかったかのように動きます。

Statement stmt = srcConn.createStatement();
ResultSet rs = stmt.executeQuery("select 1 + 1");
System.out.println("Is TYPE_FORWARD_ONLY ? " + (ResultSet.TYPE_FORWARD_ONLY == rs.getType()));

while(rs.next()){
System.out.println(rs.getInt(1));
}

while(rs.previous()){
System.out.println(rs.getInt(1));
}

これは仕様でしょうか、バグでしょうか?
よろしくお願いします。
789787:2006/02/05(日) 09:32:31 ID:???
すみません、これじゃmysqlじゃなくても同じようなコードですが、
一応サーバはmysql-4.1.16-nt
コネクタはmysql-connector-java-3.1.12
を使っております。
790NAME IS NULL:2006/02/05(日) 12:18:12 ID:ric2HNTG
オールアバウトのデータベースのページ
http://allabout.co.jp/career/database/
を見ながらwin2000+apache2.0.55+PHP5.1.1+Mysql5.0.18で 接続テストしてるんですが、
「test」というデータベースに接続しようとすると、

Warning: mysql_connect() [function.mysql-connect]:
Can't connect to MySQL server on 'localhost' (10061)
in C:\Program Files\Apache Group\Apache2\htdocs\mytest1.php on line 4
can not connect db

つーのが出て接続できません。
ソースはホームページそのままコピペで
<?
//DBへ接続開始 サーバー名--localhost ユーザー名--root パスワード--root
$dbHandle = mysql_connect("localhost","root","a");
//DBの接続に失敗した場合はエラー表示をおこない処理中断
if ($dbHandle == False) {
print ("can not connect db\n");
exit;
}
//db名 test
$db = "test";
//SQL文 tab1表から全行を取り出し、number列の昇順に整列する
$sql = "select * from tab1 order by number";
//SQL文を実行する
$rs = mysql_db_query($db,$sql);
//列数を取得する
$num = mysql_num_fields($rs);
//HTML文を出力 テーブルの開始を指定
print("<table border=1>");
//test表の列数と同じ回数を繰り返す
for ($i=0;$i<$num;$i++){
//HTML文を出力 列名を <td>で囲んで出力
print("<td>".mysql_field_name($rs,$i)."</td>");
}
//test表の行数と同じ回数を繰り返す
while($row=mysql_fetch_array($rs)){
//HTML文を出力 表の行の開始<tr> を出力
print("<tr>");
//test表の列数と同じ回数を繰り返す
for($j=0;$j<$num;$j++){
//HTML文を出力 列の内容を <td>で囲んで出力
print("<td>".$row[$j]."</td>");
}
//HTML文を出力 表の改行</tr> を出力
print("</tr>");
}
//HTML文を出力 テーブルの終了を指定
print("</table>");
//結果レコードをメモリから開放
mysql_free_result($rs);
//DBへの接続を切断
mysql_close($dbHandle);
?>
ですが、パスは「a」にしたのでこれに変えてみたけどダメです。
どこを直せばいいのでしょうか。


といった初心者の質問はどこですればいいんでしょうか。
791NAME IS NULL:2006/02/05(日) 12:34:11 ID:???
>>790
【PHP】下らねぇ質問はここに書き込みやがれpart15
http://pc8.2ch.net/test/read.cgi/php/1137236771/
792NAME IS NULL:2006/02/05(日) 13:58:34 ID:???
>>788
バグだと思う。com.mysql.jdbc.ResultSet.previous()および同prev()メソッドで
ResultSet.TYPE_FORWARD_ONLYをチェックしてない。

バグデータベースにも同じ現象は報告されていない。バグ報告よろしく〜。
http://bugs.mysql.com/report.php
793NAME IS NULL:2006/02/05(日) 17:57:44 ID:???
datetime型のフィールドdateを
SELECT date FROM hoge;
で取得したら
2006-02-05 17:55:00
というような文字列がかえってきますが、
timestampで取得したい場合は
どのようにSQL文を書けばよいのでしょうか?
794NAME IS NULL:2006/02/05(日) 18:28:25 ID:???
>>793
実際にやってみればわかる。









UNIX_TIMESTAMP関数
795722:2006/02/05(日) 19:15:17 ID:???
>>717のように改造して、テーブルをujisで作るようにはできたんですが、
やっぱutf8で保存され化ける…orz my.cnfでutf8指定していると
書き込み時にutf8にしてくれちゃうんでしょうか?

Xoops cube自体をutf8に変換するとOKみたいな事が書いてありましたが、
これは最後の手段としたいのでなんか方法はないでしょうか。
(といってもmy.cnfを晒さないとさっぱり分かり辛いでしょうが)

>>728
XOOPS CUBE使って見ています。
なんで未だにMySQL 3.xxしか対応していないんでしょうね…
796NAME IS NULL:2006/02/05(日) 19:36:16 ID:???
>>795
なんか断片的にしか知識を付けてないのが原因の気がする。
色々と端折らないで、ちゃんと根本から理解しないと駄目だよ。

・日本MySQLユーザ会FAQ
http://www.mysql.gr.jp/frame/modules/bwiki/?FAQ#content_1_40
・OSS WEB|MySQL日本語の旅
http://oss.timedia.co.jp/index.fcgi/kahua-web/show/MySQL%c6%fc%cb%dc%b8%ec%a4%ce%ce%b9
797722:2006/02/05(日) 21:05:00 ID:???
>>796
どうも。また1週間ぐらい調べてみます。dクス
798NAME IS NULL:2006/02/06(月) 00:10:35 ID:???
デフラグというか並びを最適化するときは
ダンプして再ぶち込みが一般的なの?
799NAME IS NULL:2006/02/06(月) 00:42:57 ID:???
>>798
ほい
http://www.buena-idea.net/~hironobu/mysql/m-2-07.html

ところで、PreparedStatement を使っていると
発行されたSQL文が
varchar の id カラムが
select * from report where id=0x73616F && no=1126321480437
みたいに16進数で発行されるときと
select * from report where id='aaa' && no=1137693052859
のように文字列で発行されるときがあります

この違いは何なんでしょう?16進数の方が速そうな感じはしますが。
800NAME IS NULL:2006/02/06(月) 01:06:55 ID:???
>>799
サンクスコ

ところで、デフラグとは逆のことを意図的に行うには
どうしたらいいと思う?
フラグメントわざと起こして能力測定とかしたいんだけど
801NAME IS NULL:2006/02/06(月) 01:21:12 ID:???
>>800
普通に、だーっとINSERTした後にUPDATEとかDELETEで間引くのは駄目?
802NAME IS NULL:2006/02/06(月) 01:22:53 ID:???
>>801
それしかないか・・・
効率良く散らかす手段なんてそうそう無いか
803JDBCドライバの中の人 ◆K1AKxx0vr2 :2006/02/06(月) 04:26:38 ID:???
コテつけてみた。期間限定。何か言いたいことがあったら今のうちにいってくれw

>> 799
16進数エスケープ処理が行われるのとされないのの違いを知りたいということだね。

APIレベルでいうと、マルチバイトの文字コード(ujis,sjis,utf8他)が設定されている状態で、
setBytes(int, byte[])が呼ばれた場合に16進数エスケープ処理が行われる。

一般的にマルチバイトの文字にとって普通の文字であっても、それをシングルバイトで
見た場合には制御文字である場合があるってのは分かるよね?(\nとかnull文字とか)

サーバ側でこういった「マルチバイト+制御文字」を適切に処理できるように、これまで
ずっとバグ潰しが行われてきてるけど、これをクライアント側でも一部負担しているということ。

例えば、setBytesメソッドをアプリが呼んでいないとしても、ClobやCharacterStreamを
Connectionに設定した文字コードとは別の文字コードでセットしているだとか、
サーバ側のmy.cnfのある設定が有効になっているだとか、いくつかのマイナーな条件に
適合した場合に、16進数エスケープ(16進数の文字列として送る)するようになるよ。

これはクエリそのものをサーバ側が適切に処理できなくてエラーを出したり文字が壊れたり
するのを回避するためのものなので、速度的なメリットは無いように思う。
804NAME IS NULL:2006/02/06(月) 09:24:08 ID:???
PRIMARY KEY が設定されてても、
同じ定義のインデックスは必要?
805NAME IS NULL:2006/02/06(月) 09:54:27 ID:???
phpmyadmin で文字コードの選択部分でujisが選択できない
(utf8しか表示されない)んですが、
ぐぐっても解決方法が見つかりません
へるぷみー
806JDBCドライバの中の人 ◆K1AKxx0vr2 :2006/02/06(月) 09:54:48 ID:???
>>804
つ show index from `テーブル名`
807NAME IS NULL:2006/02/06(月) 10:17:42 ID:???
>>806
同じものが表示された・・・つまり必要ないわけかー
わかりやすい説明さんく
808NAME IS NULL:2006/02/06(月) 14:29:18 ID:???
複数テーブルから同時に削除するクエリを教えてください。

テーブル A と B から
id = 'hoge' && count = 10
となる列を削除したいです。

ご教示よろしくお願いします。
809NAME IS NULL:2006/02/06(月) 15:37:44 ID:???
トランザクション使えよ
810NAME IS NULL:2006/02/06(月) 15:43:54 ID:???
一に正規化
二に正規化
三、四も正規化
五も正規化
811NAME IS NULL:2006/02/06(月) 15:47:39 ID:???
正規化しまくって複数テーブルにまたがると
面倒だよね
812MYSQL初心者:2006/02/06(月) 16:14:28 ID:V9TWk4H4
MYSQLとAccessがODBC接続の方法で繋がらないのですが・・どうしたらいいですか?誰か教えていただけませんか?(従来の方法では駄目でした。Accessが反発します)
バージョンは、WindowsXP、Access2003、MYSQL5.0です。)
813NAME IS NULL:2006/02/06(月) 16:37:12 ID:???
>>812
現状及び従来の方法等を詳しく。

つかそれで他人が理解できる程、詳しく書いてると本当に思ってるの?
814808:2006/02/06(月) 17:54:15 ID:???

どうやら複数テーブルからの同時削除は1クエリじゃ難しい感じがします。
ヒモがついてて消したら消えてくれればいいのになぁ
815NAME IS NULL:2006/02/06(月) 17:57:52 ID:???
>>814
そんなときのInnoDB
816NAME IS NULL:2006/02/06(月) 18:16:07 ID:???
>>815
InnoDB使えばヒモついてるというわけじゃなくて、
トランザクションで安全に消せるって言うこと?
817NAME IS NULL:2006/02/06(月) 18:43:34 ID:???
InnoDBならヒモつけられるっしょ
818NAME IS NULL:2006/02/06(月) 19:09:28 ID:???
>>817
おーすごいね、ドキュメントのありか教えてもらえないでしょうか?
InnoDBは行ロックで削除、更新に強いし
ファイルベースでテーブル管理できないことを除けば
かなり便利ねー
819NAME IS NULL:2006/02/06(月) 19:37:42 ID:???
>>818
4.1.1からファイルベースでも管理できるよ。
http://dev.mysql.com/doc/refman/4.1/ja/multiple-tablespaces.html
820NAME IS NULL:2006/02/06(月) 20:24:28 ID:???
>>819
さんくす。
ワクテカしながら見てみたら
>.ibd ファイルは自由に移動できません。
orz 何とかしてよAB!
821NAME IS NULL:2006/02/06(月) 20:53:41 ID:???
>>812
それだけじゃなんともいえんが、恐らくは古いODBCを使えば繋がる
822MYSQL初心者:2006/02/06(月) 20:58:50 ID:TO61IyX2
>>821
ODBC作成までは、上手くいくんですけれどもAccessからテーブルリンクさせる際、MYSQL.dsnでコンピュータデータソース指定し色々設定する所までは正常なのですけれどもいざOKを押すとAccess.EXEからエラーが返されてしまうのです。
823NAME IS NULL:2006/02/06(月) 23:14:15 ID:???
>>808
DELETE FROM t1, t2 WHERE 〜
じゃ駄目だったの?
824NAME IS NULL:2006/02/06(月) 23:15:12 ID:???
>>822
ありがちなのはPrimary Keyがないとか。
825MYSQL初心者:2006/02/07(火) 10:29:53 ID:+JU3U8Dx
>>>824
それも試してみましたけれど駄目でした。他の解決策はありませんか?教えてください?
826JDBCドライバの中の人 ◆K1AKxx0vr2 :2006/02/07(火) 10:45:24 ID:???
>>825
エラーが出ているのならとりあえず、エラー内容をここに晒してみてはどうでしょう?
現時点で825さんが提示している情報だけではみんなアドバイスできないです。

あとこういう場合は、問題の切り分けを1つずつ丁寧に行いましょう。

例えばサーバ側に接続しにいって駄目なのか、それ以前の問題なのかは、
my.iniに以下のように設定して一般ログを出すようにしておけば分かります。

[mysqld]
log

# my.iniファイル変更後は要再起動です。
# 認証等で弾かれている場合にはログが残ります。
# ログが出ていない場合にはデータソース設定が正しくない、F/Wに遮断されたなどです。
# ログファイルはdataフォルダの中の"コンピュータ名.log"です。
827NAME IS NULL:2006/02/07(火) 11:11:37 ID:???
>>823
定数使って削除する時のwhere句がいまいちわからないです

delete from A,B using A,B
where A.id='hoge' && B.id='hoge' && A.count=10 && B.count=10

これだとうまくいかないんです。
うむぅ
828NAME IS NULL:2006/02/07(火) 12:29:46 ID:???
Windows2000にMySQLを突っ込んで、DBの中身をAccess2000で受け取っているんだけど、
where句を使って絞り込んだところ、全く関係のない文字列が引っかかったりします。
例)where hogehoge like'%やった%' → ももたろう
これって、回避方法とかあるのでしょうか?
ちなみに、MySQL5で、文字コードはUTF8です。
829827:2006/02/07(火) 13:23:54 ID:???
>>823
すみません!削除できてました!
勘違いで削除できていないものだと錯覚してました

ついでに質問なのですが、この場合、テーブルのロックは
どのようの行われるのでしょう?

1)全てのテーブルに同時にロックを取得し削除
2)A をロックして削除、ロックを開放→ロックを開放し、Bのロックを取得→削除

どちらになるでしょうか?
また、これを調べる方法がありましたらお願いします。
830JDBCドライバの中の人 ◆K1AKxx0vr2 :2006/02/07(火) 13:24:14 ID:???
>>828
クライアント側の文字コードを設定し忘れているんだと思う。
831828:2006/02/07(火) 14:44:29 ID:???
>>830
レスありがとうございます。
クライアント側の文字コードといわれピンとこなかったので、
サーバのmy.iniのクライアントセッションに文字コードを指定する方法と
クライアントにmy.cnfを作って、ODBCの文字コードを変更する方法を試してみました。
しかし、前者では結果に変わりはなく、後者だと文字化けしてしまいました・・・。
ちなみに、先ほど書き忘れていましたが、エンジンはInnoDBで、varcharを使っています。
832MYSQL初心者:2006/02/07(火) 15:55:52 ID:+JU3U8Dx
>>>826
ODBCversionの問題かと思い試しましたがエラーがC++デバッグ・・・とLine1132・・と表示されいっこうに繋がる気配がありません。
833NAME IS NULL:2006/02/07(火) 16:11:22 ID:???
insert (A,B,C) values 〜 て文で
全てのカラムに値を入れるなら前のABCの絡む部分を省略できると思うのですが
Aが主キーの場合B,Cだけにカラム名を省略して入れる方法ありませんでしょうか?
834833:2006/02/07(火) 16:14:10 ID:???
自己レスです。
主キーの値の部分をNULLとしたらいけました。すんません。
835JDBCドライバの中の人 ◆K1AKxx0vr2 :2006/02/07(火) 19:28:59 ID:???
>>831
Accessはあまり触らないので外してたらごめんなさい。JDBCの人なので^^;

最初に仰っていた、
>ちなみに、MySQL5で、文字コードはUTF8です。

これはmy.iniに以下のように書いてあるということですね?

[mysqld]
default-character-set=utf8

私が手元で確認するのに使ったのはmysqlクライアント(コマンドプロンプト上)なのですが、
以下のようにしてからSELECTすることで上手く行きました。

mysql> set names sjis;

同じことをやるためには、ODBC設定の[Connect Options]の
[Initial Statement]のところに"set names sjis"と書けばいいと思うのですが、
これではどうでしょう?
836NAME IS NULL:2006/02/07(火) 23:19:31 ID:???
>>829
んー、LOCK TABLESを使わないかぎりロックを取得しないと思うんだけど。
LOW_PRIORITYオプションなんてのもあるくらいだし。

837NAME IS NULL:2006/02/07(火) 23:21:20 ID:???
my.ini(my.cnf) のコメントに日本語書いても大丈夫ですか?
起動も値の設定もできたんですが、
後々なんか悪いことが起きたら嫌なので・・・

よろしくお願いします。
838NAME IS NULL:2006/02/08(水) 00:18:26 ID:???
>>837
やってみればわかる。
839NAME IS NULL:2006/02/08(水) 00:19:19 ID:???
出た!「やってみればわかる」出た!
「やってみればわかる」出たよー!!
840837:2006/02/08(水) 00:43:57 ID:???
>>838
後々トラブルが発生したらわかる。
ということですか?

それじゃあ、あんまりだ
841NAME IS NULL:2006/02/08(水) 00:59:09 ID:???
文字コードとコメントと認識するための条件の事を考えれば

# 日本語

は大丈夫。
改行コードと # という文字(のコード)がキーにされて
読み込み処理がなされているのは間違いないだろう。
842JDBCドライバの中の人 ◆K1AKxx0vr2 :2006/02/08(水) 04:05:05 ID:???
>>837
my.cnf(my.ini)はmysqldなどの起動時に読み込むだけなので、
想定とおりに起動できてれば問題ないよ。

また、以下で/etc/my.cnfやら/usr/local/mysql/my.cnfやらすべて読んで
オーバーライドするならした上でmysqldがどんなオプションで動くのか分かるよ。

mysqld --print-defaults

# オプションを読みこんで標準出力し、終了する(実際には起動しない)
843NAME IS NULL:2006/02/08(水) 12:04:13 ID:???
>>841-842

ありがとうございます。
# が認識できればコメント処理され、
起動して値が設定できているのならば問題はなさそうですね。

mysqld --print-defaults の方はうまくいきませんでしたが、
とりあえず安心して日本語コメント書いちゃいます

あと立て続けに質問申し訳ないのですが、
InnoDBのselect count(*) クエリがすごく遅いのですが、
これは遅いものなのでしょうか?
215万件ほどのデータでテストしたのですが、2分30秒ほどかかってしまいます。
844NAME IS NULL:2006/02/08(水) 12:12:12 ID:eWZ4bZ9B

ID(AUTO_INCREMENT) KEY(UNIQUE) TEXTといったようなTABLEに対し、
存在すれば上書き、なければ挿入といったことをスマートに行いた
くて、

REPLACE INTO `TABLE` (`KEY`,`TEXT`) VALUES ('$KEY','$TEXT');
という操作をしています。

ユニークなKEYの持つ値を変更できるのは大変助かるのですが、IDま
でインクリメント処理されて値が変わってしまい、困っています。

IDは以前の値を保持したいのですが、どのようにすればよいですか?
845MYSQL初心者:2006/02/08(水) 12:49:02 ID:/izFij7z
>>>842
前、質問させていただいたエラーの原因を教えてください。ODBC接続の事を聞いた者です。お返事が無いのでスルーされていると思い書き込みました。
846NAME IS NULL:2006/02/08(水) 12:56:52 ID:???
>>843
自己レスです。
innodbは行数を保持していないので遅いのですね
whereで走査する行を制限し、whereの抽出にインデックスを使うと速くなりました。
847NAME IS NULL:2006/02/08(水) 13:57:29 ID:x4sieddf
 "group concat"ってどう書けばいいの?

こういうテーブルから
name    sukina_esa
たま     キャラット
ミケ    キャラット
ミケ    カルカン
ニャン太  モンプチ
しろ    カルカン
しろ    モンプチ

こういうふうに取り出したいんだけど・・
name   sukina_esa
たま   キャラット
みけ   キャラット , カルカン
ニャン太  モンプチ
しろ   カルカン , モンプチ

なんか、「 "group concat" MySQL」でぐぐったら(日本語)
>選択された言語のページからは該当するページが見つかりませんでした。
とかいわれました
848JDBCドライバの中の人 ◆K1AKxx0vr2 :2006/02/08(水) 15:38:25 ID:???
>>845
あのエラーからだと何とも言えないね。

「いっこうに繋がる気配がありません。」と言っていたので、
サーバ側でログを出してどこまでは上手く行っているのか
確認したら、とアドバイスしたのだけれどもそれはどうなったの?

というか、>>845のようなレスはどうかと。
レスがつかないのは新たな情報を自分から出さないからでしょ。
誰も貴方の質問に答える義務とかは無いわけで、
レスがないなら無いなりにみんな自助努力で解決してるのに。
849NAME IS NULL:2006/02/08(水) 15:50:13 ID:???
850NAME IS NULL:2006/02/08(水) 16:10:38 ID:???
>>845
音沙汰がないので、普通に自己解決済みだと思った。
試行錯誤して進展があれば、追加材料がでてくる筈だし
それがないと>>848氏が言われるとおり、誰も反応も出来ないよ。
851NAME IS NULL:2006/02/08(水) 16:15:04 ID:???
truncate table table_name って
トランザクション内で実行しても無理やりautocommitoするんだね。
852847:2006/02/08(水) 16:16:39 ID:x4sieddf
>849
うわ。感謝!!
こんなものがあるのかー!
手元のSQLの入門書だけでやってました。
ありがとうございます。
853280:2006/02/08(水) 16:31:46 ID:???
854NAME IS NULL:2006/02/08(水) 16:54:57 ID:???
>>853
うほ!サンクス!
855NAME IS NULL:2006/02/08(水) 17:33:07 ID:Vu9KVVRe
MS Excel用CSV又は単なるCSVをMySQLに変換するにはどうしたらよかとですか?
エクスポートならAdminですぐ出来るのですが、取り込む方法が分かりません。
856NAME IS NULL:2006/02/08(水) 17:50:00 ID:???
>>855
「Admin」というのが何か判らんが、
phpMyAdminなら、テーブル情報を表示した頁の最下部に
「テーブルにテキストファイルの追加」
というのが、あるのだけどね。
857855:2006/02/08(水) 18:04:30 ID:Vu9KVVRe
>>856
ありがと。やってみる。
858NAME IS NULL:2006/02/08(水) 18:14:19 ID:???
さらにinnodbの不思議なんだけど
alter table hoge auto_increment=0;
しても0にならないのね。
innodbはメモリ上にauto_incrementの値を保存しているらしく、
再起動しないとどうにもならないのか。

まあ、実稼動じゃ不便じゃないけど、テスト環境でせっかくtrancateしたのに
0に戻らないとはなんかめんどくさい。
859NAME IS NULL:2006/02/08(水) 19:52:12 ID:???
久々に
http://www.innodb.com/index.php
を見てみたら、

Innobase Oy is an ORACLE company.

そうなんだけどさ...。
860NAME IS NULL:2006/02/08(水) 20:55:36 ID:???
auto_incrementの次に割り当てられる数字を、レコード登録以前に取得
することはできますか?
861NAME IS NULL:2006/02/08(水) 21:03:53 ID:???
>>859
見てきた。

製品としては採用してるMySQLの名前を出さない訳にはいかんし
会社としてはMySQLの名前だけ出てる訳にもいかんし。
そんな葛藤が見受けられた(笑
862860:2006/02/08(水) 21:09:51 ID:???
mysql_insert_id()
で事故解決しました。スマソ
863NAME IS NULL:2006/02/08(水) 21:29:22 ID:???
auto_incrementってMySQLのみ?
他のDBでも使えるようなDB設計、SQL、ORMにするならauto_incrementって
使わない方がいい?
864MYSQL初心者:2006/02/08(水) 21:58:22 ID:1eCb8cuj
管理ツールのODBC作成画面で追加を押し、ログイン設定などをしますがテストボタンでリクエストリターンwishSQLエラーと言う表示や記号で'['と言う表示が出ますどうしたらいいでしょうか?何か良い策があれば教えてください。
865NAME IS NULL:2006/02/08(水) 22:20:43 ID:NT5WvAZq
現在運用中のサイトですが
重いselectを実行すると、他のクエリも道連れになって
サイト自体が表示出来ない状態になります。
こういう場合、テーブルを分ければ、
道連れは防げるのでしょうか?
866NAME IS NULL:2006/02/08(水) 22:21:47 ID:???
>>863
 似たようなのはあるんじゃないの?
PostgreSQLだとSERIALとか。
ttp://www.postgresql.jp/document/current/html/datatype.html#DATATYPE-SERIAL

全く同じじゃないから特殊なことするとあれだけど。
(上にあるmysql_insert_id()は出来ないしね)

ま、MySQLでもMyISAMとInnoDBだと微妙に違ったりするから、気にするほどのもんでもないとは思うけど。
867NAME IS NULL:2006/02/08(水) 22:29:38 ID:???
>>865
それだけだとなんとも。
EXPLAINで何が問題なのか調べてみるとか。

SWAPとかはしてないんだよね?
868NAME IS NULL:2006/02/08(水) 22:48:54 ID:???
2chのbizplus板の全てのデータをmysqlの複数のテーブルに格納します。
お勧めのカラム構成を教えてください。
869NAME IS NULL:2006/02/08(水) 23:05:45 ID:???
>>868
datファイルとsubjectファイル(ってあるんだっけ?)
をそのまま定義すればいいんじゃない?
870NAME IS NULL:2006/02/09(木) 01:37:21 ID:68ZFSi8o
皆様お力を貸してください

webサーバーにて IIS+mysql+ASPにて稼動させております
当然MYSQLにはASPよりlocalhstでアクセスさせていて問題はなかったのですが
ここでdbサーバーにdb機能(MySQL)を分離し
dbサーバーにwebサーバー側からMySQLを接続しようとするのですが
各ユーザー毎の初回の接続を確立するのに
約5秒から10秒ほどの遅延が発生してしまいます
ユーザー毎で見れば大きなロスではないのですが
アクセスが集中した際には
dbからの応答が遅れがちになり
結果的にweb表示の大幅な遅延につながります

webサーバーでIISとMYSQLを動かしていて問題がなかった
設定のままdbでも設定済みで
web⇔db間のpingも0msとネットワークの接続は完全に確立されている状態です

使用しているバージョンは

MySQL : 4.1.3b
ODBC : MyODBC 3.51.9
IIS : 6.0

MySQL接続時のvbscript

set DB = server.createobject("ADODB.Connection")
db.connectionstring="DRIVER={MySQL ODBC 3.51 Driver}; SERVER=220.158.xxx.xxx; DATABASE=hogehoge; UID=hogehoge; option=3"
DB.open
Set CMD = server.createobject("ADODB.Command")
CMD.Activeconnection = DB


dbサーバーを単体で運用し他のサーバーからアクセスさせる際には
接続される側のMySQLに特別な設定が必要なのでしょうか?

ご教示のほどよろしくお願いいたします。
871NAME IS NULL:2006/02/09(木) 02:13:20 ID:???
connection pooling
872NAME IS NULL:2006/02/09(木) 03:31:24 ID:???
>>870
>各ユーザー毎の初回の接続を確立するのに
>約5秒から10秒ほどの遅延が発生してしまいます
そんなに掛からないと思うんだがな。
取り合えずネットワークトワーク経由での認証に時間が掛かってるのか
それとも別のところにあるのか、IISの入ってるマシンから
MySQLにコマンドラインか何かで接続してみそ。

あと
>web⇔db間のpingも0msと
これは余り当てにならない。
MySQLにコマンドラインなツールで、ちょっとしたデータでも
dump/importとかしてみて詰まるところがないか調べて
認証後のデータのやり取りに際してネットワーク上で問題がないか確認
873JDBCドライバの中の人 ◆K1AKxx0vr2 :2006/02/09(木) 03:35:29 ID:???
>>863
"Sequence Generator"という名前でSQL2003で機能定義されてると思う。
基本的にはどんなRDBMSでもサポートされている/今後されるはずとおもう。
各RDBMSで使い方・振る舞いに違いがあるので、移植する際には気を付ける必要有りだけれども。
Oracleだと"Create sequence..."ってやつだっけ?

>>864
やっぱりそもそもMySQLに接続できてないじゃん。
で、何度も言ってるけど、MySQL側で一般クエリログを出すようにして、
ODBCからクエリ(接続要求)がMySQLサーバに到達してるのか確認したの?
ログ出てない=到達してなけりゃネットワーク設定その他の問題、
ログ出てればアクセス拒否なのか、何がどこまでは上手く行ったのかわかるでしょ。

>>870
クライアント側(APサーバ)とサーバ側(DBサーバ)が別筐体である場合、
違いは接続時にネットワークのオーバーヘッドがかかるだけだよ。
MySQL側に特別な設定、とかは特に何も無い。
それにしても5秒から10秒というのは、普通はありえない。
pingが0msなら、せいぜい10msくらいでMySQLへ接続できそうなもんだけど。
コネクションプールは接続のオーバーヘッドを回避する一般的な解決方法だけど、
5秒もかかる>>870さんの環境には、何か他に問題があるのではと思う。
874NAME IS NULL:2006/02/09(木) 07:14:45 ID:???
DNSだろ
875NAME IS NULL:2006/02/09(木) 09:04:33 ID:???
>>874
うん、my.cnf(my.ini)のm[mysqld]セクションに
skip-name-resolve
書いて解決熟女
876NAME IS NULL:2006/02/09(木) 09:29:55 ID:???
トランザクションの動きを調べるためにトランザクション中に
LANケーブル引っこ抜いたり、再起動したり、電源引っこ抜いたりしてみたんですが、
どちらもロールバックされます。
正常な動作だと思うのですが、クラッシュと正常にサーバを終了させる場合、
トランザクション的にはどちらもクラッシュと同じ扱いなのでしょうか?
commitされる前に接続が切れたという点では同じですけど・・・・

linuxのmysqldの起動スクリプトが、終了時にkill pid 使っているのには驚きました
877NAME IS NULL:2006/02/09(木) 14:58:03 ID:???
MARGEテーブルってcount(*)結果と実際の結果が全く違う

大損害なんだが
878NAME IS NULL:2006/02/09(木) 15:28:35 ID:???
>>875
それ、
>>870
|db.connectionstring="DRIVER={MySQL ODBC 3.51 Driver}; SERVER=220.158.xxx.xxx; DATABASE=hogehoge; UID=hogehoge; option=3"
のような最初からIPアドレスで接続要求があったときも、
skipしてないと名前解決しにいくの?
879878:2006/02/09(木) 15:30:39 ID:???
ごめん。俺が理解してなかっただけだ。
サーバ側がするクライアントの認証の話だわな
880NAME IS NULL:2006/02/09(木) 19:19:53 ID:UltP/RAl
VB6.0のADOを利用してMySQL4.1にあるデータベースに
接続したんですけど出来ないです。
どうしたらいいんですか?

Dim cn As Variant
Dim sql As String

'** ODBC 接続
Set cn = CreateObject("ADODB.Connection")
cn.Open "dsn=MySQL;uid=ユーザー名;pwd=パスワード"
cn.CursorLocation = 3
で、出来なかった・・・。
881MYSQL初心者:2006/02/09(木) 21:23:44 ID:hdSwCdMB
>>>>873
ありがとうございました。ログを解読した所ユーザー名がMYSQLインストール設定の時の名前でいれていたのが解ったので権限時の名前と違っていたのが解りました。ですが接続出来てもAccessからデータを挿入できません。入れると挿入失敗の文字が出ます。
882NAME IS NULL:2006/02/09(木) 22:30:00 ID:???
MySQLを使用するとソースの公開義務があるのですが、
公開してますか?
883NAME IS NULL:2006/02/09(木) 22:40:09 ID:???
>>882

ライセンスを買えば義務はないよ。
884JDBCドライバの中の人 ◆K1AKxx0vr2 :2006/02/09(木) 22:59:28 ID:???
>>881
Accessでデータ挿入した際にでたエラーを見て原因がわからない場合、
同じSQL文をmysqlクライアントから試してみると原因がわかるかもしれません。
一般クエリログを出すようにしておけば、Accessが発行したSQL文は全てログにも出力されるようになっていますよね。
それをmysqlクライアントからも試してみて、どんなエラーがでているのかを見てみましょう。
885NAME IS NULL:2006/02/09(木) 22:59:28 ID:???
これって個人が非営利で使っていても公開する義務ってあるの?
886JDBCドライバの中の人 ◆K1AKxx0vr2 :2006/02/09(木) 23:06:31 ID:???
>>880
別の人のケースでもそうだけど、アプリケーション側/プログラム側で得られたエラー情報から
だけでは何で接続できない/クエリが失敗するのか分からない場合には(エラー情報が少ないなど)、
とりあえず一般クエリログをサーバ側で出すようにして、実際にどんな接続要求/クエリがサーバに
実行されているのかを見てみるといいよ。

仕組みとしては、ログに出ているSQL文等をmysqlクライアントで実行するのと、サーバにとっては同じなので。

というか、一般クエリログをみんなもっとよく使おうよ。このログは「デバッグ用」、つまり今みたいなときに
問題解決をするのに使うために、実装されている機能だよ??
887NAME IS NULL:2006/02/09(木) 23:18:34 ID:???
>>886
中の人がいたのでちょうどよく質問です。
useNewIO使うのはまだ危ないですか?

# 問題の切り分けができない連中を相手にするのは大変ですね
888NAME IS NULL:2006/02/09(木) 23:39:19 ID:???
JDBCドライバの中の人に質問。

プリペアドステートメントのC言語APIの日本語マニュアル無いですか?
公式にある日本語訳は関数仕様変更前の情報で、あの通りに作っても動かない・・・・・

英文の方のマニュアル見ながら作ったら、途中までは動作したけど、
何か見落としているのか、libmysqlclientの中でセグメンテーションフォールトで落ちる

JDBCドライバでプリペアドステートメント対応するにあたり、参考にしたものがあれば教えてください。
889NAME IS NULL:2006/02/10(金) 00:04:37 ID:???
>>885
ライセンス条項が理解出来ない馬鹿には使う権利が無いよ
890NAME IS NULL:2006/02/10(金) 00:06:46 ID:???
>>889
教えてください
891NAME IS NULL:2006/02/10(金) 00:10:04 ID:???
>>890
教えて欲しけりゃ金払えw
892NAME IS NULL:2006/02/10(金) 00:20:01 ID:???
>>885
GPLに利用にあたって個人/法人とか、
用途の営利/非営利なんて区別はない。
俺ライセンスのフリーソフトとは違うよ。
893NAME IS NULL:2006/02/10(金) 00:21:50 ID:???
健常者と池沼は厳然と区別されているがな
894892:2006/02/10(金) 00:22:22 ID:???
「俺ライセンスのフリーソフト」を貶めるつもりは、全くない。為念。
895NAME IS NULL:2006/02/10(金) 00:37:56 ID:???
>>887
useNewIOは今使ってないなら、使うのは止めて置いて下さい。
C/J 3.1.0で実装されたものの、使うメリット少ない(デメリットの方が大きい)と判断され、
今後この機能は将来的には削除される予定になっています。

>>888
基本的にはmysqlクライアントでコンソールでプリペアードステートメントを叩くのと同じです。
普通のステートメントを発行する際に使用するPacketでない、専用のPacketを使って
サーバとやりとりするのですが、それを各クライアントAPI(C API/JDBCドライバ他)が
実装するという形になっているとおもいます。あまり返答になってなくて御免なさい。

とりあえず、mysqlクライアントで同じクエリを発行できますか? こんな感じで。

mysql> prepare pstmt1 from 'select ? - ?';
mysql> set @a=20;
mysql> set @b=5;
mysql> execute pstmt1 using @a, @b;
896JDBCドライバの中の人 ◆K1AKxx0vr2 :2006/02/10(金) 00:38:36 ID:???
>>895 名前付け忘れました。
897NAME IS NULL:2006/02/10(金) 01:14:50 ID:???
まさか、JDBCドライバって、mysqlをプロセスオープンしてパイプで流し込んでいるだけ!?
がーん
898JDBCドライバの中の人 ◆K1AKxx0vr2 :2006/02/10(金) 01:26:51 ID:???
>>897
JDBC APIインタフェースを持ちつつ、裏ではJava Socket APIを使ってMySQLサーバにTCP/IP接続して、
MySQL client/serverプロトコルに則ってPacketを送ったり受け取ったりですよー。(^^)
899JDBCドライバの中の人 ◆K1AKxx0vr2 :2006/02/10(金) 01:35:20 ID:???
ああ、そうか誤解を生むような書き方を>>895でしちゃったかもですね。
Connector/JはJDBC Type4 Driverですから、C APIは使いません。いわゆる"ラッパー"ではありません。
Connector/Jと他のコネクタプロダクト(mysql, Connector/ODBC, Connector/NET, C API)との
互換性は、MySQL client/serverプロトコルレベルにおいてなされています。

MySQL client/serverプロトコル、およびそれにおけるMySQLの論理的なPacketの資料はこちら。
http://dev.mysql.com/doc/internals/en/client-server-protocol.html
900NAME IS NULL:2006/02/10(金) 02:42:41 ID:???
あー、そういうことか。
mysqlのクライアント−サーバ間のプロトコルをそのまま喋ってるのか

手っ取り早い気もするけど、やっぱり日本語の資料は無いんだよな・・・・・
読むの時間かかるなぁ


なにはともあれ、参考になりました。ありがとうございました。
901NAME IS NULL:2006/02/10(金) 02:50:22 ID:0WgiNO70
MySQL 5.0を試しに導入してみたんだが、CSEが新しいクライアントAPIに
対応してないようで、サーバから蹴られちまった orz
5.x系の管理用のクライアントツールってなんかいいのない?
902NAME IS NULL:2006/02/10(金) 09:04:24 ID:???
>>895
NewIOの者です。
危なかったです使うところでした、ありがとうございます。

>>900
ここで教えてもらったのだけど、
http://ikda.net/fswiki/wiki.cgi?page=Connector%2FJ+%A5%EA%A5%D5%A5%A1%A5%EC%A5%F3%A5%B9%A5%DE%A5%CB%A5%E5%A5%A2%A5%EB%C6%FC%CB%DC%B8%EC%CC%F5
903NAME IS NULL:2006/02/10(金) 19:52:33 ID:XiUlTkq6
すみません、データディレクトリを変更するのは、どうやるのでしょうか?
/etc/my.cnf に
datadir=(新しいディレクトリ名)
と指定して、/etc/init.d/mysql restart とやっても、MySQLサーバが起動しません。
インストールし直してみましたが、/etc/my.cnf に上の設定がある場合、
RPMからインストールしても、やはりMySQLサーバが起動しません。

環境はRHEL4, MySQL5.0.18 です。
904NAME IS NULL:2006/02/10(金) 20:05:44 ID:???
/usr/local/libexec/mysqld --datadir=/hoge
905903:2006/02/10(金) 22:43:06 ID:???
>>904
これは、RPMインストールの場合は、/etc/init.d/mysql スクリプトを書き換
えろ、ということなのでしょうか?
906NAME IS NULL:2006/02/10(金) 23:08:39 ID:???
>>905
my.cnfのdatadir=を変更するだけでいいはずだよ。

my.cnfを変更する時はdatadir=だけでなくsocket=も変更したか?
[mysqld]セクションのsocket=をデフォルトから変更したら
[client]セクションにもsocket=を指定するのを忘れるな。
907NAME IS NULL:2006/02/10(金) 23:22:48 ID:???
>903
エラーメッセージの内容確認してる?
アクセス権が無かったりしない?
908903:2006/02/10(金) 23:52:25 ID:???
すみません、他の人と一緒にいじっているうちに、
RPMからの通常のインストールすら出来なくなってしまいました。
これを解決してから、出直してきます。
909NAME IS NULL:2006/02/11(土) 00:26:32 ID:yInYX5UY
質問です
4.1から日本語環境への配慮が止まっているようですが
mysqld --skip-character-set-client-handshake コマンドを使ってキャラクターセットの問題をクリアーした時
どの言語が一番適しているのでしょうか?(全部同じ言語設定にしてしまおうと思っています)
是非、みなさんの経験則からの判断を教えて下さい
#主観ですが入力のある様な検索システムなど、漢字を多用した時UTF8では何か問題を起こしそうな気がしてなりません
やっぱsjisなんでしょうか?

CentOS4.2, MySQL5.0.18
910NAME IS NULL:2006/02/11(土) 01:17:09 ID:???
windows排除してEUC

sjis使うなら、スキップするんじゃなくてsjisとして動かさないと
\x5c問題とかで悩むことになりかねないと思うぞ


あと、ついでだが、sjis完全準拠のOSはもう殆ど無い。
最近のwindowsはsjisを更に独自拡張したCP932

同じsjisだと思ってても一部互換が無かったりするので注意しる
911NAME IS NULL:2006/02/11(土) 02:49:23 ID:???
>>910
909ではないがCP932なんて初めて聞いた

UTF8だとなんか問題あるの?
WinXPも今UTF8なんだよね?
912JDBCドライバの中の人 ◆K1AKxx0vr2 :2006/02/11(土) 03:13:12 ID:???
>>901
つ http://dev.mysql.com/downloads/administrator/index.html
つ http://dev.mysql.com/downloads/query-browser/1.1.html

>>903
設定系で嵌ったら、"--print-defaults"オプションをつけてmysqld等実行するといいよ。
起動時に読み込んだパラメータをstdout出力してくれる(実際には起動しない)。

>>909
cp932あるいはeucjpmsかなー。
この2つの文字コードは日本語文字化け問題を解消するためにMySQL5.0で追加実装されたもの。
cp932についてはその後MySQL4.1にもバックポートされた。

簡単にいうとこんな感じ。
・MySQLにおけるcp932 = Microsoftにおけるsjis = 通称 MS932 = 通称 WINDOWS-31J
・MySQLにおけるsjis = IANAによって定義されているsjis ≠ Microsoftにおけるsjis
・eucjpms = ujis + (Microsoftによる独自に追加された文字等)

要するに「括弧株」とかの話ですわ。

基本的に、テーブル作る時に文字コードちゃんと指定して、クライアントからつなぐ時にちゃんとset names発行すれば問題は無い。

日本語文字化け関連の話はタイムインターメディアさんのWikiが詳しいですよ。
http://oss.timedia.co.jp/index.fcgi/kahua-web/show/MySQL%C6%FC%CB%DC%B8%EC%A4%CE%CE%B9
913909:2006/02/11(土) 04:05:13 ID:yInYX5UY
>912
ウホッ!
すばらしい回答

つまりキャラクターセットをpc932にして
mysqli_query($db, "SET NAMES pc932");
を記述⇒(゚Д゚)ウマー

#ちょい前にWikiさんのページ発見、熱読しました。すばらしいサイトですね。
MySQLのトラブルの殆どはキャラクターセットだと思います。そういう意味では最高に親切なサイト
914NAME IS NULL:2006/02/11(土) 05:33:14 ID:???
>>910
CP932はMS-DOSと共に採用された物だけどな。
915NAME IS NULL:2006/02/11(土) 06:16:29 ID:???
>>910
あと、MySQLなどのアプリケーションが使うキャラクタ
セットについて、OSは一切関知しないから、OSうんうん
はどうでも良い話。
OSとアプリケーションのキャラクタセットは合わせて
おくと何かと無難という事で、同じにする事が多いが。
(キャラクタセットという言葉も、本来はエンコーディング
と言うべきだが、MySQLは区別していないからなあ)
916805:2006/02/11(土) 10:55:52 ID:???
>>805
について誰かおしえてくださいませ

ちなみにphpmyadminでMySQLのシステム変数を調べると
以下のようでした、


変数 セッション値 グローバル値
character set client utf8 ujis
character set connection utf8 ujis
character set database ujis ujis
character set results utf8 ujis
character set server ujis ujis
character set system utf8 utf8
917NAME IS NULL:2006/02/11(土) 17:34:41 ID:???
MySQL Query Browser 使ってるんですが、
困ったことに、クエリを実行したときに動くイルカがかわいくてたまりません。
そのため、早いクエリを探すよりもイルカを長く見られるクエリを探してしまいます。
どうすればいいでしょうか?
918NAME IS NULL:2006/02/11(土) 17:38:50 ID:???
>>917
そんな奴イルカ!
919NAME IS NULL:2006/02/11(土) 18:16:58 ID:???
OSうんうん… かわいい…
920NAME IS NULL:2006/02/11(土) 23:06:12 ID:???
./mysql.server startを実行すると
Starting MySQL./mysql.server: line 136: test: /usr/local/var/linux: binary operator expected
../mysql.server: line 136: test: /usr/local/var/linux: binary operator expected
../mysql.server: line 136: test: /usr/local/var/linux: binary operator expected

これが延々と続いて起動しません。

configureは
./configure --with-charset=sjis --with-extra-charsets=ujis --with-mysqld-user=mysql --with-client-ldflags=-all-static --with-mysqld-ldflags=-all-static --enable-thread-safe-client \
CFLAGS='-O3 -march=athlon-xp -pipe -m3dnow -mmmx -msse -mfpmath=sse -fomit-frame-pointer -funroll-loops -fforce-addr -frerun-cse-after-loop -frerun-loop-opt -falign-functions=4'

OSはgentoo linuxです。
921NAME IS NULL:2006/02/11(土) 23:55:34 ID:Czwlzcso
>>916
phpMyAdminのバージョンを落とす、、
922NAME IS NULL:2006/02/12(日) 00:29:21 ID:qyYNJIo6
MySQLでは、text型にはdefaultは指定できないとのことですが、
それでも指定したいとダダをこねてもどうにか指定できませんか?
923NAME IS NULL:2006/02/12(日) 02:25:38 ID:???
>>901
私はODBC経由で強引にCSEを使ってます。
手になじんでるからなぁ。腑に落ちないけど。
謹製のQuery Browserの使い勝手はどうなんでしょうか。
MySQLの設定を第一の目的としてる人と、
あくまでも数あるDBのうちの一つとしてMySQLを使っている
業務アプラーとでは、ツールに求める部分が違いますからねぇ。
924NAME IS NULL:2006/02/12(日) 13:59:15 ID:???
JDBCドライバの中の方に質問です。

setAutoCommit(false);
ならば、commitが実行されるまでトランザクション内なのは
触ってみてわかったのですが、
一度commitされた後は次のトランザクションはbeginを実行しなくても
開始されるのでしょうか?
925NAME IS NULL:2006/02/12(日) 14:02:45 ID:???
MySQL 4.0.21 でUTF-8なDumpファイルをリストアできません・・。HELP!

もともとはEUC-JPのデータが入っていたテーブルをバックアップして,
Dumpファイルの文字コードをEUC-JPからUTF-8に変換。
正しくUTF-8に変換されていることはエディタで開いたりして確認済みです。

その後コマンドラインで

mysql TABLE_NAME < DUMP-UTF-8

としたところ,インポートされたデータの文字コードはEUC-JPでもUTF-8でもない,
完全に文字化けしてる状態で格納されていました。

やり方を変えて,

mysql> source DUMP-UTF-8

としてみたところ,小さなDumpファイルではうまくいくのですが,
80MB超のファイルでやってみると,

No Connection, Trying to reconnect
ERROR 2005: Unknown MySQL Server Host xxxxx

という表示が途中から出てきてしまって,最後までインポートできません。

ちなみに,コマンドラインはWindowsのコマンドプロンプトとLinuxのコンソールの
両方で(別環境にて)チェックしましたが,症状は全く同じでした。

何かヒントだけでもあれば・・・お願いします。
ちなみにMySQL 4.0.21のバージョンは固定になります。4.1系にしたりできない環境なので・・・。
926NAME IS NULL:2006/02/12(日) 17:12:24 ID:???
>>925
UnicodeのサポートはMySQL4.1以降の話だと思うんだが。
バイナリとして放り込みたいということ?
927JDBCドライバの中の人 ◆K1AKxx0vr2 :2006/02/12(日) 18:09:29 ID:???
>>924
その通りです。Connection.setAutocommit(true)を呼び出すとドライバは
サーバに対してクエリ"set autocommit=1"を実行します。
928JDBCドライバの中の人 ◆K1AKxx0vr2 :2006/02/12(日) 18:14:50 ID:???
>>927
訂正:
×→Connection.setAutocommit(true)を呼び出すと"set autocommit=1"を実行
○→Connection.setAutocommit(true)を呼び出すと"set autocommit=0"を実行
929925:2006/02/12(日) 20:01:07 ID:???
>>926

そういうことになるんでしょうか。
MySQLサイドでのUTF-8サポートは必要なくて,プログラム側から見て,
データはUTF-8にしておきたい事情があります。

930NAME IS NULL:2006/02/13(月) 03:09:08 ID:0vP9u49S
>909
これを読んでの質問です
Perlでデータの保存をMySQL担当してもらおうと考えています
character_set_client
character_set_connection
character_set_database
character_set_results
character_set_server
character_set_system
これらを全部UTF-8に指定した場合
何か問題が起きるでしょうか?
WinXPでは既にUTF-8が標準になっているとの書き込みを見ました
WinXPで秀丸でソースを書いているのですが、これは自動的にUnicode(UTF-8)で保存されていると言う事なんですよね?
と言う事であれば、あえてcp932を使わずそのままUTF-8を使った方が無難の様に思えます
(昔からのデータやソースを使う人にはcp932がお勧めと言う意味という事でしょうか?)

FedoraCore4 MySQL5.0.18
931NAME IS NULL:2006/02/13(月) 04:36:41 ID:???
ここにも釣りが!
932NAME IS NULL:2006/02/13(月) 13:35:41 ID:???
>>927
情報ありがとうございます。
でも、
Connection.setAutocommit(false)を呼び出すと"set autocommit=0"を実行
のような感じがします。
933NAME IS NULL:2006/02/13(月) 14:17:43 ID:K85Z9/Z2
VB6.0でMySQL4.1のデータベースにレコードを追加したいんですけど、
MySQLに接続できません。インターネットで調べたら
以下のプログラムが出てきたんですが
両方試してもMySQLに接続できませんでした。
Set cn = New ADODB.Connection
cn.Open "Provider=MSDASQL.1;Password=;User ID=root;Data Source=sample"

Set cn = CreateObject("ADODB.Connection")
cn.Open "dsn=sample;uid=root;pwd="
cn.CursorLocation = 3
どうしたら接続できるか、教えてください。
934JDBCドライバの中の人 ◆K1AKxx0vr2 :2006/02/13(月) 14:18:05 ID:???
>>932
あー、あ、、そうですね(^^; >>927であってましたね。
何を勘違いしたんだろう>>928は忘れてください・・・。

General Logを出して見る、あるいはソースを覗いて見ると分かりますが、
結局言いたかったのは、setAutocommit()の呼び出しは"set autocommit"の
実行と等価だということです。ついでに言うと、この設定はドライバでキャッシュされます。
混乱を招くような書き方をしてしまい失礼しました。
935JDBCドライバの中の人 ◆K1AKxx0vr2 :2006/02/13(月) 14:40:53 ID:???
>>933
エラーメッセージから状況が全く読めないのなら、とりあえずtelnetおよび
General Log(一般クエリログ)を使って問題の切り分けをすることをお奨めします。

「接続できません」問題についてはおよそ以下のどこかで躓いていることが多いです。

1.そもそもサーバが起動していない。
2.MySQLでTCP/IP接続を無効にした状態で起動しているのにTCP/IP接続しようとしている。
3.サーバは起動しているがF/Wにより遮られている。
4.ホスト名を使ってサーバを指定しているが、ホスト名からIPへの解決ができていない。
5.データソース設定内容に誤りがある。
6.MySQLにアクセスするユーザの権限設定を行っていない。
7.複数のユーザ権限設定が該当しており自分が想定しているものとは違うもので判定されている。

一般クエリログに何かが出ている場合には、原因は6か7に絞れます。さらにログにどのユーザで
アクセス権限の判定がされたのかを見ることができます。

とりあえず telnet foobar 3306 で繋がるか確認するのも良い手です。telnetが繋がるなら
1〜4の可能性を排除できます。

上記はどのプログラミング言語を使っているか、どのコネクタ(ODBCやJDBC)を使用しているかに
関わらず有効な、一般的解決方法と思います。

とりあえずこれしか言えないので、あとはがんばってください。
936NAME IS NULL:2006/02/13(月) 22:30:18 ID:???
中の人大変だなぁ・・・・・
937NAME IS NULL:2006/02/14(火) 00:35:53 ID:gWyCkF2i
>>933
まずはsampleという名前のデータソースが正しく作られているかだな
プログラムと切り離して単独で接続チェックができないの?
938NAME IS NULL:2006/02/14(火) 12:03:33 ID:67SbzokA
mysqlに登録してある日本語の文字列を五十音順にソートする方法はありますでしょうか?
ロリポップを使っています。mysqlのバージョンは 4.0.24のようです。宜しくお願いします。
939NAME IS NULL:2006/02/14(火) 13:05:33 ID:???
それって order じゃできないってこと?
940938:2006/02/14(火) 13:12:03 ID:67SbzokA
>939
レスありがとうございます。
試しにselect * from tabale where name order by name;
とか書くと、不完全にソートされます。
これは文字コードとかの問題でしょうか?
それとも上のクエリが間違っているのでしょうか?
941NAME IS NULL:2006/02/14(火) 14:27:30 ID:???
設定が悪い。情報小出しやめて
942JDBCドライバの中の人 ◆K1AKxx0vr2 :2006/02/14(火) 15:36:56 ID:???
>>940
つ character set
943940:2006/02/14(火) 17:21:40 ID:67SbzokA
>942
レスありがとうございます。ローカル環境でテストしているのですが、my.ini等の設定は合っていると思います。mysqlのバージョンは同じでsjisにしています。
ところで今気がついたのですが、例えば
select * from table where name order by name
とやると、ひらがな五十音順、カタカナ五十音順、漢字五十音順に分けられてそれぞれ並びます。ひょっとしてこれは正常なのでしょうか?
もし、ひらがな漢字カタカナ関係なく、読み通りにソートしようと思ったら、
携帯電話のアドレス帳のように、読み仮名を登録するしかないのでしょうか?
944NAME IS NULL:2006/02/14(火) 17:28:12 ID:???
>>943
設定をそのままコピペしろって言ってんだよアホが
945NAME IS NULL:2006/02/14(火) 17:29:31 ID:???
>>943
それは仕様だ、windowsのファイル名を名前順にソートしてみろよ
946NAME IS NULL:2006/02/14(火) 17:33:20 ID:???
ソートは文字コード順
そこから逃れるためには、自分でも書いてるように読みがなをつけたほうが早い
947JDBCドライバの中の人 ◆K1AKxx0vr2 :2006/02/14(火) 17:40:36 ID:???
>>940>>943

補足:collationでググれ

MySQL(RDBMS)は、ORDER BY、いわゆるソート処理を行う際、collation(照合順位)に従って行う。

sjisの場合、以下のように2種類のcollationが用意されていて、デフォルトは"sjis_japanese_ci"となっている。

mysql> SHOW COLLATION LIKE '%sjis%'\G
*************************** 1. row ***************************
Collation: sjis_japanese_ci
Charset: sjis
Id: 13
Default: Yes
Compiled: Yes
Sortlen: 1
*************************** 2. row ***************************
Collation: sjis_bin
Charset: sjis
Id: 88
Default:
Compiled: Yes
Sortlen: 1
2 rows in set (0.00 sec)

SQL文にCOLLATE句を使うことで"sjis_bin"を使えると思うけれども、
どちらも自分の望みの通りの並び順ではない、という場合には
>>945>>946の言うように自分で何か回避法を使う必要があると思う。
948NAME IS NULL:2006/02/14(火) 17:42:41 ID:67SbzokA
うっひょー!!!
ものすごい勢いでレスありがとうございます。
>944
設定とはmy.iniのことですか?

[mysqld]
default-character-set=sjis

[mysql]
default-character-set=sjis

[mysqldump]
default-character-set=sjis

な感じです。

>945
確かにそうですよね。感じの音訓まで理解できるはずないですもんね〜。

>946
読み仮名作戦は結構ポピュラーなんでしょうか?
ユーザー登録とかするとき、名前の読み仮名入力させられるのはこういう理由だったりするんですかね?
949NAME IS NULL:2006/02/14(火) 21:29:01 ID:???
>>948

漢字の読みはいろいろあるからね。
日本人なら常識なんだけど、ちょっと難しかったかな。
950NAME IS NULL:2006/02/14(火) 22:02:03 ID:???
ふつー ソートしよう思ったら、フリガナデータくらい用意するよな、、、
951NAME IS NULL:2006/02/14(火) 22:11:22 ID:???
もともと文字コードや環境の設定ミスでひらがなもうまくソートできない
という事例が多かったので、最初の質問でみんなそっちを疑ったはず
952NAME IS NULL:2006/02/14(火) 22:36:59 ID:???
>>951 たしかに
953NAME IS NULL:2006/02/15(水) 00:40:55 ID:???
collateって4.0系で使えるのか?
4.1以降かと思ってた
954NAME IS NULL:2006/02/15(水) 02:04:29 ID:???
客相手に氏名を入れさせるときにふりがなはデフォだろ。
もし電話するような必要がでたときに、名前を呼び間違うような失礼をしても構わないのなら
無理に入れる必要はないと思うが。
955NAME IS NULL:2006/02/15(水) 04:02:49 ID:???
DB仕様の管理でテーブル構造の各フィールドの意味をどう管理、ドキュメントにしてます?

phpMyAdminで印刷表示にして、そのテーブルに列を追加してフィールドの意味を
付け加えているんだけど、DB構造が変わった時の効率悪くて…

DBでフィールドの意味を入れる場所作ってくれればいいんだけど…
956NAME IS NULL:2006/02/15(水) 07:05:32 ID:???
mysql って、select (select ... from hoge), (select ... from fuga)
ってかんじのことできまつか?
957NAME IS NULL:2006/02/15(水) 08:06:38 ID:???
>>956
LEFT JOIN の事かな?
958NAME IS NULL:2006/02/15(水) 08:10:06 ID:???
>>957
sub-select のことでは?
>>956
試してみればわかる。
mysql> select (select 1),(select 2);
+------------+------------+
| (select 1) | (select 2) |
+------------+------------+
| 1 | 2 |
+------------+------------+
ただし MySQL4.1以上
959NAME IS NULL:2006/02/15(水) 10:19:25 ID:???
わーい。さっそく 5 系列にでもうpしたいと思いまつ。
ありがとうございまつた。

mysql> select (select 1),(select 2);
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 'select 1),(select 2)' at line 1
960NAME IS NULL:2006/02/15(水) 10:23:10 ID:???
とおもったけど、こわいから 4.1 系でがまんしまつ。
961NAME IS NULL:2006/02/15(水) 18:36:21 ID:???
Oracle、オープンソースデータベースのSleepycatを買収
http://www.itmedia.co.jp/news/articles/0602/15/news015.html

ついにここまで...
962NAME IS NULL:2006/02/15(水) 18:53:16 ID:???
ZendとJbossもかよ・・・
963NAME IS NULL:2006/02/15(水) 21:20:35 ID:???
>>955
DBの仕様なんて作らないさ
中を勝手に見ろと(ry
964NAME IS NULL:2006/02/15(水) 21:21:59 ID:Z1uj4S+m
1000レスで終わるんですかね〜?
965NAME IS NULL:2006/02/15(水) 21:36:20 ID:???
PHP+MySQLの事ってどこで聞いたらいいでしょうか?
966NAME IS NULL:2006/02/15(水) 21:45:18 ID:???
>>965
原因の切り分けすらできないの?
開発やめちゃえば?
967NAME IS NULL:2006/02/15(水) 22:10:46 ID:???
>>966
原因の切り分けができないなら、
切り分けする方法を聞くとかね。
968JDBCドライバの中の人 ◆K1AKxx0vr2 :2006/02/15(水) 22:11:26 ID:???
>>962
昨日JBossの中の人に会ったけど、一応否定してた。
「Oracleはよくこういうガセネタを流すんだ」
だってさ。本当の所はどうなのかは、知らん。
969??:2006/02/15(水) 22:37:52 ID:Z1uj4S+m
>>966
え〜厳しいなぁ…
開発はやめたくないなぁ〜
がんばろっ!
でも解らんことあったら協力してね。
970NAME IS NULL:2006/02/15(水) 23:04:23 ID:???
>>969
俺が答えてやる
971NAME IS NULL:2006/02/15(水) 23:21:24 ID:g38nKAjD
すみません。くだらないかもしれない質問です。
今、tab区切りのtextをMySQLに読み込もうとしてますが、うまくいきません
load data infile 'ファイルのパス' into table テーブル名 fields terminated by '\t' lines terminated by '\n'
とやってみても、うまくいきません。
'\t'が間違ってるのでしょうか??何を使えばよいのでしょうか??
どなたかお教えください。
ちなみに環境は、
MacOSX10.4
Mysql 5.0.18
で、取り込むテーブルはujisをデフォルトキャラにしてます。

なんかうまい方法ないですか??
よろしくお願いいたします。
972NAME IS NULL:2006/02/15(水) 23:27:16 ID:se1T/eTx
http://shirahata-j.saitama-city.ed.jp/

ここのセキュリティ破壊して吹っ飛ばしたらネ申
973NAME IS NULL:2006/02/15(水) 23:42:09 ID:???
>>972
通報しました
974NAME IS NULL:2006/02/16(木) 00:09:04 ID:???
>>970
ではさっそくですが、、、

DBのテーブルにpointというフィールドがあり、
そのフィールドの値を60秒間隔で1減らし、
そのフィールドの値が0になると、閲覧できなくする。
というような感じの事、

簡単な説明だが、プログラムとしては、
PHP+MySQLで可能だろうか?
可能ならスクリプトは困難?
975NAME IS NULL:2006/02/16(木) 00:19:44 ID:???
>>974
別に減らす必要も無く、60を入れておく必要もない。
開始時刻を入れておいて、スクリプト側で現在時刻と比較して、
60秒以上経っていたら閲覧禁止処理を行えばいい。
976NAME IS NULL:2006/02/16(木) 00:36:58 ID:???
>>975
うんうん
要はデスネ・・・
自分がやりたいのは、各閲覧者ごとに
ポイントを振り分けたいので、DBに60秒に一度
問い合わせをして、0になったら閲覧禁止と思ったんですよ、、、
説明不足やったです。(*_ _)人ゴメンナサイ

結局、60秒に一度DBに問い合わせして、データの更新処理をすれば
いいんだよなぁ?多分・・・

もう少し自力で頑張ってみます。
977NAME IS NULL:2006/02/16(木) 00:45:24 ID:???
>>976
つ セッション
978NAME IS NULL:2006/02/16(木) 00:54:55 ID:???
>>972
IISだし、そう難しいとも思えんが?
979NAME IS NULL:2006/02/16(木) 00:57:23 ID:???
>>977
セッション管理ですね。
アリガトです。
またやってみて息詰まったらご協力お願いしや〜す。。。
一応趣味で色々やってるんですが、こういうのが凄く好きらしく・・・
頑張ってみます。。。
980JDBCドライバの中の人 ◆K1AKxx0vr2 :2006/02/16(木) 07:36:30 ID:???
>>971
何が、どう上手くいっていないのか、をもう少し教えてもらえないか。
Mac機は持ってないので手元での確認はできず。

現時点で気になる点
・全角バックスラッシュを使っているのは2chにカキコするためであって、実行したときは半角バックスラッシュ?
・Macの改行コードってCRだっけ?

改行コードが原因の場合は、Macの場合は、lines terminatedのところを

LINES TERMINATED BY x'0D'

という風に書くと(予想が正しければ)幸せになれるかも。

981NAME IS NULL:2006/02/16(木) 09:38:44 ID:???
MACの改行コードはCRだけど、、、CRなら\r
982NAME IS NULL:2006/02/16(木) 14:34:56 ID:???
昔のMacOSはCRだったけど、OSXはunixもどきなのでデフォルトはLF…
983NAME IS NULL:2006/02/16(木) 16:40:02 ID:???
2005の使い勝手はどうですか?
984JDBCドライバの中の人 ◆K1AKxx0vr2 :2006/02/16(木) 19:50:13 ID:???
>>982
ああ、MacOS10からそうだったね。

SELECT HEX('\n') を実行してみれば分かるけど、MySQLでは'\n'はOSを問わずLF固定っぽい。(Windows機で確認)
985NAME IS NULL:2006/02/16(木) 20:09:56 ID:???
MacOS10.2でやったときに同じ問題にあたった。
ファイルの所有者を弄ろうが、パーミッションをいくら見直そうが、なぜか全く読み込めない。
もしかすると見えないところでSELinuxのような何らかの規制があるのかも!?
986NAME IS NULL:2006/02/16(木) 20:31:29 ID:???
オラクル、オープンソースMySQLの買収に失敗
ttp://japan.zdnet.com/news/ir/story/0,2000054251,20096641,00.htm
987NAME IS NULL:2006/02/16(木) 21:27:35 ID:???
JBossとMySQLが合併とかしたら面白いのにね。
988NAME IS NULL
Jbossが特定のRDBMSとセットになるのはいやだなあ・・