MySQL 総合 Part5

このエントリーをはてなブックマークに追加
1"My Ess Que Ell"
2NAME IS NULL:2005/07/17(日) 12:03:34 ID:???
MySQ乙
3NAME IS NULL:2005/07/17(日) 12:30:30 ID:???
3?
4NAME IS NULL:2005/07/17(日) 12:53:24 ID:???
Version4の4!!
5NAME IS NULL:2005/07/17(日) 19:04:30 ID:KDZbilCa
Mysqlのselect文は他のDBのselect文と書式が違うのでしょうか。
  select * from user where name = "root";
や、
  select * from user where name = "root";
と打つと、
  『Illegal mix of collations (sjis_japanese_ci,IMPLICIT) and
  (latin1_swedish_ci,COERCIBLE) for operation '='』

というエラーが表示されます。
レベルが低くて申し訳ないですが、ご教授お願い致します。
6NAME IS NULL:2005/07/17(日) 19:33:03 ID:???
>>5
set names sjis
7NAME IS NULL:2005/07/17(日) 19:45:10 ID:KDZbilCa
ありがとうございます。
文字コードを指定しないといけなかったんですね。
(私の使ってる本にはこんなこと書いてなかった・・・)
8NAME IS NULL:2005/07/17(日) 21:12:30 ID:???
>>7
その本には喪前さんの使ってるMySQLのバージョンについて
説明したとは書いてないだろ?
9nakano:2005/07/17(日) 21:35:13 ID:alIwKZDq
レベルの低い質問で恐縮です。既出かもしれませんが、教えていただけないでしょうか。
MySQL4.0.24をインストールしてpingを打つと、

C:\mysql\bin>mysqladmin ping
mysqladmin: connect to server at 'localhost' failed
error: 'Access denied for user 'ODBC'@'localhost' (using password: NO)'

このようになってしまいます。青信号はついているのですが…。
やさしい方、教えていただけないでしょうか。
よろしくお願いします。
10NAME IS NULL:2005/07/17(日) 21:40:25 ID:???
>>9
mysqladmin ping -uユーザー名 -pパスワード
11NAME IS NULL:2005/07/17(日) 21:46:07 ID:???
>>9
あのさぁ、エラーメッセージが表示されてるでしょ。
その意味を辞書を引いてみようとか、googleで検索してみようという気はないの?
mysql Access denied for user ping 辺りで検索してみると引っかかるでしょ。
レベルが高い、低いではなくてあなたの姿勢の問題。
12nakano:2005/07/17(日) 22:33:27 ID:alIwKZDq
>>9さん
ありがとうございます。

>>10さん
ぐぐってもうまくいかないんです。

もうちょっといろいろやってみます。
13NAME IS NULL:2005/07/17(日) 22:39:00 ID:???
>>5
グーグル先生に"Illegal mix of collations"と聞くとヒントぐらいは
得られそうなもんだが。
手元の本を見るか2chで聞くぐらいがオマイさんの自助努力なのかい?
14NAME IS NULL:2005/07/17(日) 22:54:05 ID:???
>>13
予想するに、手元の本のMySQLのバージョンが低いんじゃね?
15NAME IS NULL:2005/07/17(日) 23:47:29 ID:p/tFoT79
f48.aaa.livedoor.jp/ にてmysql登録をしかねやんMysqlというアプリでテーブル作成まではうまく言ったのですがinsert文を発行したいと思い作成したテーブルを選択した状態で設定→SQL発行とすると必ずエラーが発生しアプリが落ちてしまいます。
これはアプリのバグなのでしょうか私のやり方が間違っているのでしょうか?どなたかご存知の方ご教授ください。よろしくお願いします。
16NAME IS NULL:2005/07/18(月) 03:07:28 ID:vyEXGHNV
http://dev.mysql.com/doc/mysql/ja/unnamed-views.html

にある、

SELECT AVG(sum_column1)
FROM (SELECT SUM(column1) AS sum_column1
FROM t1 GROUP BY column1) AS t1;

をサブクエリ使わずに書くにはどのように書いたら良いでしょうか?
17NAME IS NULL:2005/07/18(月) 23:21:34 ID:???
夏だな・・・・
18NAME IS NULL:2005/07/19(火) 09:26:58 ID:???
暑いから嫌い!
19NAME IS NULL:2005/07/21(木) 12:03:46 ID:NbONOxT/
逆 between のようなことをすることは出来ますでしょうか?

date型で、1つのデータに2004-01-25, 2004-05-30 といった二つのカラムがある
のですが、select で 2004-02-01 という中間の値を入れた場合にhitさせたいの
です。

可能でしょうか? 具体的にはstartとendというカラムがありまして、以下のよう
な感じで入っています。

id, start,    end
1, 2004-01-03,  2004-03-20
2, 2004-01-09,  2004-02-01
3, 2004-12-10,  2005-06-03

ここで、 2004-01-10 と検索した場合に、1と2を取得したいのですが....
20NAME IS NULL:2005/07/21(木) 12:10:57 ID:NbONOxT/
ああ、そうか。
betweenのような句を探さないで、普通に <= >= こんなんでやればいいんですね。
失礼しました。
21NAME IS NULL:2005/07/21(木) 12:23:18 ID:???
>>20 もう解決したっぽいけど、こう書くこともできるよ
select * from テーブル where '2004-01-10' between start and end
22NAME IS NULL:2005/07/21(木) 12:40:04 ID:NbONOxT/
>>21
between の左側に値を置いても大丈夫なんですね(>_<)
知らなかった...。有難う御座います。
23NAME IS NULL:2005/07/21(木) 13:12:09 ID:???
not between と言うのもアルヨ
24:2005/07/21(木) 18:25:30 ID:hG6IYky3
うげ
25NAME IS NULL:2005/07/22(金) 15:48:52 ID:???
サブクエリを使わなきゃムリっぽいSQL文が必要だったので
4.0から4.1に移行してみたけどなんか文字バケまくったり動かすのにかなり手間どった・・・。
まだ4.0使ってる人多いみたいだけど、まだ4.1は触らないほうが無難だったりするのでしょうか?
26NAME IS NULL:2005/07/22(金) 16:58:58 ID:AOT0Z6JT
>>25
ver4.1.12以上、ver5.0.4以上でMySQLサーバ自身の日本語問題は全て解決した。

長い目でみたら、機会があるうちに移行するのも手かと。
もちろんちゃんと勉強した上でね。
27NAME IS NULL:2005/07/22(金) 17:00:26 ID:AOT0Z6JT
>>25
どうしてもサブクエリを使わないと駄目なんですか?

CREATE TEMPORARY table...じゃあ要件満たしませんか。

サブクエリの内部実装的にはTEMPORARYテーブルを使っている気がするので。
2825:2005/07/22(金) 17:21:27 ID:???
ててててんぽらりてーぶる!?!?

そんなのあったのかorz。
2925:2005/07/22(金) 18:44:42 ID:???
やべぇ・・・temporary tableってすげぇ便利・・・。
なんでもっと早く知らなかったんだorz。

なんか住所録の情報を入れてたテーブルをphpMyAdminで参照すると
以前は問題なかったのに
Warning: mb_strpos(): Unknown encoding or conversion error.
こんなのが出るように・・・orz。
シフトJISにしてるしMySQL上でも自作のPHPからでもちゃんと見えるのに・・・。
戻そうかどうしようか考え中・・・。
30NAME IS NULL:2005/07/22(金) 18:49:48 ID:jV7W8Ozy
MYSQLの5.0.7ってまともにインスコすらできん
.sockが生成されないとかありえんわ。最新版は怖いね
3125:2005/07/22(金) 20:48:06 ID:???
今度はフォームからデータベースに登録した文字列の間に意味不明に\が出てくるよ・・・。
もういやだ・・・。戻そ・・・。
32NAME IS NULL:2005/07/23(土) 00:53:17 ID:iD3b4jZ1
>>30
ver5.0.3くらいから5.0系使ってますがインストールで躓いたことはないなあ。

検証用なんで適宜新しいバージョンにしている。WindowsとLinux両方で。
33NAME IS NULL:2005/07/23(土) 01:11:38 ID:whbB9Rh8
>>30
5.0.7をTouboLinux、Windowsには95,NT4,2000,XPに入れてみたけど、Win95だけだめぽ(Winsockのせいではなく・・・)。
だけじゃDLLが足りないのか、デバイスが作動していません(既に記憶に無いでしょうが、win95時代はよく見たアレ)で動いてくれない。
何が足りない(or壊れてる)のかは不明。。。
34NAME IS NULL:2005/07/24(日) 20:33:41 ID:???
InnoDBを試してみたんだけど、MySQLのコンソールからinsertとか普通にできちゃうけど、
start transactionは不要なんでしょうか?
set autocommit=0にしても変わらない・・・。
どこいらへんがトランザクションなカンジになってるんでしょうか?
3534:2005/07/24(日) 22:06:24 ID:6b1W+xWK
あああ、set autocommit=0ってセッションごとに必要だったのか。
解決しました。
36NAME IS NULL:2005/07/25(月) 20:01:31 ID:JMYcapmE
重複したレコードを除いたレコード数の結果が欲しいのだが、

通常のレコード数を求める時には、

select count(*) from db;

distinctはうまく使えないようだし・・・。
37NAME IS NULL:2005/07/25(月) 20:14:12 ID:???
>>36
失礼、解決しました。
やはり、distinct 使うのですね。

select count(distinct レコード名) from db;

ということですね。
これで、重複データを除いた、レコード総数が返ってきますね。
38NAME IS NULL:2005/07/26(火) 18:15:37 ID:05R6nAO8
あ〜混乱してきました。
助けてください。


tb_a:
名前,購入商品
name1,a
name2,b
name3,a
name2,b
name2,a
name4,a
name2,a
name3,c

上記のようなテーブルがあります。
aの商品のみ購入した人はどのようなクエリ
となるどでしょうか?

上記の場合は、2名です。

name1,a
name2,a

よろしくお願いします。
3938:2005/07/26(火) 18:18:52 ID:05R6nAO8

> 上記の場合は、2名です。
> name1,a
> name2,a

ダメだー。間違っていました。^^

結果リストは、
name1,a
name4,a

が欲しいです。
40NAME IS NULL:2005/07/26(火) 18:38:46 ID:???
>>38
select tb_a.* from tb_a
inner join (select name from tb_a group by name having count(item) = 1) as x
 on tb_a.name = x.name
where tb_a.item = 'a';
4138:2005/07/26(火) 19:07:16 ID:05R6nAO8
>>40
早速のレス有難う御座います。

実行してみた所、エラーが出てしましました。

MySQLのメッセージ -->

#1064 - You have an error in your SQL syntax near '(select name from tb_a group by name having count(item) = 1) as x
 on tb_a.nam' at line 2

バージョンの問題でしょうか・・・。
MySQL 3.23.58 でした。

でも、方向性がなんとなくわかりましたので、
がんばってみます。
4238:2005/07/26(火) 19:25:56 ID:05R6nAO8
それから、例のテーブルが悪かったのですが、

name , item
-----------
name1,a
name2,b
name3,a
name2,b
name2,a
name4,a
name2,a
name3,c
name1,a <--- 重複の可能性もあります。


>>40 さんにご提示頂いた、クエリを読み解きながら思考中。
43NAME IS NULL:2005/07/26(火) 19:38:25 ID:HBqC/CKY
>>42

そのバージョンじゃサブクエリ使えないよ。
44NAME IS NULL:2005/07/26(火) 19:42:34 ID:???
>>42
重複した場合、name1 は取得対象なの?
取得対象だと、HAVING COUNT(xxx) = 1 の条件にマッチしないから
>>40のクエリではダメだよ。
4538:2005/07/26(火) 20:28:17 ID:05R6nAO8
>>43
やはりそうでしたか・・・。

>>44

> 重複した場合、name1 は取得対象なの?
> 取得対象だと、HAVING COUNT(xxx) = 1 の条件にマッチしないから
> >>40のクエリではダメだよ。

取得対象です。
はい。クエリ読み解く中で、気が付きました。



ない頭で考えているのですが、
方向的には、一旦、item=aの条件に合致したリストを出し、
その後、でもう一度テーブルにくくり付け、itemが他に選択されていないもの
を抽出する感じかな。とまた、こんがらがってきていますが、

サブクエリ使えないときびしいのでしょうか?
46NAME IS NULL:2005/07/27(水) 01:50:21 ID:zTs69tD5
>>45
CREATE TEMPORARYってver3系には使えないの?

#どうせMySQLの中じゃサブクエリもTemporaryも一緒なんじゃないかと・・・。
4738:2005/07/27(水) 03:35:34 ID:PEswNqYQ
>>46
> >>45
> CREATE TEMPORARYってver3系には使えないの?
> #どうせMySQLの中じゃサブクエリもTemporaryも一緒なんじゃないかと・・・。

レス有難う御座います。

いろいろググッテると、上記のテンポラリーテーブルを作成してうんぬん・・・。
というようなものがあって、これってかなり便利ーみたいなHPがあったので、
気にはなっていました。今ちょこっと見てみたところ使えそう・・・。な感じです。

明日じっくり試してみます。
今日は寝ますZzz。
48NAME IS NULL:2005/07/27(水) 03:45:26 ID:2Zp5SUfn
>>47
TEMPORARYテーブルとHEAPテーブル(新名称:MEMORYテーブル)はほとんど同じであった気がする。
違いは、前者は".frm"ファイルが作成されないので接続を閉じたりサーバが落ちたりするとそのテーブルそのものが
消滅するけれども、後者は".frm"ファイルが作成されるのでサーバが落ちると行データのみ消えるというところ。

どちらもメモリ上にしかアクセスしないので高速で、前者は".frm"ファイルすら作らないので一般的に重い処理な
CREATE文も気にならないのがサブクエリの代わりに使われうるところか。

あと前者はサーバ停止時にごみが残らないのも良いかも。AppServerでいうところのセッションみたいなもんだね。

まあそのHP読んだならこういうことがたぶん書いてあったのではと想像しますが。
49NAME IS NULL:2005/07/27(水) 08:57:56 ID:???
>>48
TEMPORARYって同一接続からじゃないと見れなくね?
確認してないけど。
50NAME IS NULL:2005/07/27(水) 11:26:12 ID:2Zp5SUfn
>>49
あってるよ。それも特徴の1つだったね。ぢゃないとサブクエリの代理になんて使えん。
5138:2005/07/27(水) 11:32:06 ID:PEswNqYQ
>>48

おお〜書込みしようと思うと、レスが入ってびっくり。
おはようございます。って、昼か。

レスどうもです。

参考になりました〜。
メモリ上で処理されるのですねー。

セッション内で処理されることは理解してました。

出先ほど、解決しました。
下に結果入れますので、
見ていただくとうれしいです。
かなりもっさり感がありますが。
5238:2005/07/27(水) 12:19:38 ID:???

結果報告しようと思っていましたが、

大変なことが起きました・・・。
PCがフリーズしてしまったので、しかたなく主電源で
再起動させた所、HDDから異音が・・・。
HDDさんがお亡くなりになりました。トホホ、最悪。

今から復旧作業に取り掛かりますので、
結果報告はそれからとなります。

せっかく解決して、幸な気分になろうかという時に、
ついてねー。まさに天国から地獄へいっきに落とされたよ。
うー気力がもたない・・・。では。

ノートPCより
53NAME IS NULL:2005/07/27(水) 15:16:40 ID:zTs69tD5
>>52
お悔やみ申し上げます。ここにも最近同じ体験をしたものが1人。
54NAME IS NULL:2005/07/27(水) 18:34:25 ID:yhPI0a2x
サーバA上のPHPからサーバBにあるMySQLに接続しようとしているのだけど、
できない。
PHPにて select * from hoge_TABLE を発行しても、エラーメッセージすら出ない

1.サーバBのポート3306は開いている
サーバAから telnet サーバB 3306 とすると、MySQLのバージョンと
  文字化けした文字が見え、切断される。

2.GRANTにて対象のデータベースに権限を与えた(つもり)。
Grant SELECT on hoge_DB.hoge_TABLE to user@'サーバA' identified 'hoge_pass';
mysql データベースの tables_priv 内に登録されていることを確認。

3.念のためにmysqlは再起動済み

教えてくだされ
55NAME IS NULL:2005/07/27(水) 20:00:00 ID:???
>>54
>1.サーバBのポート3306は開いている
>サーバAから telnet サーバB 3306 とすると、MySQLのバージョンと
>文字化けした文字が見え、切断される。

ここをもう少し詳しく調査。
サーバAにインストールした(してなけりゃインストール)
MySQLクライアントツールからサーバBのMySQLサーバに接続して
上手くいくか試してみ。
56NAME IS NULL:2005/07/27(水) 20:09:28 ID:yhPI0a2x
>55

申し訳ないが、どこかにやり方ないか教えてくだされ。
57NAME IS NULL:2005/07/27(水) 20:29:11 ID:???
自分で調べてみるって発想はないんかい
2chに張り付いてレス待つだけのカスは消えろ
58NAME IS NULL:2005/07/27(水) 20:35:33 ID:???
>>54
テーブルの中身が空とかはないよな?
59NAME IS NULL:2005/07/27(水) 21:05:58 ID:???
みなさん、>>1の過不足データを指摘して下さい。
ちなみに dev.mysql.com の方を掲げたのは www.mysql.com が企業サイトであるからです。
みなさんが MySQL の内部仕様を諳じるようになる日がくるといいですね。
60NAME IS NULL:2005/07/27(水) 21:13:37 ID:???
質問させてください。
ユーザーに与える特権で、user@hostが重複した場合の優先度というのはどうなっているのでしょうか。

例えば
%@%
test@%
で両方ともパスワードが設定されていないとします。
"test" "" としてログインしようとした場合、どちらの権限が優先されるのかという法則はあるのでしょうか。

といいますのも、とあるサーバーでMYSQLを使用したところ
%@localhost パス無し
test@% パスあり
と設定されているらしく、どうも%@localhostのほうが優先されてしまい、"test" "pass"で入ろうとしても「パスワードエラー」が出てしまうのです。
Access denied for user

そして、他のサーバーから"test" "pass"でログインしようとすると(注文した権限どおりで)入れてしまいます。
また、DBと同じサーバーから"test" "" でログインすると、最低権限でログインできてしまいました。
こうなると %@localhost のほうに優先的にログインしようとし、パスワードエラーが出ているとしか思えません。

長い文章となりましたが、どなたか「権限の優先度」についてご教授いただけませんでしょうか。
よろしくお願いいたします。
61NAME IS NULL:2005/07/27(水) 21:46:26 ID:???
>>60
http://dev.mysql.com/doc/mysql/ja/connection-access.htmlを見ると
登録されているユーザーを
 明示的なホスト名、ワイルドカードなホスト名、明示的なユーザー名、ワイルドカードなユーザー名
の順番にソートしてからチェックが行われるみたいだね。
%@localhostが登録されている段階でどうしようもないかと。
62NAME IS NULL:2005/07/27(水) 21:56:14 ID:???
ありがとうございました。
サーバー担当に問い合わせてみます。
6361:2005/07/27(水) 22:14:36 ID:???
>>62
ごめん。もう読んではいないかな。。。
よく考えれば、先の順番にソートされるのだから
test@% と同じ権限、同じパスワードで test@localhost を作成すればいいのではないかと。
もっともセキュリティ上、%@localhost が存在するのはどうかとは思うが。
64NAME IS NULL:2005/07/27(水) 23:55:47 ID:???
6564:2005/07/27(水) 23:56:24 ID:???
出遅れた...
66NAME IS NULL:2005/07/28(木) 00:35:31 ID:???
>>63-64
ありがとうございました。
自宅鯖でも実験してみたところ、やはり %@localhost がいると、同鯖内からのコネクトは全てそちらに流れてしまいました。

>もっともセキュリティ上、%@localhost が存在するのはどうかとは思うが。
まったくですね。
実験用のテーブルが1つだけおいてあり、いじれるようになってました。
そのテーブルでお試しをやれということで設置したのでしょう。

しかしなんというか、このサーバー設定だと誰もDBが使えません。(外部からアクセスするならOKですが)
私以外にDBを使おうとした人が居ないってことになるんですが…。
さすがマイナー鯖…。
67NAME IS NULL:2005/07/28(木) 01:41:42 ID:eXuTIbui
お決まりのこんなのがあります。

$sql = "select * from mydb";
$result = mysql_query($sql);
$rows = mysql_num_rows($result);
while ($row = mysql_fetch_array($result)) {
←ここ
}

矢印のところ(whileループの中)で別のクエリを実行、さらにwhileを入れ子にとかってかなり変な事なんでしょうか?
また、$iなんかのカウント用の変数を仕込んでループの都度、++でカウントアップ。
その変数をmysqlから読み出した$row[hoge]にevalで
くっつけてeval("¥$hensu_$i = $row[hoge] ";);って感じで上書きせずに後で取り出せるようなことをした(うまくいってます)んですが、これは手法としてはいかがなもんでしょうか?
68NAME IS NULL:2005/07/28(木) 01:53:16 ID:???
XREAでphpMyAdminを使用してテーブルを作りました。
テーブル名=access フィールド=test (tinyint(3) UNSIGNED)

PHPで行の追加をしようと下記のコードを書いたのですが、行が追加されません。
<?
$conn_id = @mysql_connect('localhost','ユーザー名','パスワード') or exit('失敗');
mysql_query("INSERT INTO access('test') VALUES('2')",$conn_id) or exit('書き込み失敗');
mysql_close($conn_id);
?>

色々試してみたのですが、何度やっても「書き込み失敗」が表示されてしまいます。
初心者の質問で申し訳ないのですが、どなたか原因を教えて頂けないでしょうか?
69NAME IS NULL:2005/07/28(木) 01:55:33 ID:???
>>68
mysql_select_dbした?
70NAME IS NULL:2005/07/28(木) 02:56:46 ID:zKnSR/lj
>>54のように「ちゃんと接続できているのか」「ちゃんとクエリがサーバに届いているのか」を見るには、
一般クエリログを使うのが良いよ。

my.cnfに

[mysqld]
log

と書いて再起動すればdataディレクトリに"コンピュータ名.log"というファイルができる。
このログファイル(一般クエリログのファイル)は、MySQLサーバが受け付けたコマンド/クエリが
単純に追記されていく。

#コマンド/クエリが正常に実行されたか、エラーになったか以前に、受け付けたものを出力。

この一般クエリログは>>54のような開発者向けのデバッグ用のログ出力として元々作られた機能で、
そんなときはこれをまさに使うべき。漏れもいつもお世話になってるよ。
71NAME IS NULL:2005/07/28(木) 04:32:53 ID:???
>>68
>>69 の指摘の通り mysql_select_db をしていないのと
INSERT 文でカラム名を ' で囲っているのがおかしい希ガス。
ただのサンプルコードなのかもしれないけど、exit の部分で mysql_error を
呼び出してみると調べやすいと思う。

$conn_id = @mysql_connect('localhost','ユーザー名','パスワード') or exit('失敗 ' . mysql_error());
mysql_select_db('データベース名', $conn_id) or exit('select_db失敗 ' . mysql_error());
mysql_query("INSERT INTO access(test) VALUES('2')",$conn_id) or exit('書き込み失敗 ' . mysql_error());
mysql_close($conn_id);
72NAME IS NULL:2005/07/28(木) 12:21:33 ID:???
>>69-71
ありがとうございます。
講習とバイトが終わったら、アドバイス通り試して御報告します。
7338:2005/07/28(木) 12:44:46 ID:IXQBxgZK
とりあえず復活。(気分は今年一番の落ち込み度w)


>>53
> お悔やみ申し上げます。ここにも最近同じ体験をしたものが1人。
どうもです。まめにバックアップですね。分かってはいるのですがね・・・。なかなか。
今回はPC内の結構な資産がぶっ飛んでしまったことがわかり、多大な時間が
消費されそうです。復旧率10%。



解決内容:

# 各選択値集計の一時テーブルを作成
create temporary table sel_a select name,count(*) cnt_a from tb_a where item='a' group by name;
create temporary table sel_b select name,count(*) cnt_b from tb_a where item='b' group by name;
create temporary table sel_c select name,count(*) cnt_c from tb_a where item='c' group by name;

#一時テーブルを結合し、抽出
select tb_name.name,cnt_a from tb_name
left join sel_a on tb_name.name = sel_a.name
left join sel_b on tb_name.name = sel_b.name
left join sel_c on tb_name.name = sel_c.name
where isnull(cnt_a)=0 && isnull(cnt_b)=1 && isnull(cnt_c)=1

結果
+----------+--------------+
| name       cnt_a
+----------+--------------+
| name1       2
| name2       1
+----------+--------------+

※tb_nameテーブルは、name(名前)がユニークなテーブルです。

これで、解決しそうです。
実装するには、もう少し実験してみます。
レコード数が6万件ありますので。


もし、気になるよな所があれば指摘頂けるとありがたいです。








7438:2005/07/28(木) 12:46:58 ID:???
>>73
また、間違えてるは、

結果
+----------+--------------+
| name       cnt_a
+----------+--------------+
| name1       2
| name4       1
+----------+--------------+

が正解です。
75NAME IS NULL:2005/07/28(木) 13:11:14 ID:???
>>67
どんなSQLを書いているか分からんが、
可能性1.普通のSQL発行一発で全部処理できる
可能性2.一時テーブルかサブクエリで全部処理できる

あとPHPのコードも
指摘1.「上書きせずに後で取り出し」の意味がわかんね
指摘2.配列を使えばevalはいらない
76NAME IS NULL:2005/07/28(木) 13:31:10 ID:???
>>73
復旧オメ。完全復活までガンガレ。
SQLは以下でいいような希ガス。一応、最終出力に商品名を入れてみたけど。

CREATE TEMPORARY TABLE sel_a AS SELECT name,item,count(*) AS cnt_a FROM tb_a GROUP BY name,item;
SELECT name,MIN(item) AS item,cnt_a FROM sel_a GROUP BY name HAVING item='a' AND COUNT(*)=1;
7754:2005/07/28(木) 13:35:35 ID:B3h8YO0T
>70
ありがと。

mysql -h サーバB -u ユーザ名 -p パスワード

これにて接続できるのに、PHPからは接続できない。

$con = mysql_connect("サーバB","ユーザ名","パスワード");

この結果がこない、なんで〜〜!!
7838:2005/07/28(木) 17:31:12 ID:???
>>76
> >>73
> 復旧オメ。完全復活までガンガレ。
ありがとう〜。

で、本題。
すごいっつーか、さすがというか、神!

実は、ご提示頂いた、クエリそのまま流し込んだのですが、
エラーも無く、結果も0で帰って来たんです。
ここから、悩みました。
どうも、HAVING item='a' AND COUNT(*)=1が機能していないぞ・・・。

で、うじゃうじゃやっていてわかりました!
バージョンの問題だと!

とAND COUNT(*)=1
が古いバージョン(3.x系かな)では、機能しないようです。

私が使えるmysqlサーバで4.0が使える所がありましたので、
そこへ、テストデータ流し込み、クエリ発行、思いっきり
正しい結果が返ってきましたよ。


SELECT name,MIN(item) AS item,cnt_a,COUNT(*) AS cnt_fl FROM sel_a GROUP BY name HAVING item='a' AND cnt_fl=1;
このように変更して、無事動作しました。

MIN(item)の使い方に、センスと経験が見えますよね。
ここ、テストに出るよ、AAでも探してきて貼り付けたいぐらいですわw。

3万件程のデータで、試してみましたが、
私が記述したクエリだと、一時テーブルは各2秒ほど時間ですみましたが、
結合部分で、いったっきり帰ってこない。あげくに、他のクエリまで、ロックかかる始末!
mysqlが実際どのように処理するか頭に無いんで、こんなことになるのでしょうね。

>>76 さんのですと、
一時テーブルに、
(2.45 sec) 
抽出に
(1.19 sec)

すばらしい。

ありがとうございました。

79 :2005/07/28(木) 19:18:35 ID:Wm4FzOeU
数百人で利用するCGIがあるのですが、
複数のデータベースに利用者ごとにデータ入れるか、
1個のデータベースに全員分入れるかで悩んでいます。
速度とか、メモリとかサーバーに優しいのはどちらでしょうか。

複数の方がテーブル壊れたとき安心っぽい気はしてます
80NAME IS NULL:2005/07/28(木) 19:53:40 ID:???
>>79

>複数のデータベースに利用者ごとにデータ入れるか、

リレーショナルの意味分かっていない希ガス。
8179:2005/07/28(木) 20:09:09 ID:???
失礼 複数のデータベースは1個のデータベースを1ユーザが利用 訂正
82NAME IS NULL:2005/07/28(木) 22:39:25 ID:???
ユーザーが一人増えるごとにデータベースを増やすなんてありえねえ
83NAME IS NULL:2005/07/28(木) 23:38:49 ID:???
500テーブル、各2万レコードと
1テーブル1千万レコードってどっちが効率いい?
84NAME IS NULL:2005/07/28(木) 23:56:42 ID:???
要実験。
8567:2005/07/29(金) 00:06:58 ID:???
>>75
ネストされたカテゴリ、それを入れ子リストで表示。
なおかつ、常に一つのカテゴリだけが展開され、最下層の項目が展開される、とこんな感じでhtmlを吐き出すためのものなので、クエリ一発ではどうにもならないと思います。
サブクエリ、このへんは踏み込んだことがないのですが、使ってるmysqlが4.0なのでサブクエリは使えないので joinを使ってます。

>「上書きせずに後で取り出し」の意味がわかんね
htmlのコーディングがかなりややこしい事になるので、先に結果だけを変数で吐き出しておき、そこで、行数もカウント、あとで、そのカウントに応じて、htmlを吐き出すと同時に、ループ回して上書きされないようにした変数をそこで差し込む、って感じです。
mysql_fetch_arrayの上下を、tableとかulで囲まなくて済まないかな?と実験的な意味も含めてそういう書き方をしてみましたので、どうしてもそうしなければならない訳ではありません。

>配列を使えばevalはいらない
なるほど。配列ですね。苦手なもんで盲点でした。うまく使えばそんな変な事をしなくて済みそうですが、しばらく勉強しないと。
86NAME IS NULL:2005/07/29(金) 00:57:41 ID:stkpnhA+
>>79
速度とかメモリとか、サーバにやさしいのは明らかに「1個のデータベースに全員分いれた」場合。

>>83
1テーブル1千万レコードの方がサーバにやさしい。

ちょっとさ、79も83も、すごく簡単にデータベース/テーブル分けるような案だしてるけど、
データベースを分ければその分ディレクトリが、テーブルを分ければその分ファイルが
生成されるんだよ?

それよにるIOリソースの消費考えたら、自ずと分かるだろうに・・・・。

いいか、一般的にデータベースのボトルネックはIO。各RDBMSベンダーともども、そのIOによる
ボトルネックを以下に攻略するかに命をかけてエンジンを実装しているのだよ。

#データ書き込みより前にトランザクションログ(追記型)を書くようにしてみたり
#ログ書き込み自体をバッファリングしてみたり
#メモリ上にキャッシュしてOKなものは積極的にキャッシュしてみたり
8768:2005/07/29(金) 02:25:16 ID:???
色々アドバイスしていただいたのにselect_dbの時点でおかしかったようです・・・。

select_db失敗Access denied for user: 'ユーザー名@localhost' to database 'access'

これってセーフモードとかの関係のやつですかね??
今日はとりあえず寝て、起きたら試行錯誤したいと思います。
8871:2005/07/29(金) 08:56:45 ID:???
>>87
PHPのセーフモードは関係ないと思うけど。
エラーメッセージを見るとmysql_select_dbの引数にデータベース名ぢゃなく
間違ってテーブル名を指定しているのが原因ぢゃない?
 select_db失敗Access denied for user: 'ユーザー名@localhost' to database 'access'
                                     ~~~~~~~~~
ちょっとググってみたら以下のように設定されている模様。
XREAは使用したことないんで、データベース名のIDが何かは漏れには判らないけどね。
>>87にも判らなければXREAに問い合わせして味噌。
 データベース名:IDと同じ
 ユーザ名・パスワード:FTPと同じ
8971:2005/07/29(金) 08:57:58 ID:???
>>88
ありゃ。ずれた。~~~~は、'access' の部分ね。
90 :2005/07/29(金) 12:47:16 ID:???
>>86
1DBや、1テーブルの時
壊れた場合、すべてに影響しない?

91NAME IS NULL:2005/07/29(金) 13:09:22 ID:???
>>90

SQL は向いてないよ。
ファイルメーカーでも使ったら?
92NAME IS NULL:2005/07/29(金) 16:15:19 ID:DbsVJgMJ
すみません,MySQLのデータをPHPで吐き出したいのですが,
データに$(ダラーマーク)が含まれる場合はどのようにしたらいいのでしょうか?

例:
Prizeフィールドに
$100,000
$125,000
とあった場合
PHPで
(SQL文)
$prizedt = $row["Prize"]
として変数を格納した後,
<td>$prizedt</td>とした場合,うまく吐き出せないのは分かっているのですが・・・
\$prizedtでもうまくいきませんでした.
93NAME IS NULL:2005/07/29(金) 16:30:36 ID:???
>>92
><td>$prizedt</td>とした場合,うまく吐き出せないのは分かっているのですが・・・
あなたが勝手にそう思っているだけ。
echo "<td>$prizedt</td>";
で無問題。てかPHPスレに行きなされ。
9490:2005/07/29(金) 16:32:00 ID:???
どういう理由でSQLが向いてないと
リレーショナルがどうのこうのいてたやつ?
9586:2005/07/29(金) 17:01:56 ID:stkpnhA+
>>90
86で言っていたのはリソースの消費と性能面について。
あと多分誰かが1ユーザ1データベースって管理みたいな話もしてたと思う。

90の言う可用性は、普通は「複数データベース/テーブル」によって実現するものではないよ。

可用性はバックアップ、レプリケーション、RAIDによるミラーリング/冗長化などの方法によって
解決すべき要件かな。

要するに言いたいのは「可用性を考慮してデータベース/テーブル分ける」ってのは普通はやらないってこと。

いままでの話の想定だと、どっちにしろディスクが逝ったら終りでしょう。
MySQLを1年以上使ってファイルが壊れる可能性よりも、ディスクが壊れる可能性のほうが普通は高いし。
9686&95:2005/07/29(金) 17:08:06 ID:stkpnhA+
可用性うんぬん言うのなら、まずMySQLで最初にすべきことは、(定期的にバックアップとりつつ)
バイナリログをデータとは物理的に別のディスクに出力するようにすることだと漏れは思う。
その次がRAIDを使う、さらに大規模ならレプリケーションをバックアップに使うという感じでしょうか。

ま、話がずれてきた気がするのでこの話はここいらでおしまい。
9790:2005/07/29(金) 17:54:33 ID:???
レスありがとうございます。 ディスクが壊れる以前に
テーブル(ファイル)が壊れることの方が多いんじゃないかなと・・
DB分けた方がいいのかなと思って書きました
普通はバックアップ、RAID、レプリケーションなんですね
98NAME IS NULL:2005/07/29(金) 22:36:17 ID:???
データベースの場合、
「特定のデータが飛んでもそれ以外がOKだから大丈夫」なんてのは原則的にありえない。
全てのデータが保証されるように設計・構築をする。それがデータベース。

仮にファイルが飛ぶ確率の方が高かったとしても、
飛ぶ直前の状態まで戻して復旧させるにはログやレプリケーションといった手段が必要になる。
9968:2005/07/29(金) 23:12:26 ID:???
>>88-89
追加できました!! ありがとうございます。
select_dbはテーブル名を指定するものと思い込んでいました・・・。
100NAME IS NULL:2005/07/29(金) 23:47:09 ID:???
write専用マスター(innodb)とread専用レプリケーション(myisam)とに分けて
マスター側のトランザクションをレプリケーションでも同期したい。
同期ができなくてもレプリケーション側がダーティーなクエリだということをユーザに通知してほしい。
101NAME IS NULL:2005/07/30(土) 04:06:00 ID:4pVFNE71
>>98
というかデータベースなる製品をわざわざ使う目的ってそれだよな。
データベースがデータを保証する責務を一手に引き受けるから、
アプリサーバは自分のことに専念できる。
102NAME IS NULL:2005/07/30(土) 04:10:03 ID:4pVFNE71
>>100
何が言いたいのかいまいちわからんのだが。質問なのかなこれは?

同期レプリケーションはver5.1だかそれ以降だったかだぞ。
それまでは非同期レプリケーションにするか、あるいはMySQL Clusterを使え。

というか聞いた話ではMySQL Clusterとレプリケーション機能の融合が進んでいくんだとか。

ちなみに通知する機能は今のところ無い。
103NAME IS NULL:2005/07/30(土) 11:55:35 ID:nI55stf6
すいません、質問なんですがJDBC使ってMySQLに接続してるとき、何も処理せずある程度時間過ぎると
勝手にコネクション切られてしまうのですがこれって防ぐ方法無いんですか?
104NAME IS NULL:2005/08/02(火) 04:42:13 ID:XK7TkxJx
>>103
レスがついていないから漏れが調べてやったぞ。

mysql> show variables like 'wait_timeout';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| wait_timeout | 28800 |
+---------------+-------+
1 row in set (0.02 sec)

wait_timeoutで指定されている「秒数」以上のアイドル時間が経過すると、
サーバ側からコネクションが切断されるしくみになっている。

デフォルトでは8時間。いやならこれをもっとでかい数字にすればよい。

と思われる。
105NAME IS NULL:2005/08/02(火) 12:32:08 ID:uK9XBhtB
WebProg板に書いてしまい、板違いとの事で、こちらに来ました。
どなたか教えてください。

PHP+MySQL
MySQLに、2つのテーブルがあり、IDというフィールドをキーにしてリレーションをします。

テーブル1:ID、category
テーブル2:ID、name

この様な場合に、テーブル1のcategoryに対するテーブル2nameを全て列挙したいのですが、
どのようなクエリとPHPを書くのが一般的なのでしょうか。

いま考えているのは、
SELECT name FROM テーブル1 WHERE ID=○○
のようなクエリ自体をテーブル1のレコード数ループさせながらprintするというものなのですが、
あまり良い方法では無いような気がします。

表示結果は以下の様にしたいです。

カテゴリー1
 名前
 名前
 名前
カテゴリー2
 名前
 名前
 名前
  ・
  ・
  ・
106NAME IS NULL:2005/08/02(火) 12:43:32 ID:???
>>105
う〜ん。言っていることが判るような判らないような。
・SELECT name FROM テーブル1 WHERE ID=○○
 少なくともこのクエリではテーブル2のnameは取ってこれないし
・>ループさせながらprintするというものなのですが
 どのみちループしながら表示せざるを得ないし
 ループの中でテーブル2をSELECTするクエリを発行したくないって意味なのかな
・カテゴリー1、カテゴリー2
 この名前はどこから来たんだろ。categoryカラムの値なのかな

とりあえず勘で書いてみるとこんな感じ?

$sql = 'SELECT テーブル1.ID, category, name FROM テーブル1'
    . ' LEFT OUTER JOIN テーブル2 ON テーブル1.ID=テーブル2.ID'
    . ' WHERE テーブル1.ID=○○ ORDER BY テーブル1.ID';

$result = mysql_query($sql);

$previd = '';
while($row = mysql_fetch_row($result)) {
 if ($previd != $row['ID']) {
  echo $row['category'] . '<br>';
  $previd = $row['ID'];
 }

 echo $row['name'] . '<br>';
}
107105:2005/08/02(火) 13:24:58 ID:uK9XBhtB
>106
ありがとうございます。

すいません。提示したクエリの テーブル1の部分はテーブル2の記述間違いです。

書いていただいたソースを見て少し考えて見ます。
108105:2005/08/02(火) 13:31:26 ID:uK9XBhtB
・>ループさせながらprintするというものなのですが
 どのみちループしながら表示せざるを得ないし
 ループの中でテーブル2をSELECTするクエリを発行したくないって意味なのかな

while文やfor文の中でmysql_query()を実行することを避けたいという意味でした。
表現下手ですいません・・・。
109105:2005/08/02(火) 14:25:17 ID:uK9XBhtB
>106
なんとか理解できた気がします。
ありがとうございました。
110NAME IS NULL:2005/08/02(火) 20:14:15 ID:72DcUHyJ
ありがとうございます。
多謝です。
111mysqli:2005/08/02(火) 23:39:57 ID:???
質問させてください。
mysql_insert_idという関数がPHPにあります。
これをPEARで実現するにはどうしたらいいですか?
PEARにこれと同じようなもの用意されていますか?
PEARに関する情報が少なく行き詰まっています。
112NAME IS NULL:2005/08/03(水) 10:21:36 ID:???
>>111
WebProg板にGO!
113NAME IS NULL:2005/08/03(水) 22:35:27 ID:2w1kybpI
質問です。
MySQLのデータベースのファイルには何か暗号化等することは可能なのでしょうか?
たとえば*.MYDやiddata1等のファイルのみ、あるいはHDをまるごと盗まれてしまった場合に
中身を見ることは可能なのでしょうか?
PCというかOSの起動時には一応パスワードを設定しているので、
あくまでファイルだけから中を見ることが可能かについて気になっています。
よろしくお願いします。
114NAME IS NULL:2005/08/03(水) 23:41:43 ID:???
暗号化ファイルシステムを使えばいいのでは。
115NAME IS NULL:2005/08/04(木) 02:00:53 ID:keXsaDtJ
>>113
英語マニュアルにしかかいてないがこれなんてどうだ?

暗号化/複合化してくれる関数
http://dev.mysql.com/doc/mysql/en/encryption-functions.html
116NAME IS NULL:2005/08/04(木) 02:46:49 ID:???
皆さん凄いっすね・・・
最近MySQLインスコして勉強始めたんですけどDMLで挫けそうっすorz
117NAME IS NULL:2005/08/04(木) 04:02:45 ID:???
105への正しい回答はGroup byだよね

ところで4.1使える手ごろなレンサバないですかね・・・
Xrea以外に
118NAME IS NULL:2005/08/04(木) 04:25:41 ID:???
自己解決・・・海外鯖使うことにします
119NAME IS NULL:2005/08/05(金) 14:38:34 ID:???
テーブルのフィールドの順番を並び替えることは可能でしょうか?
レコードの並び替えではなく、例えば
tbl_user id, name, pass
となっているのを
tbl_user name, pass, id
などとしたいのですが。
よろしくお願いします。
120NAME IS NULL:2005/08/05(金) 15:32:05 ID:???
>>119
SELECT * FROM tbl_user;

SELECT name, pass, id FROM tbl_user;
と書き換えればオッケー

っつうかRDBのレコードやフィールドに並び順があると思うのは単なる幻想

121119:2005/08/05(金) 16:14:20 ID:???
レスありがとうございます。>>120
表示するときに並べ替えるのではなく、あくまでテーブルを管理する際に
並べ替える必要を感じたんですけどね。
データベース的に意味はないですけど、精神的に重要な項目から並べたいというのがあったので・・・。
122NAME IS NULL:2005/08/05(金) 17:38:30 ID:???
SELECT * なんて危険なものを恒常的に使う癖は早く直したほうがいい
123NAME IS NULL:2005/08/05(金) 19:57:06 ID:???
何が危険なの?
124NAME IS NULL:2005/08/05(金) 21:39:01 ID:???
ニトロ
125NAME IS NULL:2005/08/05(金) 21:39:50 ID:???
ワイルドカードを使う奴に限って「頭からn番目の項目」とかいう
処理を書くからでしょ。要するに無頓着。

遅い遅いと言ってる奴の処理みてたら、アスタリスクで全部
(比較的大きいバイナリーデータの入ってる分も)取り出してて、
idだけ取って後で必要なものについてはidに基づいて引き出せよ
と思った。
126NAME IS NULL:2005/08/05(金) 21:42:19 ID:???
それは判るけど「危険」っていう理由ではないわな。
なにが危険なのかを知りたい。
127126:2005/08/05(金) 21:45:47 ID:???
すまね。前2行を読み落とした。
ワイルドカードで取得したレコードに対して「頭からn番目の項目」を取得するのは危険だわな。
納得。
128NAME IS NULL:2005/08/05(金) 21:48:57 ID:???
$buffer[$i]とか?
そんな処理する奴いるんか
129NAME IS NULL:2005/08/05(金) 22:13:44 ID:???
今日日の"職業"プログラマをなめてはいけない...orz
130NAME IS NULL:2005/08/05(金) 22:32:14 ID:???
SELECT * なんてかわいいもんじゃん。

INSERT INTO `tablename` VALUES ( $a, $b, $c )
とかはマジやばい。
Prepared Statement使えとあれほど言ってるのに。。。
131NAME IS NULL:2005/08/05(金) 22:39:55 ID:???
まぁPrepared Statementが使用できないDBライブラリもあるから
しょうがない場合もあるけど。
ただせめて値は ' で囲って欲しいよね。
132NAME IS NULL:2005/08/05(金) 23:01:47 ID:???
そのPrepared Statementなるものは4.1以降でないと利用できないのでしょうか?
こないだ4.1入れてパニクって戻したばっかなんだよな・・・。
133NAME IS NULL:2005/08/06(土) 00:46:19 ID:???
>>131
クオートで括っただけでOkなんていうと、
SQLインジェクションされちゃいますよ。
134NAME IS NULL:2005/08/06(土) 15:38:07 ID:???
日付や電話番号などをinsertする時に、
数字の先頭の0を省かれないようにするには
intではなくvarcharなどを使うしかないんでしょうか
135NAME IS NULL:2005/08/06(土) 15:43:08 ID:???
まぁintは使わないな。
0がどうのというより、日付も電話番号も数字を使うけど
「数値」とはちょっと違う存在じゃん?
136NAME IS NULL:2005/08/06(土) 15:47:19 ID:???
あ〜、そうですよね。即レスどうもです。
137NAME IS NULL:2005/08/07(日) 12:19:52 ID:???
Winndows版の4.0.24はinnodbサポートしていますよね?
サーバをmax-ntにしているのに(管理のサービスでmax-ntになっているのを確認もしてます)
innodb_data_file_pathを指定するとシステムエラー1067をはきます
datadirの権限はeverybodyで書き込み権限はあります
容量はあるし、構文ミスもありません(innodb_data_file_pathをコメントアウトするとサーバが起動します)

バーチャルPC上でWindows2000で実行しています
138NAME IS NULL:2005/08/07(日) 12:57:24 ID:???
>>137
innodb_data_file_path、innodb_data_home_dirに設定した値を示してもらった方が
早いかもしれないけど。
innodb_data_file_pathをフルパスで指定していてかつinnodb_data_home_dirを
コメントアウトにしていない?
datadirで指定したディレクトリに作成される "サーバー名.err" というファイルの
内容を確認してみれば何か判るかもしれない。
139NAME IS NULL:2005/08/07(日) 13:32:48 ID:???
>>138
あーそれがエラーログファイルなのか
でサーバ名.errを見てみたら
050807 13:21:51 InnoDB: syntax error in innodb_data_file_path

って( ゚д゚)ハ

WinMySQLAdminでなくmy.iniをテキストエディタで見てみたら
autoextendの前の:が二つ・・・

スレ汚しスマソ

あとmaxでなくても無印ntでもinnodb起動できるんですね
ttp://dev.mysql.com/doc/mysql/ja/innodb-in-mysql-3-23.htmlのリファレンスって古いのかな
140NAME IS NULL:2005/08/07(日) 16:16:06 ID:???
>>139
や、

>MySQL バージョン 4.0 より、InnoDB はデフォルトで MySQL に組み込まれています。
>次の情報は、3.23 シリーズだけに該当します。

>>137
で「Winndows版の4.0.24」って書いてあるのですがー。
141NAME IS NULL:2005/08/07(日) 17:01:04 ID:???
>>140
そこ読んでませんでした
142NAME IS NULL:2005/08/09(火) 19:56:51 ID:xUOdDSYg
3.23.58ってセキュリティホール等あります?
143NAME IS NULL:2005/08/09(火) 20:17:29 ID:???
>>142
もう誰も見てないから判らない。
あれば報告すればまだ直してくれるけど>3.x系
144NAME IS NULL:2005/08/10(水) 06:04:26 ID:Yq8cRYJ+
男なら黙って ver5.0
145NAME IS NULL:2005/08/10(水) 19:08:55 ID:???
> 男なら黙って ver5.0

とする根拠きぼん。
146NAME IS NULL:2005/08/10(水) 19:28:23 ID:???
その質問に答えたら
黙って選ぶことになりません。
147NAME IS NULL:2005/08/11(木) 00:58:30 ID:???
色々考えて、自分なりにテーブルも正規化したcmsをつくりますた。
フィールド数30個くらいのテーブル1つと、フィールド数数個のテーブル3つ。
これらをjoinしたクエリを一画面表示ごとに十数回くらい実行していますが、こんなのは普通のことなんでしょうか?
思いの他、色々盛り込むことになってしまって。
ローカルの環境では快適に動いてますが、レンタル鯖にうpしたら負荷大きいぞ!って怒られたりしないでしょうか?
148NAME IS NULL:2005/08/11(木) 01:08:47 ID:???
>>147
> ローカルの環境では快適に動いてますが、レンタル鯖にうpしたら負荷大きいぞ!って怒られたりしないでしょうか?
取り敢えずベンチマークとれよ
149NAME IS NULL:2005/08/12(金) 17:36:51 ID:x+EYmiqH
mysqlはどうして、リファレンスの類が他と比べて、糞なのですか?
150NAME IS NULL:2005/08/12(金) 17:47:03 ID:???
馬鹿フィルタでは?
151NAME IS NULL:2005/08/12(金) 17:49:39 ID:O6Fx6yKR
ちゃんと作れって言いたい
152NAME IS NULL:2005/08/12(金) 17:52:39 ID:???
>>150
馬鹿では?
153NAME IS NULL:2005/08/12(金) 20:43:07 ID:???
>>149

企業が作ってるからじゃねーの
154NAME IS NULL:2005/08/12(金) 22:45:46 ID:yTy84Mt4
Javaのドキュメントは親切すぎるほど親切に思えた。
155NAME IS NULL:2005/08/13(土) 04:08:17 ID:17VFPGLo
確かに日本語マニュアルって英語マニュアルにくらべるとしょぼいよね。

まさに知りたい話に限って日本語マニュアルには書いていない(英語のほうにはある)。
156NAME IS NULL:2005/08/13(土) 04:58:19 ID:???
右上から検索すると強制で英語になるのがだるい
登録すりゃいいんだろうけど
157NAME IS NULL:2005/08/13(土) 20:15:43 ID:W8RTrnDT BE:82335528-#
売り上げの日別集計を行ってるのですが、

SELECT sum(合計金額) , count(オーダーID) , DATE_FORMAT(注文日時) as o_day FROM 注文テーブル GROUP BY o_day

として抽出を行った場合に、
今月頭から今日までの日別集計を行いたいのに、
一切売れなかった日が抜けてしまいます・・

これを防ぐ方法ってどんな方法がありますか?
158NAME IS NULL:2005/08/13(土) 23:06:05 ID:???
>>157
カレンダーテーブルを別に準備してそいつとOUTER JOIN。
または売れない日には0円のオーダーレコードを登録する運用にする。
159NAME IS NULL:2005/08/13(土) 23:46:10 ID:???
>>157
特定のフィールドの値が無いけど、それをカウントして0って結果を返したい場合は漏れもいつも回りくどいことしてる。
カレンダーテーブルに相当するものを配列に入れておいて、後で合体させる
>>158
カレンダーテーブルってのは日付で1レコードってことですよね?
新たに両方のテーブルにフィールドを作ってそれで、
OUTER JOIN カレンダーテーブル on 注文テーブル.ID = カレンダーテーブル.ID
ってことかな?
160NAME IS NULL:2005/08/13(土) 23:53:55 ID:???
>>159
OUTER JOIN カレンダーテーブル on 注文テーブル.注文日 = カレンダーテーブル.注文日
と思われ。
161160:2005/08/14(日) 00:00:32 ID:???
追加。感覚としては
LEFT OUTER JOIN 注文テーブル on カレンダーテーブル.注文日 = 注文テーブル.注文日
としてカレンダテーブルをメインテーブルとした方が意味合いとして明確。
162NAME IS NULL:2005/08/14(日) 11:52:33 ID:NmBe63OC
同じレコードに、
数値型のカラムがいくつかあるとして、
その中から最大値が入ったカラムの名前を知るには
どうすればいいでしょうか?
163NAME IS NULL:2005/08/14(日) 15:27:41 ID:ENq6njQg
GRATEST()関数が使えると思う
バージョンによっては駄目かもしれないけど
164NAME IS NULL:2005/08/14(日) 15:28:54 ID:ENq6njQg
スペルが違った、GREATEST()だ
165NAME IS NULL:2005/08/14(日) 18:16:46 ID:???
>>162
とっとと正規化する
166NAME IS NULL:2005/08/15(月) 15:11:33 ID:???
>>165
それが無理な場合
167NAME IS NULL:2005/08/15(月) 18:29:38 ID:???
>>166
あんた誰?
168NAME IS NULL:2005/08/15(月) 21:14:17 ID:???
>>167
俺、おれ、俺だよ
169NAME IS NULL:2005/08/15(月) 23:25:59 ID:???
NAME IS NULLだよ
170NAME IS NULL:2005/08/16(火) 00:11:02 ID:???
ちょっと仕事で本番環境のdatabase dropしちゃってさ、
示談金を今日中に払い込まないといけなくなっちゃったんだ。
171NAME IS NULL:2005/08/16(火) 00:27:03 ID:???
なぜレプリケーションしなかったんだ?
172NAME IS NULL:2005/08/16(火) 00:55:14 ID:kmWjz4VJ
すみません。教えてください。

WinXP上のMySQLのデータをコピーしてLinux機に移植したところ、書き込みが出来なくなっています。

phpMyAdminから直接レコードを修正しようとすると、#1036 - Table 'hoge' is read only が表示されます。
ディレクト以下全てのファイルのパーミッションを777にしても変わりません。
(読み出しは普通に可能です)
コピーの媒体はCD-RWでもFDでも同じ症状が出ます。

よろしくです。m(_ _;)m

173NAME IS NULL:2005/08/16(火) 03:13:28 ID:???
MySQLのコンソール(SSHで接続)から日本語入力できません。INSERTできないのです。
調べていたら、http://w3lab.net/mm/ts/php.html#insertを見つけました

(Q) SSHでMySQLに接続して、insert into 文でデータを入力したいのですが、日本語を入力できません。
日本語を入力するには、どうすればいいのでしょうか。
またPHP(もしくはPerl)スクリプト内からだと、日本語のデータはinsertできますでしょうか。
(A) SSHのコマンドラインからの日本語入力はできませんが、PHPなどからであれば可能です。

無理なんでしょか?
174NAME IS NULL:2005/08/16(火) 12:07:04 ID:???
>>173
どういうSSHクライアントや環境なのか知らないけど、
ちゃんとコード変換してやれば(SSHクライアントがSJISで送ってないか?)
普通にlatin同様に扱える。
175NAME IS NULL:2005/08/16(火) 17:05:25 ID:xpJN3AvF
>>172
テーブルハンドラは何よ? myisam以外は互換性ないぞ、確か。
176NAME IS NULL:2005/08/16(火) 17:06:42 ID:xpJN3AvF
>>173
INSERT INTO t1 (c1) VALUES (`日本語`);

みたいに `` でちゃんと囲んでるか?
177173:2005/08/16(火) 22:47:40 ID:???
>>174
SSHクライアントはTTSSHを使っていて、文字コードは送受信ともEUCにしています。

>>176
はい、というか、そもそも日本語が受け付けてくれないんです。
何も送られて様子です。

ローカルエコーをオンにすると送られるんですが、
それだと副作用が多すぎて常用できないんです。
178NAME IS NULL:2005/08/16(火) 23:52:33 ID:xpJN3AvF
>>177
SSH経由で手動でレコード追加したいのかな?
もしそうでなければ代替案。

代替案1

○○.sql みたいなDDL/DMLを書いたファイルを用意しておいて mysql < ○○.sql で流し込む。


代替案2

SET NAMES cp932;
INSERT INTO t1 (c1) VALUES (0xAAA);

みたいにHEXを使ってINSERTする。0xAAAは対応するHEXのことね。

(代替案2は入力文字列が固定化されている場合のみ)
179173:2005/08/17(水) 01:18:27 ID:???
>>178
ありがとうございます。
代替案1 の方でやってみます。
180NAME IS NULL:2005/08/21(日) 17:47:00 ID:OVUB9+H0
MYSQLってトランザクションとテーブルロックの両方を同時にってできないんですか?
181NAME IS NULL:2005/08/21(日) 20:33:06 ID:???
>>180
何がやりたいの?

十中八九トランザクションをちゃんと使えば解決できると思われ。
(commitするまで他コネクションからSELECTして欲しくないとか)
182NAME IS NULL:2005/08/21(日) 21:20:13 ID:2yUINDw1
MySQL4.1.13をrpmから入れたらmysqlユーザー/グループなどが自動で作成
されなくなっています。ま、単に作ればいいじゃんって話ではありますが。

4.1.11までは勝手に作るようになっていたのに、デフォルトの動きが変更になったのでしょうか?
それとも単に入れ忘れた?
183NAME IS NULL:2005/08/22(月) 12:07:33 ID:7wEVkCZ+
>180に逆質問。どのRDBMSだとできたの?
184NAME IS NULL:2005/08/22(月) 19:44:53 ID:???
SQL Server2005
185180:2005/08/22(月) 20:28:47 ID:wRMrhi6D
たとえば同様のデータが入ってるかチェックして
チェックが通ったらinsertする時。
スレッドA チェック(select) true
スレッドB チェック(select) true
スレッドA insert
スレッドB insert
ってならない?

テーブルロックかけておけば
スレッドA ロック
スレッドA チェック(select) true
スレッドB チェック(select) 待機
スレッドA insert
スレッドA ロック解除
スレッドB チェック(select) false
ってなるかなって。

186NAME IS NULL:2005/08/22(月) 21:03:56 ID:???
>>185
同様のデータを許さないカラムにユニーク属性を付けておけばOK
187NAME IS NULL:2005/08/22(月) 23:55:34 ID:???
>>185
なんだ。
これ
ttp://dev.mysql.com/doc/mysql/ja/innodb-locking-reads.html
がやりたいのね。
188NAME IS NULL:2005/08/23(火) 02:35:02 ID:rOUyeMo+
187が言っているとおり、条件に該当するINSERTをブロックするだけなら
わざわざテーブル全体にロックをかける必要は無い。

無論、lock tablesというテーブルハンドラ非依存の構文も使えるわけだが、
SELECT ... FOR UPDATE で十分だろう。

SQL Server2005の"SELECT ... FOR UPDATE"はINSERTをブロックできないのかな?もしかして。
189NAME IS NULL:2005/08/23(火) 04:09:23 ID:???
>>188
SELECTしたレコードが削除変更されるのを防止するためにSELECT ... FOR UPDATEを使うのはわかるが、
ここではSELECTで選択されなかったことを保障したいわけだから使えないと思うぞ。
レコードが選択されなかったという状態を保障するためにはシリアライズトランザクションを使う必要がある。
MSSQLではシリアライズトランザクションによってSELECTした条件の範囲でキー範囲ロックが発生する。
もっともシリアライズトランザクションは結構負荷がでかいので >>186 のいうとおり、
INSERT時の重複エラーを捉えてトランザクションを失敗か別の処理に分岐させるのが妥当だろう。
...ふと思ったんだが、レコードが無ければUDPATEあればINSERTといった処理ならMERGE命令が
うまく処理してくれるように思えるがこれじゃダメなのか?
190NAME IS NULL:2005/08/23(火) 04:22:21 ID:???
>>189
補足、マニュアルをざっと見たんだがMSSQLでもMySQLでもまだMERGE命令はサポートされてないもよう。
191NAME IS NULL:2005/08/23(火) 05:03:43 ID:rOUyeMo+
>>188
InnoDBでは"SELECT ... FOR UPDATE"あるいは"SELECT ... LOCK IN SHARE MODE"で
条件の範囲での範囲ロックが発生するよ。

確かネクストキーロックという名前が付けられている仕組みで、InnoDBがClustered Indexを使っていることと関係があったはず。
192NAME IS NULL:2005/08/23(火) 05:04:32 ID:rOUyeMo+
>>192はアンカーミス ...orz

>>189が正解
193NAME IS NULL:2005/08/23(火) 05:05:13 ID:rOUyeMo+
うわ、泥沼に嵌ってる・・・・

出直してきます orz
194NAME IS NULL:2005/08/23(火) 05:34:47 ID:???
>>191
サンクス、ネクストキーロック了解。マニュアル読んできた。
FOR UPDATEでこの種のロックがかかるのはなるほど便利そうだ。
195NAME IS NULL:2005/08/24(水) 12:43:47 ID:???
既存のテーブルから、そのテーブルのcreate table文を
生成する事って可能でしょうか?

何かのツールを使ってでもOKなので、ご存知でしたら教えてください。
196NAME IS NULL:2005/08/24(水) 15:38:18 ID:laqaNRiE
>>195

SHOW CREATE TABLE <tableName>;

じゃあ駄目なんですか?
197NAME IS NULL:2005/08/25(木) 00:06:37 ID:7Pso8byV
すいません。質問させて下さい。

あるテーブル(old_table)からデータを引いて新しいテーブル(new_table)へ
入れるんですが詰まってます・・・

通常ですと、
insert into new_table(col1) select col1 from old_table;

でよいんですが、実はそのままcol1の値を入れるのではなく、値の前に
0をつけてnew_tableのcol1に入れたいんです。どすればいいんでしょうか?
SQLじゃ無理なんでしょうか。

198NAME IS NULL:2005/08/25(木) 00:15:10 ID:???
>>197
insert into new_table(col1) select concat('0', col1) from old_table;
199197:2005/08/25(木) 00:19:26 ID:???
>>198
ありがとうございます!!!
concat()って知りませんでした。勉強不足でした。
質問からこんなに早く答えて頂き本当に助かりました(T.T)
お陰様で、2時前には寝ることが出来ます。本当にありがとうございました。
200K:2005/08/29(月) 05:44:24 ID:QGAqQEOQ
すみません、MySQL初心者です。
MySQLで今までNOT NULLと指定していなかったフィールドがあり、
このため、データが入っていないrowとちゃんとデータが入ってるrowが
あるのですが、この状態でこのフィールドの属性をNOT NULLに変更しても
大丈夫でしょうか?
NOT NULLにしたのに現実にはデータがカラのRowも存在しているわけで、
何かエラーになるのではないかと。。。それともカラのrowをなくしてから
でないとNOT NULLに変更はできないのでしょうか?
201NAME IS NULL:2005/08/29(月) 11:59:56 ID:???
それが文字列フィールドのことなら、空文字列とNULLは違うものだよ。
心配ならテーブルの複製にALTER TABLEしてイロイロ実験すれば?
202U ◆CZtFsGiu0c :2005/08/29(月) 12:15:56 ID:???
>>200
MySQLには詳しくないけど、通常はデフォルト値を設定することになると
思う。
203NAME IS NULL:2005/08/29(月) 14:10:56 ID:hgedEuqh
1つのフィールドの構造とデータを
フィールド名だけ変えてコピーしたいのですが、
そういうコマンドってあるのでしょうか?
プログラム組んでやるしかなかとですか?
204NAME IS NULL:2005/08/29(月) 15:25:14 ID:???
>>200
alter tableでnot null指定してなかったカラムをnot nullにすると、nullが入ってた部分はデフォルト値になる。
mysqlではnullはuniqueカラムでも特別扱いなんで、元がuniqueなカラムだとはまるかも。

>>203
lock table [table];
alter table [table] add newcol [create_definition];
update [table] set newcol=oldcol;
unlock table;
こんな感じ?
timestamp型がある時はその辺も気を付けないと、書き換わってしまうが。
205NAME IS NULL:2005/08/30(火) 03:13:50 ID:9rw4gV5x
Navicatのスケジュールって
ちゃんと動きます?
セットした時間になってもピクリともしません
OSXとWinで試してみたけど…
206205:2005/08/30(火) 03:56:31 ID:???
出来ました
パスワードなしユーザだからと思ってパスワードを空白にしていたのが
問題だったようで。
スケジュールって単にWin標準のタスクを実行してるだけだったんですね
207:2005/08/30(火) 09:59:47 ID:U53E/WPM
レス200です。
レス下さった方、ありがとうございました!
なるほどです。
208NAME IS NULL:2005/08/30(火) 19:46:56 ID:???
直視に耐えない…。
聞くに耐えない…。
209NAME IS NULL:2005/08/30(火) 20:38:12 ID:???
それでもカキコは出来ます...。
210NAME IS NULL:2005/09/02(金) 12:18:45 ID:7CZENzNz
MySQLの数値の比較の動作について質問です。
tbl_listというテーブルにidという主キーでデータ型はINTでauto_incrementを設定してあります。
今のところidは1から20まで登録してあります。
ここで以下のようなクエリーを発行すると
select id from tbl_list where id in ('1','3','2.5','5','4')
idが1,2,3,4,5の5通り帰ってきます。
select id from tbl_list where id in ('2.5')
とすると2が帰ってくるのですが、2と2.5は同値とみなされてしまうのでしょうか?

MySQL4.0.25 Windows版を使用しています。
よろしくお願いします。
211NAME IS NULL:2005/09/02(金) 13:30:06 ID:???
データ型がINTだからでは?


とSQLを全く知らない私が答えてみました。
212NAME IS NULL:2005/09/02(金) 15:46:39 ID:???
select 2="2.5";
だと0が返ってきて
select 2 in("2.5");
だと1が返ってくるね
inを使うと勝手に整数比較されるってことかな?
213NAME IS NULL:2005/09/02(金) 17:24:20 ID:Zzr1P2Lt
AUTO_INCREMENTによる割り当ては1から始まりますが、
これを特定の値から始まるように設定する方法はありますか?
214213:2005/09/02(金) 18:00:55 ID:Zzr1P2Lt
解決しました
215NAME IS NULL:2005/09/02(金) 20:18:54 ID:???
>>212
面白そうな現象ですね。手元に環境が無いから試せないのだけど、文字列じゃなく数字の2.5の場合どうなりますか?
select 2 in("2.5");
select 2 in(2.5);
216212:2005/09/02(金) 22:08:34 ID:???
試してみた。
select 2 in(2.5);
だと、0が返ってくる。

環境書き忘れたけど、4.0.22@FreeBSD
217212:2005/09/02(金) 22:11:21 ID:???
4.1環境も手元にあるので試してみたら
select 2 in(2.5);
でも
select 2 in("2.5");
でも0が返ってくる。
バージョンは4.1.10
218NAME IS NULL:2005/09/02(金) 22:42:38 ID:KDwNgj7Y
select '2' in ('2.5');
だと0が返ってきた.
select 2 in ('2.5');
だと1が返ってきた.
バージョンは4.0.25(Win)
219NAME IS NULL:2005/09/02(金) 23:25:01 ID:KG6yoOrb
mysql4とmysql5ってどう違うですか〜?
今まで4でxoops動かしてたんですが、5の方がいいんでしょうか?
220NAME IS NULL:2005/09/02(金) 23:36:30 ID:???
>>219
MySQLを使用して何か開発をしていないのなら無関係。
xoops側がMySQL5系に変更すべし、というまでは現状のままでいきなはれ。
221NAME IS NULL:2005/09/02(金) 23:40:23 ID:???
>>220
なるる 理解した
ありがとぅ〜〜(iДi)ノ
222NAME IS NULL:2005/09/02(金) 23:44:08 ID:???
>>219
>mysql4とmysql5ってどう違うですか〜?
と人に訊く人は、今まで通りMySQL4.0を使ってください。XOOPSには。
MySQL4.1にも手を出さない方が良いでしょう
223NAME IS NULL:2005/09/03(土) 13:01:45 ID:noKceUQY
夜中にランキングページをcronで生成しているのですが
アカウントが多くなったため処理時間が増加し
他のクエリを受け付けない時間が長くなって
困っています。
スレッドキャッシュやテーブルキャッシュを増やす等の
チューンをし
通常処理のパフォーマンスは上がったのですが
この問題は相変わらずでした。
どのように解決するのが定石なのでしょうか?
224NAME IS NULL:2005/09/03(土) 14:43:57 ID:???
ランキング専用のサーバを作る
225NAME IS NULL:2005/09/03(土) 15:12:36 ID:???
>>223
cronで動かしてるアプリをいじれるならアルゴリズムの改善でまったく変わる。
チューニングで何とかしたいならまずはボトルネックを探さないとむやみにつまみを
いじってもなかなかヒットしない。どれも手に余るならマシンの増強。
226NAME IS NULL:2005/09/03(土) 16:04:50 ID:???
>>223
レプリケーションして更新マスターとクエリ受付スレーブとに分ければ?
ボトルネックはプロセスレベルでしょ?
227NAME IS NULL:2005/09/05(月) 17:42:30 ID:???
「AB■XY」のデータを「AB□XY」に変更したいのですが
その様なsqlを書けば良いのかご教授下さいませ。
228NAME IS NULL:2005/09/05(月) 21:27:57 ID:???
>>223
ランキング作成の仕組みにもよるが、一つのテーブルにINSERTを
多発するようなら、複数行INSERTの導入をお勧めする。
量が多ければ、劇的に早くなります。
229NAME IS NULL:2005/09/06(火) 01:37:55 ID:aMoVKkEL
MySQLはpostgresのような
modify_dt timestamp default now(),
このようなtimestampへのデフォルト指定ができず、timestampのカラムを
2つ以上作ってしまうと下記のようになってしまいますが、2つとも
CURRENT_TIMESTAMPにする方法はございませんでしょうか。

| regist_dt | timestamp | YES | | CURRENT_TIMESTAMP | |
| modify_dt | timestamp | YES | | 0000-00-00 00:00:00 | |

ご教示いただけますと幸いです。
230NAME IS NULL:2005/09/06(火) 01:46:05 ID:???
>>229
MySQLのtimestampはrowversionのことで、日付時間型はdatetimeを使うべし。
日付時間関係の型は処理系で大きく異なるから注意が必要。
231NAME IS NULL:2005/09/06(火) 01:56:04 ID:???
>>230
ご教示有難うございます。
datetimeでやってみましたが、こちらもdefault指定で
エラーになってしまいました
232NAME IS NULL:2005/09/06(火) 02:29:50 ID:???
>>230
大きく訂正。
MySQLのtimestamp型はrowversonとは関係なく日付時刻型で正解、datetimeとは格納形式が違うらしい。
timestampは名前どおりデフォルトでそのときの日付時刻がセットされる。defaultの指定は不要。
タイムスタンプの精度が秒単位までなのでrowversionとしては機能しないもよう。
2つ以上定義した場合は2つめからは現在の日付時刻はセットされず。ゼロ値がセットされる。
さらにMaxDBモードでは現在の日付時刻セットはまったく行わないらしい。

マニュアルの記述によるとcreate tableのdefaultでは定数のみで関数は使用できないらしい。
insert文やUpdate文ににNow()関数を指定してやるのが一番無難そうだ。
233NAME IS NULL:2005/09/06(火) 03:17:55 ID:???
>>232
やはりそれが一番無難ですかね。
有難うございます。


話変わりますが、今度はcreate indexができません。

create index idx1 on 〜(aaaaa);
create index idx2 on 〜(bbbbb);

とやると、

BLOB/TEXT column 〜 used in key specification without a key length

と出て、なぜか2つ目のindexのみ作られています。
ぐぐってもなかなか正解が出てこないので困ってます。。
234NAME IS NULL:2005/09/06(火) 03:31:58 ID:???
>>233
>MySQL バージョン 3.23.2 以降では、BLOB 型と TEXT 型のカラムには、インデックスを付けることができる。
>それより前の MySQL バージョンでは、インデックスはサポートしていない。
とマニュアルのあるけどVersionいくつ?
aaaaaとbbbbbのデータ型は?
235NAME IS NULL:2005/09/06(火) 04:20:41 ID:???
>>234
4.1.7です。
aaaaaはtext、bbbbbはsmallint(6)でございます。
236235:2005/09/06(火) 04:23:02 ID:???
なんでsmallintのbbbbbのみ作れるんでしょうかね。。
237NAME IS NULL:2005/09/06(火) 04:38:10 ID:???
>>236
ttp://dev.mysql.com/doc/mysql/ja/create-index.html
>BLOB 型や TEXT 型カラムのインデックスでは、プリフィックスの長さを必ず指定する必要があります。
TEXTには実際に索引に使う長さを指定しろってことのようだ。
RDBMSは処理系でずいぶん違うからマニュアルを端から読めってことだな。
ttp://www.mysql.gr.jp/
238235:2005/09/06(火) 04:52:19 ID:???
>>237
有難うございます。いきました。
長さを指定する必要があったんですね。

マニュアルのとおり、入力されると思われる文字数より少ない数を
指定しましたが、Postgresではこのようなことはしたことがないため
少し心配になりました。。

遅くまで有難うございました。
239NAME IS NULL:2005/09/06(火) 11:23:59 ID:6CcOt5nH
会社で動いているMySQLの innodb_log_file_size が 100M に設定されて
いるのですが、こんなに必要なんでしょうか?

もし自分がやる場合、いつも5Mとか10Mなんですけど間違ってますか?
240NAME IS NULL:2005/09/06(火) 15:02:15 ID:vXeEnsfW
ms-dosで
mysql> source C:/root/hoge;
とやると/rが改行\rに認識されるみたいだんですが
これをエスケープするにはどうすればいいんでしょうか?
\/rootでもダメみたいです
241NAME IS NULL:2005/09/06(火) 17:33:05 ID:???
くだらねぇ質問スレから誘導されて来ました。
PHP+MySQLで顧客管理のサイトを作っています。

名前:年収:勤務地
aaaa:600:埼玉
bbbb:700:東京
cccc:550:千葉
dddd:500:神奈川
eeee:800:北海道

というデータを、年収を「600万以上」で検索しても
550万のデータも「条件90%合致」ということで表示したいのです。
年収だけじゃなくて、勤務地もたとえば東京を指定しても
埼玉、神奈川といった近辺も合致させたいと思っています。
基準としては、年収-50万で合致率からマイナス10%、
近県ならマイナス10%といった減算方式で、80%までなら
抽出したい、といった具合です。
勤務地に関しては、名称ではなく数値で格納してあるので

埼玉:10
東京:11
神奈川:12
千葉:13
北海道:50

検索値の前後±1の地域をマイナス10%で抽出する、といった感じです。
くだらねぇ質問スレで一部ヒントをもらいましたが、
ひき続き良いアイデアがありましたらよろしくお願いします。
242NAME IS NULL:2005/09/06(火) 17:58:40 ID:???
元のスレのurl貼ろうや
くだ質の方から来たけど、あっちで半分以上解決してるじゃねぇか
243NAME IS NULL:2005/09/06(火) 18:41:49 ID:???
>>241
 210 名前:nobodyさん 本日のレス 投稿日:2005/09/06(火) 17:18:15 ???
 >>207-208
 なるほど、合致率もSQLで取得するんですね。
 年収オンリーでの考え方は把握しました。どうもです。

 条件が複合したときがさらに厄介です。
 ヒント(っつか答え)はいただいたので、自分でも考えてみます。
                    ~~~~~~~~~~~~~~~~~~~~~

17:18:15 に「自分でも考えてみます」と言って、考えた方法が
17:33:05 にこのスレで教えてもらうことなの?
バカですか。。。
244243:2005/09/06(火) 18:59:52 ID:???
関係ないけど、>>241の件をちょっとやってみた時に発見。

mysql> SELECT 10 - ABS(1 - 12);
+----------------------+
| 10 - ABS(1 - 12) |
+----------------------+
| 18446744073709551615 |
+----------------------+

mysql> SELECT -ABS(1 - 12) + 10;
+-------------------+
| -ABS(1 - 12) + 10 |
+-------------------+
| -1 |
+-------------------+

ABS(x - y) > 10 の時におかしくなるみたい。
MySQLのバージョンは4.1.13。
245NAME IS NULL:2005/09/06(火) 19:10:02 ID:???
timestampを使用するとdefault now()になりますが、
updateの際にもこれが適用されてしまいます。

これを回避する方法はございませんでしょうか。
246NAME IS NULL:2005/09/06(火) 19:21:04 ID:???
>>245
timestampをやめてdateにして、insert時にnow()を書き込む。
timestampは
 ×default値としてnow()が書かれる 
 ○レコードが更新された日時が自動的に書き込まれる
そもそもtimestampの認識が間違っていると思われ。
247NAME IS NULL:2005/09/06(火) 19:21:50 ID:???
>>244
SELECT 10 - ABS(1 - 12.0);
としたらちゃんとした結果が出た
248NAME IS NULL:2005/09/06(火) 19:27:30 ID:???
>>246
有難うございます。
postgresの感覚は消し去った方がいいですね、、
249247:2005/09/06(火) 19:50:31 ID:???
ちなみに、MySQLは4.1.13

SELECT 0 - ABS(1);
でもおかしくなるね。

SELECT FLOOR(0 - ABS(1));
SELECT (0 - ABS(1))*1.0;
SELECT 0 + -ABS(1);
ではおかしくならないけど
SELECT (0 - ABS(1))*1;
ではおかしくなる。

整数からABSの戻り値をそのまま引くとおかしくなるのかな。
*1でおかしいのは、計算する時に最適化されて*1は実行されないとか?
んで、結果の数値見るとUNSIGNED BIGINTの最大値っぽいけど
ABSの返り値がSIGNEDなのに、間違えてUNSIGNEDとして扱っちゃうのが原因だろうか。
250NAME IS NULL:2005/09/06(火) 20:43:01 ID:???
4.1.14だけど、何も変なことおきないよ。>>249

$ mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 569 to server version: 4.1.14-standard-log

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> select 0-abs(1);
+----------+
| 0-abs(1) |
+----------+
| -1 |
+----------+
1 row in set (0.00 sec)

mysql> select (0-abs(1))*1;
+--------------+
| (0-abs(1))*1 |
+--------------+
| -1 |
+--------------+
1 row in set (0.00 sec)

251243:2005/09/06(火) 21:18:01 ID:???
>>250
あらら、いつのまにか4.1.14なんかが出てたのね。
といっても一週間前か。しばし様子見。。。
4.1.14のリリースノートにこの件、書いてあるね。
バグ登録もされていたみたい(http://bugs.mysql.com/bug.php?id=11402)。
5系は5.0.11で修正済みとのことでし。
252NAME IS NULL:2005/09/07(水) 00:59:46 ID:ajFyFx/u
>>240

innodb_log_file_size を大きくするほど一般的には性能がアップする。

大きくすることの弊害は、障害発生後のリカバリー時にその分、時間がかかるということ。

で、トータルで考えるとこの値は、思いっきり大きくした方が良いというのが良く言われているチューニングTIPSですよ。
253252:2005/09/07(水) 01:01:03 ID:ajFyFx/u
アンカーミスりました。。。

>>239 宛が正解。
254NAME IS NULL:2005/09/07(水) 01:29:13 ID:A0qPp313
XOOPSの負荷を軽くしたいのですが、究極なMYSQLのチューニングをおしえてください。
おしえてくんですんまそん
255NAME IS NULL:2005/09/07(水) 02:00:50 ID:???
>>254
CPUの速いのいっぱい積む。メモリーもいっぱい積む。
ディスクI/Oが結構足引っ張るのでI/FもHDDも速いのにする。RAID組む。
256NAME IS NULL:2005/09/07(水) 02:49:37 ID:A0qPp313
>>255
ありがとん。
CPUは、AMD64FX メモリ4G
ディスクI/Oがやばそうなので、WD raptorと考えています。
XOOPSを一台のサーバーにどれぐらい設置できそうですか?
アクセス数とかでもおしえていただければ幸いっす。
まじ、おしえてくんですんまそん。
257NAME IS NULL:2005/09/07(水) 08:18:22 ID:???
その用途なら、FXやめて安いX2の方がよさげ。
258NAME IS NULL:2005/09/07(水) 13:44:11 ID:Apjg8CxA
>>252
そうなんだ。ありがとうございます。
実際に障害を起こしてどうなるか、までのテストをしたことがないので
よく理解していませんでした。
そうか。大きいほうがいいんだ...。

ちなみに、意図的に障害を起こす良い方法があれば教えてください(>_<)
259NAME IS NULL :2005/09/08(木) 00:50:44 ID:r5tObJDy
>>252
REDOログのサイズのことだよ?
260NAME IS NULL:2005/09/08(木) 01:14:40 ID:+k04DASg
>>257
X2に変えて、一日10万アクセスぐらい耐えられるかな?
自分ひとりだともったいないので、同じサーバーに
無料で何人かに貸し出そうとおもっています。

261252:2005/09/08(木) 03:58:29 ID:eEn19qg5
>>258>>259

だからそのREDOログのサイズはでかいほど良いってことだよ。
MySQL ABのパフォーマンスチームリーダー、Peter Zaitsev本人が言ってたことなの。

なんで良いのか、詳しいメカニズムは漏れは知らない。ごめんね。
262NAME IS NULL:2005/09/09(金) 20:14:20 ID:PPaiODgg
さくらインターネット 共有サーバスレ Part23
さくらインターネット 質問にマジレスするスレでも質問したのですが、誘導させていただいたので書き込みます。

外部キーを利用したいからタイプをInnoDBにしていたのですが、サーバ1でなぜかInnoDBのテーブルを作れなくなってしまったのですが、なにか情報持っている方いませんか?
しかも悪いことに削除のできない未完成のテーブルができてしまった・・・。どうしよう・・・(´・ω・`)

ちなみに、諸事情でアカウントを二つもっているのですが、もう一つはサバ5をつかっています。
こちらだと同じInnoDBを作成するSQL文を通してもうまくテーブルをつくってくれるんです。。。
create table group(
id_group int not null primary key auto_increment,
name_group tinytext
)type=InnoDB;
たとえば、こういったかんじのSQL文です。

1サバ自体がおかしいのか、自分のデータベースになんらかの設定を誤ってしてみまったのか全く見当がつきません。
実際、リレーションを組んだり、データベースにはテーブル作成・更新・削除、レコードの追加などしかしてません。
どうやら、壊れたテーブルは使用中という扱いのよう。。。
263262:2005/09/09(金) 22:51:39 ID:PPaiODgg
なんだか、レコードの追加はできるけど削除できないテーブルがでてきた。
あと、テーブルの構造を表示させようとしても違うテーブルが開けないってエラーが起きるし。

あと、テーブル作るときには下のようなエラーが起きます・・・。
#2013 - Lost connection to MySQL server during query

データベースを削除して一から構築しようと思ったんだけど、Sakura Internetってデータベース削除コマンドがロックされてる・・・。

どなたか、詳しい方がいましたら御教授ねがいます(´・ωと)
264262:2005/09/09(金) 23:49:19 ID:???
連続書き込み申し訳ありません。

さくらインターネットのMySQLのバージョンが4.0.20です。
Googleで調べた結果InnoDBの処理でバグがあるようです。
ただ、書いてある内容が高度で今回の件とどれだけ関係があるのかよくわかりません。。。

さくらインターネットにバージョンアップの要請をだしたほうがいいのでしょうか・・・。
265NAME IS NULL:2005/09/10(土) 07:26:19 ID:???
半角スペースと全角スペースを間違えて入れてしまったorz
しかも50万レコード。
簡単にsqlたたいて直せないですか?

エロい人教えて。
266NAME IS NULL:2005/09/10(土) 07:48:20 ID:???
>>265
俺なら該当データをdumpして、半全の変換して(テキスト変換系ツール)
それをimportし直す。INSERT→UPDATEぐらいは必要かな。
267NAME IS NULL:2005/09/10(土) 07:49:45 ID:???
と思ったけど50万ね...
268名無しさん@そうだ選挙に行こう:2005/09/10(土) 22:03:55 ID:???
1円/件、出してくれたら変換してあげる。
269名無しさん@そうだ選挙に行こう:2005/09/10(土) 22:08:53 ID:???
じゃあ漏れは0.5円/件
270名無しさん@そうだ選挙に行こう:2005/09/11(日) 00:22:05 ID:???
>>265
普通にupdateで出来そうだけど。
ただ、その件数一気にやるのは怖いから漏れだったら何度かに分ける。
271名無しさん@そうだ選挙に行こう:2005/09/11(日) 16:31:10 ID:bTMS1VeQ
マックに舞sqlを入れました。

アンインストールして舞をマッサラな状態に(ユーザーの設定とか)したいんですが、どうすればいいでしょう。
フォルダごと無理矢理削除して再度インストールしたら、/tmp/舞sql。ソケット が何のといって使えなくなってしまいます他。

マック板かリナックスいけと貝割れ草だけど。。。
お願いします。

因に、osx tiger 舞sqlはosx要の最新版。
272名無しさん@そうだ選挙に行こう:2005/09/11(日) 17:27:11 ID:???
舞sqlとか書けば2chぽいみたいなこと思ってるのかね?
273無しさん@もう選挙に逝ったぜ:2005/09/11(日) 18:51:13 ID:???
>>271
# /tmp/舞sql。ソケット が何の...
つってるファイル消せばよい。
274NAME IS NULL:2005/09/13(火) 03:00:48 ID:???
>>266
ダンプっすか・・・どうしよう。
275NAME IS NULL:2005/09/13(火) 11:09:39 ID:???
松本
276NAME IS NULL:2005/09/13(火) 21:39:43 ID:???
>>275
最近どうしるんだ?
結婚してるのか?
277NAME IS NULL:2005/09/13(火) 21:55:54 ID:K7YLJro0
4.1.14でvarcharのコラムに改行(¥r)だけいれて
MySQL Administratorでバックアップしたファイル見てみると
本来、'aaa','¥r','bbb'となるべきところが
'aaa',','bbb'となってしまっていて、リストアできないんですが
これって既出ですか?
278NAME IS NULL:2005/09/15(木) 01:03:05 ID:???
>>262-264
MySQLの勉強をしようと思って、たまたま以前から使っていた
さくらインターネットのサービスの中にMySQLのサーバーがあったんで、
最近試しにさわってみたばかり・・・ という程度の私なので、お役に
立てるほどの知識も情報もないんですが、私が割り当ててもらった
mysql7では、select version(); を実行してみたら、4.0.25でした。

もしかして、サーバーによってバージョンが微妙に違っていて、
262さんが困っているほうのサーバーはバグありバージョン?

どちらにせよ、テーブルが削除できないというのは、さくらに頼む
しかないんじゃないでしょうか。

あと、「バグがあるらしいから、他のサーバーと同じバージョンに
上げてくれ」と、頼んでみるのもアリではないかと。言うだけなら
タダですし。それで問題が解決するかどうかは、分かりませんが。
279NAME IS NULL:2005/09/15(木) 01:10:40 ID:???
君は何をしたいのかね?
280NAME IS NULL:2005/09/15(木) 01:13:00 ID:???
>>278
なにっ さくらMysql4.0来てたのかー!
281NAME IS NULL:2005/09/15(木) 10:21:47 ID:/+b7q0U4
postgresqlからの移行をおこなっていますがexceptで難航しています。
同じテーブルに1時間おきにデータを入力していますが、入力がない場合を検索してるsqlが以下にあります。
これをmysqlに移行したいのですが、難航しています。以下をmysqlで実現する方法はありますか。
sql = "select name from w where date > '#{late_hour}' and date < '#{hour}' group by name
except select name from w where date > '#{hour}' and date < '#{for_hour}' group by name"
282NAME IS NULL:2005/09/15(木) 10:39:41 ID:???
>>281
MySQLのバージョンによっては使えないかもしれないが。。。
select name from w where
 name not in (select name from w where date > '#{hour}' and date < '#{for_hour}' group by name)
 and date > '#{late_hour}' and date < '#{hour}' group by name

ユニークカラムが存在して、かつそのカラムとは別にNOT NULLなカラムが存在するのであれば
キーの結合とNOT NULL判定でもできるけど。
できれば、テーブルの定義とMySQLのバージョンは明記して欲しいな。
283NAME IS NULL:2005/09/15(木) 11:28:28 ID:???
WindowsXPでmysqlを運用しています
284NAME IS NULL:2005/09/15(木) 11:31:38 ID:???
WindowsXP Proでmysqlを運用しています
mysqldump -u root -p dbname > "directory/filename"
が動きません。
吐き出されたテキストファイルには「EnetrPassword: 」
のみ記述されています。
本来このコマンドプロンプトでパスワード入力ができるはずなのですが・・・

ReloadやCreateTableには何の支障もないです、どなかた教えてください
285NAME IS NULL:2005/09/15(木) 18:17:55 ID:???
>>284
mysqldump -u root -pxxx dbname > "directory/filename"
-p だけならプロンプトが出るのは当たり前のような。xxxにパスワード。
286NAME IS NULL:2005/09/15(木) 18:49:57 ID:???
>>285
解決しました。ありがとうございます。
287NAME IS NULL:2005/09/16(金) 00:11:24 ID:6D+lJfyJ
PHPでSQLを実行したくて以下の文を記述したのですが
SQLエラーになってしまいます。
ただのselect文なのですがなぜでしょうか・・・。
ちなみにDBには接続できています・・・orz

$con = mysql_connect("DBSERVER","ID,"PASSWORD")
or die("データベース接続に失敗しました。処理を終了します。\n");

$sql = "select * from TABLE";

$db = mysql_query($sql, $con)
or die("SQLエラー"); // クエリを発行
288NAME IS NULL:2005/09/16(金) 00:21:23 ID:???
>>287
$sql = "select * from TABLE";
の前に
mysql_select_db('データベース名', $con);
がいると思われ。
289NAME IS NULL:2005/09/16(金) 00:21:58 ID:???
" -> \"
290287:2005/09/16(金) 00:25:37 ID:6D+lJfyJ
288>
実行できました、確かに使用するDB名の記述がありませんでした(^^;
ご親切にありがとうございます、助かりましたm(_ _)m
291288:2005/09/16(金) 00:36:50 ID:???
>>290
オメ。
PHPの話でなんだが、以下のようにしておけば多少はエラー追跡は楽になるかと。
$db = mysql_query($sql, $con)
or die("SQLエラー " . mysql_error($con)); // クエリを発行
292NAME IS NULL:2005/09/16(金) 18:39:37 ID:???
教えてください。
カラム構成が1つだけ違う(コピー先のほうが1つカラムが多い)テーブル間で
レコードのコピーってどのように行うのが一番スマートでしょうか?
1つだけ多いカラムには現在の時刻(current_timestamp)を入れたいです。
SQL一発で可能でしょうか?
293NAME IS NULL:2005/09/16(金) 18:47:53 ID:???
>>292
insert into コピー先テーブル(カラム1, カラム2, 現在時刻カラム)
 select カラム1, カラム2, now() from コピー元テーブル;

カラムの並びが同じで、最後のカラムに現在時刻カラムがあるのなら、これでもいいけれど。
insert into コピー先テーブル
 select *, now() from コピー元テーブル;
294NAME IS NULL:2005/09/16(金) 19:10:21 ID:???
>>293
サンクスです!出来ました。
295mysql-shared:2005/09/17(土) 08:31:14 ID:E8vGU8Af
apt-getのパッケージにmysql-sharedってあるけど
どういう機能があるパッケージなんですか?
296NAME IS NULL:2005/09/17(土) 10:26:46 ID:???
接続ライブラリとかかな。
新版、旧版
297NAME IS NULL:2005/09/17(土) 19:46:09 ID:???
ひらがなやカタカナのフィールドをorder byで50音順に並び替えたいんですが
うまく並びません。

調べてみるとMySQLのcharsetが関係あるっぽいんですが
レンタルサーバのmysqlなので、変えられないのかなと...

こんな状況ですが、上手く50音で並び替える方法あるでしょうか?
298NAME IS NULL:2005/09/18(日) 13:22:55 ID:LhxuH936
質問なのです。
 id INT(8) default 1 NOT NULL PRIMARY KEY AUTO_INCREMENT
テーブルを作るときに、上の一行を追加するとエラーが出るのですが、どうしてでしょうか
ver4.1にしたとたん、エラーが出ました orz
ちなみに、これがなければ問題なくテーブルを作れるのです。

>>297
SELECT * FROM テーブル WHERE カラム LIKE 'あ%' ORDER BY カラム ASC
SELECT * FROM テーブル WHERE カラム LIKE 'い%' ORDER BY カラム ASC  とか。
頭の一文字だけ検索して、並べてみるなんて方法は?
でも面倒だと思う

Mysqlの設定を変更できないなら、
スクリプト側の文字コードをMysql側に合わせてみると解消するかもです。
299NAME IS NULL:2005/09/18(日) 13:30:15 ID:???
>>298
AUTO INCREMENTカラムにdefault指定をしているからでは?
id INT(8) NOT NULL PRIMARY KEY AUTO_INCREMENT
でよいと思う。
300298:2005/09/18(日) 13:46:19 ID:???
>>299
ありがとうございます。
無事に通りました
301NAME IS NULL:2005/09/19(月) 05:13:18 ID:2nukKBtQ
少し前のWeb+DB PRESSに
MySQLビジネスフォーラムの記事が載っていたのですが
検索してもサイト自体が消滅しています。
このフォーラムはどうなったのですか?
302NAME IS NULL:2005/09/19(月) 05:24:45 ID:???
wayback machineで見たら
2004年10月が最後のアーカイブでした
空中分解…?
303NAME IS NULL:2005/09/19(月) 19:27:24 ID:32fTLI5P
何卒初心者に救いの手を!

日付でソートをしたいのですが
yyyyを無視してmm-ddのみでソートするためには
どうすればよいのでしょうか

何卒よろしくお願いします
304NAME IS NULL:2005/09/19(月) 19:49:23 ID:???
303です
自己解決しました
305NAME IS NULL:2005/09/20(火) 02:20:46 ID:???
>>304
そう、そうする他ないんだよね。
そうすればインデックスも効くしね。
306NAME IS NULL:2005/09/20(火) 19:30:00 ID:cMA2AiKL
mysqlに格納した画像は
<img src="photo.php?name=aaa.jpg">
のように読み出してやれば表示できると思いますが
1ページ内に複数枚表示させたい場合も上の方法でやらないとだめですか?
表示枚数ごとにselectすることにりますよね??
307NAME IS NULL:2005/09/21(水) 04:47:45 ID:???
>>303-305
どうやるのですか?
ちょうど同じ問題に当たっています
308307:2005/09/21(水) 04:54:16 ID:???
いやちょっと違うかも?
DateTimeにインデックスを張り、
「年」「年月日」「月日」のそれぞれで検索した時、
インデックスがちゃんと効くのかが心配です。
効かないとしたら…年と月日を分解してintに入れるのでしょうか?
309308:2005/09/21(水) 04:59:11 ID:???
失礼しました
× 月日
○ 年月
ですね
310NAME IS NULL:2005/09/21(水) 08:16:23 ID:???
>>306
>表示枚数ごとにselectすることにります
これが気になるような場合は、photo.phpの処理の中でキャッシュしてやればよい。
といっても同じhtml内の記述でも
<img src="photo.php?name=aaa.jpg">
<img src="photo.php?name=bbb.jpg">
はプロセスとしては別のphoto.phpなので、メモリ上の共有は(通常は)出来ないので
ファイルを使ってキャッシュするのが一般的。
311NAME IS NULL:2005/09/21(水) 15:16:47 ID:???
>>308
EXPLAIN すればすぐ分かる
312NAME IS NULL:2005/09/21(水) 16:47:25 ID:S9IkY3bj
緊急です。誰か助けて下さい。
MySQLのrootのパスワードがわからなくなりました。
なんとかして調べる方法はないでしょうか?
Navicatというソフトを利用してアクセスすることはできます。
接続設定でrootのパスワードを保存するにしていたからです。
接続してuserテーブルを見てもパスワードの部分は暗号化?されているので何を書いているかわかりません。
何とかならないでしょうか?
313NAME IS NULL:2005/09/21(水) 16:54:11 ID:???
>>312
悪いことしようとしてる悪寒
314312:2005/09/21(水) 17:01:55 ID:S9IkY3bj
違いますよ。社内で使っているMySQLが急に動かなくなったんです。
でこのシステムを作った人が蒸発してしまったからにっちもさっちもいかないんです。
信用して下さい。
315NAME IS NULL:2005/09/21(水) 17:09:09 ID:???
無理です。諦めてください。
316NAME IS NULL:2005/09/21(水) 17:12:32 ID:???
>>312
アクセスできているうちに、ダンプ取っておけよ。
ってか、バックアップはとっているんだろうから、DB作り直せば?
317NAME IS NULL:2005/09/21(水) 17:18:33 ID:???
318NAME IS NULL:2005/09/21(水) 17:28:28 ID:???
>>314
>システムを作った人が蒸発してしまった
追い詰めた奴にも責任取らせて作業させとけ。
319312:2005/09/21(水) 17:29:23 ID:S9IkY3bj
資料を探し出しなんとかパスワードを探しだし、Navicatで接続できるようになりました。
しかしMySQLのソフトを起動しShow meを選択し、MySQLのウィンドウを見るとサービスは動いているけど動作してないような感じになっています。
MySQLのウィンドウ内でDatabaseタグを選択したら通常なら登録されているテーブルが表示されると思いますが、
何も表示されません。これってどういう状態になっているんでしょうか?
320312:2005/09/21(水) 17:31:33 ID:S9IkY3bj
>>318
特に追いつめたりしてないですよ。その人毎日定時で帰ってたし。
ある日突然こなくなったんです。
321NAME IS NULL:2005/09/21(水) 17:45:30 ID:???
>>319
そのMySQLアカウントでは、件のデータベースに対して
情報が取得できない権限設定になってるんでないの。
>>317で紹介されてるページを読んで、ちゃんとroot権限を奪取しないよ。

しかし突然蒸発しても、なんか社内の周りが平静な感じの
雰囲気というのも会社としてどうかと。
322312:2005/09/21(水) 18:13:20 ID:S9IkY3bj
>>321
やってみたけど無理でした。何が問題なんだろ。
323NAME IS NULL:2005/09/21(水) 19:57:36 ID:???
何がどう無理だったんだ?
とりあえず今問題なのは、お前自身だ。
324NAME IS NULL:2005/09/21(水) 21:11:41 ID:???
rootパスワードは必ず二人以上で持っておく。
メンテナンス用アクセス経路も、必ず二人以上が知っておく。

DB以前の問題。
パスワードクラックする前に危機管理体制の見直しからやっておけ。
325NAME IS NULL:2005/09/21(水) 23:15:35 ID:???
質問です。
「MySQL日本語の旅」
http://oss.timedia.co.jp/index.fcgi/kahua-web/show/MySQL%c6%fc%cb%dc%b8%ec%a4%ce%ce%b9
このサイトを読んで 4.1 への移行を検討しております。

Debian で apt-get で取得できる 4.1系は4.1.11で、cp932を使うことができ
ません。しかし、上述のサイトの「5.文字化け」を読む限りでは、サーバとク
ライアントの文字コードを合わせれば、それがutf8でなくても、\ や 〜 など
の記号も、テーブル名やカラム名に使わなければ、化けることはないようです。

カラム名に使われた\が化けるのは、カラム名の文字セット
character_set_system がutf8であり、変更不可であるのが理由だと思われま
す。

以上の理解でよろしいでしょうか?
もしこれが正しいなら、4.1.11 をインストールしたサーバを用意して、検証
をしようと考えております。

よろしくお願いします。
326325:2005/09/21(水) 23:21:24 ID:???
補足です。
本当は、まず自分で試すべきなのですが、私にはサーバ管理の権限がないので、
管理者に頼まなければなりません。頼むにあたって、問題があるかどうかの事
前の見通しを必要としております。

公式サイトからのバイナリのインストールが必要なのか、それともapt-get で
済むのかの見通しがほしいのです。

ご存知の方、どうかお教えください。

327NAME IS NULL:2005/09/21(水) 23:24:37 ID:???
>>326
ちょっと待て。ちょっと待て!

まずはサーバーの管理者に相談しろ。
328325:2005/09/21(水) 23:58:36 ID:???
>>327
すでに相談しているのですが、管理者にはそういう知識はないのです。
インストールはできますが、SQL をほとんど書いたことのない人たちなのです。
329NAME IS NULL:2005/09/22(木) 05:34:10 ID:???
>>328
じゃぁ、てめぇが自分のPCで試せばいいじゃないか?

まさか、2chへの書き込みも会社からで、自宅にさえ自分が管理しているPCが一台も無いなんてことはないよな?
330325:2005/09/22(木) 10:47:03 ID:???
>>329
実はそのまさかで、2ch へのアクセスは会社からです。

自宅には win98が1台、Debian Serge が1台ありますが、いずれも極めて貧弱
なマシンで、社の開発・検証環境を構築することができません。Debian には
一応、MySQL4.1 はインストールしてありますが…。
331NAME IS NULL:2005/09/22(木) 11:18:55 ID:???
¥や〜が文字化けする、しないの確認をするのにマシンが貧弱かどうかなんて
大した問題ではないでしょうに。
単に動くかどうか判らない段階での環境構築を面倒くさがっているとしか思えないな。
それに、業務で検証が必要なんだから、自宅云々ではなく社内でマシンを用意するのが
普通でしょ。その手続きも面倒なの?
332NAME IS NULL:2005/09/22(木) 11:42:51 ID:???
その蒸発した社員の給料分でテスト用PC1台買えと
上司に迫るか
そいつの使っていたPCを再セットアップするとか
333NAME IS NULL:2005/09/22(木) 16:30:07 ID:???
誰も使ってないパソコンの1台くらいあるわけでしょ
それを業務外の時間でハードウェアのチェックかけて
業務時間内でOSインスコからmysqlのテストまですればいいのでは
334NAME IS NULL:2005/09/22(木) 22:17:58 ID:???
なぜ、他人の会社の事に、そうまで必死になる…
335NAME IS NULL:2005/09/22(木) 22:51:19 ID:???
>>334
いや、蒸発した手前、フォローぐらいはしとこうかなと思って…
336NAME IS NULL:2005/09/22(木) 23:06:18 ID:???
>>335
山田ぁ!帰って来いっ!
お前の席はまだ空いているぞ!
337NAME IS NULL:2005/09/23(金) 00:42:46 ID:???
>>336
課長とかに一緒にあやまってくれるか?
あと、もう一つ言わないといけないんだけど、一つ間違ってテーブル消しちゃってあわててバックアップ戻したらダミーのテーブルだった。
逃げ出した本当の理由はこれなんだ。
ごめん、やっぱり戻れないわ。
338NAME IS NULL:2005/09/23(金) 06:55:07 ID:???
ここもネタスレになってしまったか
339NAME IS NULL:2005/09/23(金) 09:33:58 ID:???
MySQLの導入を検討していますが、1つ分からない事があったので質問させて下さい。

MySQL(サーバ側)で、発行したSQLのログを見る(テキストなどに出力)事は可能でしょうか?
340NAME IS NULL:2005/09/23(金) 10:00:16 ID:???
341NAME IS NULL:2005/09/24(土) 05:08:19 ID:usiHEJHi
phpMyAdminから
mysqladmin status
を確認する方法はないのでしょうか?
ランタイム情報には
Queries per second avg
がないようですので…
342NAME IS NULL:2005/09/24(土) 21:59:24 ID:fw8iHz42
xamppいれたんだけどmy.iniがありません
どうやってせっていするの?
343NAME IS NULL:2005/09/24(土) 22:24:46 ID:???
>>342
サンプルの設定ファイルが数種類用意されてるので
それをコピーしてリネームして、内容を修正する。
344NAME IS NULL:2005/09/25(日) 01:52:22 ID:mkYrWzs1
date,type,totalというカラムのテーブルがあり、

2005/9/25 orange 10
2005/9/25 apple 20
2005/9/25 fish 30

というデータが入っているとして、
dateを指定して、
orange=10,apple=20,fish=30
こういう列を取り出したいのですが、
どうやれば実現できるでしょうか?
345NAME IS NULL:2005/09/25(日) 07:15:21 ID:???
SQLの仕組みとしては、3行出てくる。

だって、「条件を満たす行を全部書き出す」というのが、SQLのSELECT文のお仕事だもん。
346NAME IS NULL:2005/09/25(日) 08:03:39 ID:???
そこでPHPですよ^^
347NAME IS NULL:2005/09/25(日) 09:08:57 ID:???
もちろん、PerlでもCでもPythonでもいいぞ。
348NAME IS NULL:2005/09/25(日) 09:49:37 ID:???
>>344
MySQLの質問じゃないやん。

SELECT type, total From てーぶる where date = '2005/9/25'; を実行すれば、
どのデータベースでも、日付が一致したレコードをずらずらと出力してくれる。

orange 10
apple 20
fish 30
ってね。

でも、この3行を単一の行にまとめる方法をSQLは提供しない。だって、
そんなことをしたらテーブルの構造が壊れてしまうじゃない? 検索条件しだいで
一行にある、フィールドの数が変わってしまうようなテーブルは、SQLでは
基本的にありえないから。

可変長で切り返しのあるレコード、 orange 10 apple 20 fish 30 は、SQLには
なじまない構造だ。

もちろん、別のプログラムからSQLサーバーを呼び出して検索させる場合には、
SQLサーバーから戻ってきたこの3行を、その呼び出しもとのプログラム(例えば
PHPのスクリプト)で一行に取りまとめ、ウェブなりテキストファイルなりに書き出す
ことは可能だけど、それはもはやMySQLどころかSQLの質問でさえないので・・・

344さんが使っている(使う予定の)プログラム言語に関連するスレッドで聞いた
ほうが、具体的な情報が得られると思うよ。
349NAME IS NULL:2005/09/25(日) 12:22:42 ID:???
MySQL4.1をインストールしまして
初期設定でエラーがでました。
↓はエラーの画面です。
http://cgi.2chan.net/up2/src/f90134.jpg

OSは2000です。宜しく御願いします。
350349:2005/09/25(日) 12:28:59 ID:???
画像にアクセスできないみたいなんで
こちらにUPしなおしました。
http://oxygen.sakura.ne.jp/uploader/images/112761886400.jpg
宜しく御願いします。

351NAME IS NULL:2005/09/25(日) 13:48:30 ID:???
来たのか、コレ。
352NAME IS NULL:2005/09/25(日) 14:24:00 ID:???
      ∩___∩
      | ノ  _,  ,_ ヽ
     /  ●   ● |
     |    ( _●_)  ミ
    彡、   |∪|  ノ
⊂⌒ヽ /    ヽノ  ヽ /⌒つ
  \ ヽ  /        ヽ /
   \_,,ノ      |、_ノ
353NAME IS NULL:2005/09/25(日) 15:07:33 ID:???
admin権限無いんじゃないのか?
エラー読め
354344:2005/09/25(日) 19:09:03 ID:HB0/ElST
説明が下手ですみません。
たしかにプログラムの方でやればいいのですが、
行を列に変換した上で(テンポラリテーブルを生成して)、
さらに他のテーブルとjoinしたいと思っています。
「行を列に変換」で検索したところオラクルでのサンプルは
見つかったのですが
MySQLでなんとかできないのかと思い
質問させていただきました。
355NAME IS NULL:2005/09/26(月) 14:02:12 ID:UGRhkP6s
5.0.12でストアドプロシージャを使いたいのですが、エラーが出ます。
mysql> delimiter //
mysql> create procedure proc1()
begin
select * from a;
end//
ERROR 1418 (HY000): This routine has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_routine_creators variable)

何が原因でしょうか?
356NAME IS NULL:2005/09/26(月) 16:57:10 ID:???
SET GLOBAL log_bin_trust_routine_creators = 1;
をやれば実行できました。お騒がせしました。
357NAME IS NULL:2005/09/26(月) 23:16:59 ID:UtB/D1MP
フィールド名からフィールドのタイプを得るのって
可能ですか? どうすればいいんでしょうか?

結構調べたんですが、のってないです。よろしくお願いします。
358NAME IS NULL:2005/09/27(火) 00:06:54 ID:???
>>357
一旦テーブルの情報得て、そっから欲しいフィールドのところだけ抜き出せばいいんでね?
359NAME IS NULL:2005/09/27(火) 00:09:47 ID:???
>>357
show fields from テーブル名 like 'フィールド名'
何か言語から得たいのなら、その言語の板で聞きなはれ。
360NAME IS NULL:2005/09/27(火) 12:16:40 ID:???
テーブル名:TaisenRecord
UserMei:ユーザの名前
Point:-100から100まで
TaisenID:20050927000001

*8人対戦のゲームなので、TaisenIDはゲーム毎に8個ずつユーザ毎に保存されます。
「ユーザ毎の勝率」をデータとして出したいのですが、お知恵をお借りできないかと。
考えたSQL文:SELECT UserMei, COUNT(Point)/COUNT(TaisenID) AS Shouritu FROM

TaisenRecord where Point > 0 GROUP BY UserMei;
これだと where Point > 0の条件式が、総ゲーム数を出したいTaisenIDの方にも適用されて、勝率を出す事ができません。
Point >0 の条件をCOUNT(Point)だけに適用して、COUNT(TaisenID)には適用せずに、素直

に総ゲーム数とするようなSQL文の書き方を教えて頂けないでしょうか?お願いします。
361NAME IS NULL:2005/09/27(火) 12:29:17 ID:???
>>360
できない
エクセルを使うんだ
362NAME IS NULL:2005/09/27(火) 12:46:15 ID:???
>>360
テストしていないけど
SELECT TaisenRecord.UserMei, p.PointCount / COUNT(TaisenID)
FROM TaisenRecord
LEFT OUTER JOIN (SELECT COUNT(Point) AS PointCount, UserMei FROM TaisenRecord WHERE Point > 0 GROUP BY UserMei) AS p
 ON TaisenRecord.UserMei = p.UserMei
GROUP BY TaisenRecord.UserMei;

MySQLのバージョンによっては LEFT OUTER JOIN の後に SELECT が置けないので
その場合は、一時テーブルにでも書き出せばいいと思う。
363NAME IS NULL:2005/09/27(火) 15:45:11 ID:???
MySQL4.1をインストールした後
コマンドラインクライアントを起動させ
rootで接続することはできましたが
「かねやんMySQLAdmin」というクライアントソフトでは
「コネクト失敗」と出て接続できません

何が原因なんでしょうか?
364NAME IS NULL:2005/09/27(火) 16:04:48 ID:???
>>363
使ってるMySQL接続ライブラリの違い。
MySQLサーバ側を古い接続ライブラリで接続
出来るように設定するのが良いんでないか。
365NAME IS NULL:2005/09/27(火) 16:39:39 ID:???
「接続ライブラリ」なんて聞いたことがないです…

コマンドプロンプトの画面で作業していて
テーブル作成、レコードの追加を参考書みながら
試しているレベルです。
その参考書には接続ライブラリ変更のコマンド(?)が
載っていないようです。

コマンド型のではやりにくいので、はやくGUIで行える
「かねやん」の方に移行したいのですが…
366NAME IS NULL:2005/09/27(火) 23:45:03 ID:???
>>365
その参考書捨てた方が良い。
GUIよりCUI(コマンド)に慣れたほうが今後を考えるならいいと思う。

まぁ最後は好きにすればいいのだが。
367NAME IS NULL:2005/09/28(水) 00:23:25 ID:???
>>366
やはりハイスキルな人はCUIが多いんですね
とりあえず今はGUIで行こうと思ってます
なんとか起動できるようにがんばってみます・・・
368NAME IS NULL:2005/09/28(水) 00:28:22 ID:64Wfu/+M
MySQL4.0系までと4.1系以降ではユーザ認証のプロトコルが違う。
接続ライブラリの違いってのはこれのこと。

かねやんは使ったことないので良く知らないけど、
ver4.1対応のものでないと駄目なんじゃないの?

MySQLに限らずCUIのほうがスクリプトで作業を自動化したりいろいろと便利だよ。
369NAME IS NULL:2005/09/28(水) 00:40:05 ID:???
>>368
一回アンインストして4.0をいれてみた方が良さそうですね

まだレコードの追加すら碌にやり方知らないので…
そんな高度な事は…
370NAME IS NULL:2005/09/28(水) 00:58:56 ID:???
初心者こそ、テキストベースでの操作をやってみたほうが、
「自分がどのカラムの何をいじっていて、どういう風に検索しているか」
を、実感することができるよ。

もし、SQLなりMySQLなりについて好奇心を持っているなら、
CUIでしばらく遊んでみることをお勧めする。精神主義でもなんでもなく、

そのほうが「お得」でっせ〜 お客さん!

と、本気でお勧めしたい。
371366:2005/09/28(水) 02:58:21 ID:???
>>369
CUIのほうが高度というわけでもない。
GUIだと細かい動きを隠ぺいしてしまうので勉強にはならないとおもう。

だから藻前の持ってる本は捨てろって(ry
372NAME IS NULL:2005/09/28(水) 04:54:09 ID:???
>>369
GUI の怖いところは、裏でどんな複雑怪奇なことが起こっているのかをユーザーに
理解させないままで、複雑で高度なことをやってしまうという点で、いや、本当にそれで
全部の仕事が片付いてしまうなら、それはそれで全く問題ない。

大企業で専門家がデータベース様の管理をしてくれていて、すでにテーブルの
構造もデータのチェックも完璧に整っている環境で、事務員さんがアクセスや
エクセルの延長線上にあるものとしてSQLサーバーを使うなら、めんどくさいことを
知る必要は全くない。

だがしかし・・・

たとえMySQLといえども、自分でサーバーをインストールし、自分で
テーブルの構造を設計し、レコードを追加し、テーブルとテーブルにまたがる
検索するようなものを作るということになると、データベースエンジンなるものが、
いつ、どこで、何をやっているのか、一歩ずつ理解するほうが、かえって
勉強の近道になる。一見するとGUIは、簡単だけど、マウスを一発クリックする
だけで、初心者には理解不能なたくさんのコマンドが実行されてしまうから、
勉強しようにも手の付けようがない状態に閉じ込められたまま抜け出せなくなるよ。
373NAME IS NULL:2005/09/29(木) 01:23:52 ID:???
Mysql 4.1系で「十」←数字の10って文字 「like %十%」でヒットしますか?
私の環境では何故かヒットしません。。。
navicat 2005でもヒットしませんでした。

DBの文字は
 default-character-set=binary
で設定してます。

対策方法ご存知の方はご教授下さい。
374NAME IS NULL:2005/09/29(木) 02:13:01 ID:???
mysql -u root -p
Enter passward: *******
Can't connect to MySQL server on 'localhost';
何もできん
375NAME IS NULL:2005/09/29(木) 04:02:55 ID:xRNC5Ndx
>>374
ルートパスワード忘れた、あるいは設定ミスで入れなくなった場合には、
ttp://dev.mysql.com/doc/mysql/ja/resetting-permissions.html
376NAME IS NULL:2005/09/29(木) 04:11:00 ID:???
>>373
charsetがbinaryだからでしょ。

create table t1 (c1 char(3)) default charset=cp932;

とかでテーブル作ったらちゃんとヒットしたよ。
377NAME IS NULL:2005/09/29(木) 08:41:23 ID:???
intで10を放り込んで、like %十%でヒットしないという話かと思った。

最近ドシロウトな質問多いから、最初から「どうせしょうもない話だろ」と疑ってかかってしまう・・・・・
378NAME IS NULL:2005/09/29(木) 11:15:39 ID:???
>>373
Shift_JIS では、「十」=0x8F5C、「\」=0x5C で、binary だとエスケープ記号と
認識されてしまう。
同様によく問題になるのが「能」=0x945C。
379NAME IS NULL:2005/09/29(木) 11:19:19 ID:7+gpDoj7
MySQL 5.0系初のRC版「MySQL 5.0.13」がリリース
http://pcweb.mycom.co.jp/news/2005/09/28/010.html

サブクエリのみならず、ついにビューやトリガが使えるようになるのか。
4.0 → 4.1 の移行に比べれば、4.1 → 5.0の移行は簡単そうだ。
記念age。
380NAME IS NULL:2005/09/29(木) 14:49:13 ID:???
>>376-378
ありがとうございます。
373です。
以下のSQLを実行したのですが反映されないです。
 ALTER TABLE `table_name` CHANGE `yomi` `yomi` VARCHAR( 250 ) CHARACTER SET sjis NOT NULL
 ALTER TABLE `table_name` CHARACTER SET = sjis
テーブルを作り直したほうが良いですかね。。。

>>377
まさか・・・
381NAME IS NULL:2005/09/29(木) 15:26:46 ID:???
文字コードの *変更後* に登録したデータは「like %十%」でヒットするのではないか。
以前、SJIS -> EUC に変換したときに、WHERE で既存データがマッチしない現象に
チト悩んだことがあったので(DUMP -> 文字コード変換 -> リストアで直った)。
binaryは使ったことないのでハズしているかもしれんが。。。
382NAME IS NULL:2005/09/29(木) 15:56:50 ID:???
373です。

今気付いたのですが
 ALTER TABLE `table_name` CHANGE `yomi` `yomi` VARCHAR( 250 ) CHARACTER SET sjis NOT NULL
 ALTER TABLE `table_name` CHARACTER SET = sjis
も反映されてましたが、10万レコードのyomiデータが「????」に
なってましたorz
383NAME IS NULL:2005/09/29(木) 16:59:27 ID:???
ulogdを使ってiptablesで弾いたログをMySQLのデータベースに格納するようにしてみたのですが、
これってどこまで記録され続けるんでしょうか。
普通のログファイルなんかだと、1週間ごとにローテーションさせたりとかしますが
データベースだとどういう風に管理すれば良いんでしょう。

my.cnfにサイズの上限設定するのかと思っていたんですがそういう項目無いみたいだし・・・

使用しているのはMySQL 4.1.14です。
384NAME IS NULL:2005/09/29(木) 18:50:11 ID:???
>>383
記憶媒体の限度まで。

古いものは削除するように、ルーチン入れたら。
385NAME IS NULL:2005/09/30(金) 02:17:37 ID:???
>>367
GUIツール使うなら、本家のツールだけにしとけ。
http://www.mysql.com/products/tools/administrator/
http://www.mysql.com/products/tools/query-browser/
英語が分からない、などというのは却下。MySQLの吐くのエラーメッセージもSQLコマンドも全て英語ベースだ。
逆に意味の分からん用語があれば、その用語で英語マニュアルを検索するぐらいのつもりで使え。
そうすりゃ理解も早まるだろう。
日本語マニュアルは、英語マニュアルで意味の分からない部分が出た場合、同じセクションを覗く程度にしておけ。

後、例えGUIツールを使っても、DB操作はコマンド手入力しろよ。
なぜなら、PHP等からDBを扱うためには、CUIと同じように、
必ず、自分で、SQL文を作成することが必須。

CUIで使うコマンドを覚えなくても良いのは、人様が開発したアプリの動作環境としてDBが必須な場合だけ。
それも、DB保守まで含めた高価なサポート料支払う場合に限るがな。
386NAME IS NULL:2005/09/30(金) 02:22:24 ID:3xJ+N7MW
>>383
ver4.x以降では800万テラバイト(2^63 バイト)とのこと。

んで実際にはOSのファイルサイズ上限が限界とのこと。
でもMergeテーブルを使えばOKとのこと。
InnoDBでもfile_per_table使えばいいのかねぇ?

詳しい話はこちらに http://dev.mysql.com/doc/mysql/ja/table-size.html

387NAME IS NULL:2005/09/30(金) 02:25:41 ID:???
>>367>>385
見れば分かるけど、英語マニュアルのほうは日々追加更新されてっている。
でも日本語のほうは更新されていないっぽいので、既に目次レベルで差がでてる。

だからまずは英語版をあたるのが良いと思う。
それに対応する日本語ページがあり、ぱっと見内容に差異がなさそうであれば、
もちろん日本語のほうが分かりやすいのでこっちを読むけど。
388NAME IS NULL:2005/09/30(金) 16:18:49 ID:???
ttp://dev.mysql.com/downloads/mysql/4.0.html
にあるMySQL 4.0.26をMac OS X 10.4.2にインストールしようとすると
インストーラが「インストールできません」と言います。

確かに「Installer package (Mac OS X v10.3)」と書いてありますが、
10.4.2にはどうやったら4.0.26をインストールできるのでしょうか?

(4.1はインストールできたんですが、認証形式がまだ特殊らしいので4.0にダウングレードしたいのです。)
389NAME IS NULL:2005/09/30(金) 16:22:08 ID:wPRUUBnI
mysql.sockとは何ですか?プログラムですか?
# /etc/init.d/mysql start
すると、/var/lib/mysql/mysql.sockがチラっと見えます。
mysql.sockは一時ファイルだと予想しましたが、MySQLインストール直後に
find / -name mysql.sock -print がヒットしなくてもインストールは正常?
390NAME IS NULL:2005/10/01(土) 03:41:08 ID:???
391NAME IS NULL:2005/10/01(土) 10:46:41 ID:sipdXsCV
>>390
君は自分のサイトを宣伝したかっただけかorz
392NAME IS NULL:2005/10/01(土) 10:48:45 ID:sRgRD7pr
>>391
え? こんなことに Google の社長様がご降臨あそばしたの!?
393NAME IS NULL:2005/10/01(土) 14:20:36 ID:???
面白いと思って切り返したんだろうな・・・
394NAME IS NULL:2005/10/01(土) 15:25:03 ID:???
面白い突っ込みをしたつもりなんだろうな・・・
395NAME IS NULL:2005/10/02(日) 09:33:56 ID:???
なんかMYSQL5がダウンできん・・・
396NAME IS NULL:2005/10/02(日) 19:37:58 ID:???
ちょっとお聞きしたいのですが、空テーブルを作成することは可能でしょうか?
もし、可能でしたらやり方を教えていただけませんでしょうか?
当方、MySQLのVer4.1使用です。
397NAME IS NULL:2005/10/03(月) 00:15:50 ID:???
空テーブルって? 意味がさっぱり。
rowのないテーブルならいくらでもつくれるが。
398NAME IS NULL:2005/10/03(月) 02:43:18 ID:09MzqyX1
カラムが1つもないテーブルは作れないよ。

ERROR 1090 (42000): You can't delete all columns with ALTER TABLE; use DROP TABLE instead
399NAME IS NULL:2005/10/03(月) 11:10:54 ID:???
>>362さん、
遅レスですが、回答ありがとうございました!
やっと休みがとれて・・PCの前に来れた次第です。。。。
mysqlのバージョンは4.0.10だったんですがどうもうまくいきませんでした
Version確認してちょ っていうエラーで。
4.1にバージョンアップする作業がんばってみます。
400NAME IS NULL:2005/10/03(月) 18:26:20 ID:???
MyODBCを利用してVisualBasicから
MySQLを操作する方法が分かりません。

データソースの設定は「ユーザDSN」タブにて行いました。
テスト用のテーブルも幾つかMySQLに作成しています。
次に、どのようなコードをVBで書けばいいかが
全くわからない状態です。
どなたかご教授お願いします。

環境は以下のとおりです。
MySQL: 4.1
MyODBC: 3.51
VisualBasic: 2003 (VisualStudio内の)
401NAME IS NULL:2005/10/03(月) 18:36:45 ID:???
402NAME IS NULL:2005/10/03(月) 20:38:20 ID:???
ホームページをつくって
データをMSQLでアクセスして入力し、
データのソートとかをホームページ上で
実現させたいんですが

これってPHPで実現させるんでしょうか?
403NAME IS NULL:2005/10/03(月) 20:52:41 ID:???
別に好きなの使えばいいんじゃないの
404NAME IS NULL:2005/10/03(月) 22:32:16 ID:???
396です。

>>398
やはり無理ですか、裏技的なものがないかなぁと質問してみたのですが・・・
ありがとうございました。
405NAME IS NULL:2005/10/03(月) 22:54:54 ID:???
>>402
べつにPerlからMySQLを利用することだってできるけど・・・
問題は、そもそも402の使うウェブサイトがMySQLを提供しているか
という点ではないのか?
406NAME IS NULL:2005/10/03(月) 23:04:02 ID:/hziuCvR
# mysqld_safe --datadir=hoge
このようにして起動して、起動後にdatadirの値を
確認するにはどうしたらよいですか?
407NAME IS NULL:2005/10/03(月) 23:17:38 ID:???
psコマンドにしかるべきオプションを食わせてやれば
408NAME IS NULL:2005/10/03(月) 23:21:24 ID:???
又は起動スクリプトを使用してあとでそれを参照する
409NAME IS NULL:2005/10/03(月) 23:21:59 ID:/hziuCvR
僕を叱って下さい。
# ps axu で、右の方に--datadir=/usが見えましたが
コンソール右端で切れて見えません。
クスコで広げる方法を教えてください。
410NAME IS NULL:2005/10/03(月) 23:23:08 ID:???
ps -efでダメかYO
411NAME IS NULL:2005/10/03(月) 23:30:53 ID:/hziuCvR
ps -efでも同じように切れましたがフォントを小さくしたら見えました。
もしもっと長かったら>でリダイレクトして見ればいいのかな。
ありがとうございました。
412NAME IS NULL:2005/10/04(火) 00:01:43 ID:???
>>409
ps axww
413NAME IS NULL:2005/10/04(火) 00:47:00 ID:3diVCpAB
>>412 ひろがりました。ありがとうございます。
414NAME IS NULL:2005/10/04(火) 15:46:36 ID:???
>>406-413
MySQLスレなんだから、MySQL内でなんとかしようよ

SHOW VARIABLES LIKE "datadir";
これでいけるでしょ
415400:2005/10/04(火) 16:47:57 ID:RwnDnVsQ
>>401
リンク先のコードの上2行がエラーとなっています。
どのようになおせばいいんでしょうか?

また、同じサイト内の
http://tsuttayo.sytes.net/mysql/install/odbc/10/30/20/20/install.php
も参照にして設定を行いました。
416NAME IS NULL:2005/10/04(火) 17:44:27 ID:???
初歩的な質問すいません。

No word value
---------------
1  name ああ
1  age  18
1  place 日本
2  name いい
2  age  19
2  place 日本

という構成のテーブルがあって、

word="name" and value="ああ" と
word="place" and value="日本" を満たすNoの一覧を取得したいのですが、
どのようなSQL文になるんでしょうか?
以下を思いついたのですが、Emptyになってしまいます。
アドバイスお願いします。

select No
from XXX
where
(word="name" and value="ああ") and
(word="place" and value="日本")
417NAME IS NULL:2005/10/04(火) 17:48:56 ID:???
>>416

or じゃないの?
418NAME IS NULL:2005/10/04(火) 17:51:54 ID:???
>>417
いえ、両方の条件を満たすレコードのNo一覧が欲しいのです。
419NAME IS NULL:2005/10/04(火) 17:54:30 ID:???
>>416 >>418
(word="name" and value="ああ") と (word="place" and value="日本") を
両方満たすという条件なんてありえんぢゃろ?
例で示しているテーブルから、どのレコードが返って欲しいのか書き出してみそ。
420http:// YahooBB220024098009.bbtec.net.2ch.net/:2005/10/04(火) 18:15:38 ID:???
guest
421NAME IS NULL:2005/10/04(火) 18:16:41 ID:???
>>419
確かに両方を満たすことなんて有り得ないですね。
かといってorではないです。
例の場合はNo=1だけがヒットして欲しいです。
422419:2005/10/04(火) 18:36:22 ID:???
末尾のSQLで期待の動作はすると思うが、そもそもテーブル設計がマズイような。。。
こんなテーブルの方が自然ぢゃね?
No name age place
--------------------
1  ああ 18 日本
2  いい 19 日本

SELECT XXX.no FROM XXX
INNER JOIN XXX AS t ON XXX.no = t.no AND t.word = 'place' AND t.value = '日本'
WHERE XXX.word = 'name' AND XXX.value = 'ああ';
423NAME IS NULL:2005/10/04(火) 19:36:52 ID:???
INNER JOINする必要ある?
424NAME IS NULL:2005/10/04(火) 22:20:05 ID:???
漏れも、自分自身のテーブルを結合するのがスマートだと思ったけど・・・・他に方法ある?
425419:2005/10/04(火) 23:00:01 ID:???
>>423
・MySQLのバージョンが記載されていなかったのでサブクエリが使用できるかどうか不明
・SELECT XXX.no FROM XXX, XXX as t WHERE ... だとレコード数の2乗がWHERE対象になる
という理由で自己結合で書いたんだが。。。
他に良い方法があればご教示ヨロ。
426NAME IS NULL:2005/10/05(水) 01:02:34 ID:JTV4Wb06
MySQLにXML文書を格納したいんだけどXMLサポートしてないんだよね?MySQLって。
Oracleなどはしてたような気がするけど
427NAME IS NULL:2005/10/05(水) 08:58:32 ID:???
>>426
俺も詳しいことは知らないが、XMLサポートあることはある。

http://www.mysqluc.com/presentations/mysql05/alexander_barkov.pdf
428NAME IS NULL:2005/10/05(水) 17:30:31 ID:7ZhDZrog
grant select,insert on testdb.* to testuser@localhost identified by 'xx';
この後testuserの設定値のselect,insertを得るコマンドを教えてください。
429NAME IS NULL:2005/10/05(水) 22:24:48 ID:???
dev.mysql.comの日本語マニュアル、更新してくれないかなぁ

プリペアドステートメントの仕様の辺りなんか、仕様変更のせいで大嘘書いてあって大混乱したし・・・・・


他人本願と言われればそれまでなんだが。
430NAME IS NULL:2005/10/05(水) 23:58:25 ID:udn/pwKt
ちょっと教えてください。
スレッド数=クライアント数なのでしょうか。
I/OスレッドってInnoDB用の何かの領域なのでしょうか。
スレッドとI/Oスレッドの機能がいまいちよくわからないのです。
よろしくお願いします。
431NAME IS NULL:2005/10/06(木) 00:27:25 ID:???
>>429
とりあえずMLに投げれよ。
おまえから初めればよかろう。期限やノルマなんて無いんだからさ。
432NAME IS NULL:2005/10/06(木) 03:44:37 ID:???
>>430
スレッド数=クライアント数+α

InnoDBは確か専用のI/Oスレッドを持っているはず。パラメータで変更も可能。
デフォルトは4か2かだった気がする。詳しくは自分で調べれ。

基本的にはクライアントが新しく接続にくるたびに、そのクライアント専用のスレッドが
用意されて対応する。

ただしスレッド自体はクライアントが切断しても消えることなくキャッシュされていて、
別のクライアントが接続にきた時に再利用されるなどの仕組みがある。

したがって今この瞬間に同時にクライアント10台から接続を受けているからといって、
mysqld内のスレッド数が10+αで一意に決まるってわけじゃない。

で、やっぱり詳しくは自分で調べれ。
433NAME IS NULL:2005/10/06(木) 03:48:43 ID:???
>>428

mysql> grant select,insert on testdb.* to testuser@localhost identified by 'xx';
Query OK, 0 rows affected (0.02 sec)

mysql> SELECT select_priv, insert_priv FROM mysql.db WHERE db='testdb' AND user='testuser' AND host='localhost';

+-------------+-------------+
| select_priv | insert_priv |
+-------------+-------------+
| Y | Y |
+-------------+-------------+
1 row in set (0.03 sec)
434NAME IS NULL:2005/10/06(木) 03:49:48 ID:???
>>428
おまいさんはmysql権限データベースも知らんのか?
435NAME IS NULL:2005/10/06(木) 10:07:28 ID:???
知らんくってわるいか!!このボケナスが!!
436NAME IS NULL:2005/10/06(木) 10:17:21 ID:???
知らないから聞いてるんじゃねーか!!このバカンスが!!
437NAME IS NULL:2005/10/06(木) 22:09:53 ID:???
ミナミの〜島のカメハメハ・・・
438NAME IS NULL:2005/10/06(木) 23:51:39 ID:oJrMDeAZ
>432
430です。ご意見ありがとうございます。
助かります。
439NAME IS NULL:2005/10/07(金) 11:24:09 ID:OeMZClMO
rootの権限が全部なくなった。
再インストール以外の復活方法や、MySQLをインストールする時に
行われるrootユーザの作成プロセス部分だけを漏れが任意に
実行する裏技キボン。
440NAME IS NULL:2005/10/07(金) 11:33:24 ID:???
>>439
管理者に賄賂を贈って権限をもらう。
441NAME IS NULL:2005/10/07(金) 11:50:59 ID:???
低レベルな質問で申し訳ございません。
MySQLにてデータを保存しているデータをHTMLの<SELECT>の<OPTION value="">
で呼び出すにはどうしたらよいでしょうか?
よろしくお願い致します。
442NAME IS NULL:2005/10/07(金) 11:54:00 ID:???
Perl, PHP, Java 等の何かしらの言語を使って
1) MySQLからデータを取り出し
2) <SELECT><OPTION value="">を生成
というプログラムを作成する
443NAME IS NULL:2005/10/07(金) 14:23:02 ID:???
>442
 ごめんなさい。ちょっとよくわかりません。
 使用言語はPerlを使用しています。
444p:2005/10/07(金) 15:40:18 ID:pnKsQtLU
5
445NAME IS NULL:2005/10/07(金) 15:43:35 ID:???
>>439
権限データベースを削除して、mysql_install_dbを実行すれば
最初の状態にはなると思う。
446NAME IS NULL:2005/10/07(金) 15:56:25 ID:OeMZClMO
>>445
ありがとうございます。おかげで復活いたしました!
447NAME IS NULL:2005/10/07(金) 16:42:29 ID:???
The samurai please answer in English.
http://forums.mysql.com/read.php?34,48251,48251#msg-48251
448NAME IS NULL:2005/10/07(金) 23:12:59 ID:???
名前見るからに日本人だよな・・・・・

バグに引っかかってるかどうか知らんが、

width → with
show grantsの使い方くらいは覚える
flush privilegesの使い方くらいは覚える

バグに引っかかっているのなら、アップデートの仕方を覚える
449NAME IS NULL:2005/10/07(金) 23:17:51 ID:xS73BXyY
you mother fucker!!
450NAME IS NULL:2005/10/07(金) 23:23:55 ID:???
(;´Д`)ハァハァ
451NAME IS NULL:2005/10/07(金) 23:45:05 ID:???
>>443
そういうのはCGIなPerlのトコで聞いてください。
452NAME IS NULL:2005/10/08(土) 01:45:13 ID:gUciMCWp
>>448 nice
The samurai please answer in English.
http://forums.mysql.com/read.php?34,48251,48333#msg-48333
453NAME IS NULL:2005/10/08(土) 01:46:26 ID:8KBHw8AA
>>439
単にrootパスワード忘れちゃっただけとかなら"--skip-grant-tables"指定してmysqld再起動すれば
パスワード認証無しで入れるからそれでもいいとおもうけどな。権限設定終わったらもちろん
--skip-grant-tables無しで再起動で通常状態に。
454NAME IS NULL:2005/10/08(土) 05:01:45 ID:N+iSLgRb
トランザクションが必要ではないのですが、
大量の更新作業があるテーブルはMyISAMとInnoDBのどちらがいいでしょうか?

大量に更新する部分のカラムはsmallint,mediumint,varcharの3種類です。
455NAME IS NULL:2005/10/08(土) 05:08:53 ID:???
>>454
大量の更新がある場合は、フラグメンテーションの
起こりにくいInnoDBの方がいいでしょう。
456NAME IS NULL:2005/10/08(土) 05:22:25 ID:???
>>454
『High Performance MySQL』(実践ハイパフォーマンスMySQL)には確か以下のように書かれていた。

Read/Writeの比率
・Readが90%以上 → MyISAMが一番速い
・Readが80%から90% → BDBが一番速い
・Readが80%未満 → InnoDBが一番速い

間違ってたらゴメソ。参考程度にな!
457454:2005/10/08(土) 05:29:24 ID:???
>>455
>>456
わかりました!ありがとうございました!!
458NAME IS NULL:2005/10/08(土) 09:58:47 ID:DbukFtVS
おぃ、お舞らOracleがInnoDBを買収したってプレスリリースがでてますよ!

http://www.oracle.com/corporate/press/2005_oct/inno.html

MySQL AB側もWelcomeとかいう感じのメッセージ出してる。

http://www.mysql.com/news-and-events/news/article_968.html

これからどーなってくんだろう。
459NAME IS NULL:2005/10/08(土) 11:05:46 ID:???
InnoDBって名前がまず気に入らない
まるでチンコ不能なDBみたいじゃないか。
460NAME IS NULL:2005/10/08(土) 12:35:26 ID:???
陰嚢db なのか?!
461NAME IS NULL:2005/10/08(土) 12:40:41 ID:???
おまくる
462NAME IS NULL:2005/10/08(土) 12:50:09 ID:???
中学生かお前は。
イノベーション(innovation = 技術革新)以外、今の今まで考えもしなかっ
たよ。
463NAME IS NULL:2005/10/08(土) 13:50:25 ID:???
中学生はイノベーションよりマスターベーション
464NAME IS NULL:2005/10/08(土) 14:07:34 ID:???
すまん俺も in と no を分けて呼んでた orz
465NAME IS NULL:2005/10/08(土) 17:25:01 ID:???
>>458
まあ下手に敵対的なコメント出しても裏目に出るだけだろうし<Welcome

やばいかもしれんね。特にコマーシャルライセンスの位置づけ。
IBMやSUN、最近はMicrosoftでさえオープンソースコミュニティや
ハッカー(悪い意味じゃない方の)と折り合いを付けようとしているけど
Oracleにはその香りがしない。
Innobaseを資金的に補助するっつー絵が想像できない。

有り体に言って、潰す気だろう。
InnoDB使えなくなったらMySQLから離れるって人はかなり多いはず。
466NAME IS NULL:2005/10/08(土) 18:49:23 ID:Jqmxvx7i
ライセンスのGPLは変えないと思うけど。
俺来るのポ優れ対策ではと。。。
467NAME IS NULL:2005/10/09(日) 01:25:04 ID:qXIKHGf+
もしかした「イノベーションのジレンマ」を何とかするために
Oracleが考えた秘策だったり?
468NAME IS NULL:2005/10/09(日) 03:48:58 ID:???
469NAME IS NULL:2005/10/09(日) 12:39:27 ID:???
in no DB
inn p oDB
470NAME IS NULL:2005/10/09(日) 13:33:29 ID:???
居乃出美
471NAME IS NULL:2005/10/09(日) 19:48:23 ID:???
真面目な話、OracleでのHeikkiの待遇ってどうなるんだろうね。
HeikkiはInnoDB作った人ね。
472NAME IS NULL:2005/10/10(月) 00:31:57 ID:???
ヒッキー?
473NAME IS NULL:2005/10/10(月) 10:05:28 ID:+XVZSTvE
InnoDBのダイナミックダンプは有償だったが,これをOracleが販売サポートするのだろうか?
474NAME IS NULL:2005/10/10(月) 12:06:10 ID:???
InnoDBってGPLだったような・・・
だとしたらライセンス的にはOracleには取り込めないんじゃないのか?
取り込んだらOracle本体のソースコードもGPLにしなきゃいけないはずだから。。。
475NAME IS NULL:2005/10/10(月) 13:00:18 ID:???
http://pcweb.mycom.co.jp/news/2005/10/08/001.html
>オープンソースコミュニティへのコミットの一環
らしい
476NAME IS NULL:2005/10/10(月) 14:54:52 ID:???
んなわけないべ。ここまで露骨なMySQLつぶし。
477NAME IS NULL:2005/10/10(月) 16:40:00 ID:???
>>474
Oracleに取り込むかどうかは置いておいて、
>InnoDBってGPLだったような
が間違い。GPLだけじゃなくてソース隠蔽可能なコマーシャルライセンスもある。
でなければそれを組み込んだMySQLで、コマーシャルライセンスなんて出来ないでしょ。
478NAME IS NULL:2005/10/10(月) 16:50:29 ID:???
こうなるとInnoDBに代わる強力なDBがほしい。
案1.BDBを更にチューニング
案2.InnoDB開発陣をBDBあるいはmysql本体への取り込みを画策・・・

現実的じゃないなぁ・・・
479NAME IS NULL:2005/10/10(月) 17:28:41 ID:???
data\cshost96.err
data\cshost96.pid
data\ib_logfile0, data\ib_logfile1
data\ibdata1
などのファイルは削除しても問題ないんでしょうか?
サイズが大きいので出来ればけいしたいのですが。
480NAME IS NULL:2005/10/11(火) 01:31:57 ID:vPBIE0Xh
>>479
ホスト名.err → エラー出力ログファイル 消してもOK
ホスト名.pid → MySQLが起動しているかどうかの判定に使用されるファイル 消しちゃ駄目だって
ib_logfile0およびib_logfile1 → これはInnoDBのREDOログファイルだよ 消したら動かなくなるっつうの
ibdata1 → これはInnoDBのデータファイルだよ 消したらデータ無くなるっつうの

InnoDB使わないから要らないってのなら --skip-innodb オプションを指定してサーバを起動した後、
上記InnoDB関連ファイルを削除すべし。
481479:2005/10/11(火) 03:32:48 ID:AfTi8Fmy
>>480
どうも
なんかややこしいっすね
とりあえずerrだけ消しときます。

それと、新たに別のPCにMySQLを入れたので
そっちにもデータをコピーしたいんですが
Dataフォルダの中を全部コピるだけでOK?
482NAME IS NULL:2005/10/11(火) 05:06:04 ID:???
【殿様商売】 Oracle、有力オープンソースDBを金の力で潰す
http://news19.2ch.net/test/read.cgi/news/1128967487/
483NAME IS NULL:2005/10/11(火) 09:49:34 ID:/XI8s+SH
InnoDBってdata以下のファイルでコピーして他の環境に持ってゆくと使用中です!とか言われるんだけど、
MySQLをシャットダウンしてからコピーしても駄目なの?
data以下をコピーしてWin <-> Linux間を移動出来る形式ってどれだろう・・・
484NAME IS NULL:2005/10/11(火) 10:13:01 ID:???
485NAME IS NULL:2005/10/11(火) 10:13:17 ID:???
4.1って、復問い合わせとビュー使える?
486NAME IS NULL:2005/10/11(火) 11:34:24 ID:???
>>484
ありがとうございます。
稼動状態であれば有償ツールを使うしかないようですね(--; 高いって。

mysqldumpを利用した場合、mysqldump --single-transaction オプションを付ければ
innoDBもバックアップ出来そうですが、こちらは外部キーを設定しているinnoDBテーブル
の一部でリカバリに失敗する可能性があるらしいですね。

もう少し詳しく調べてみたいと思います。
487NAME IS NULL:2005/10/11(火) 13:51:23 ID:vPBIE0Xh
とりあえずOS非依存でコピペだけでどこに持っていっても動くことで知られているのはMyISAM。
488NAME IS NULL:2005/10/11(火) 13:53:42 ID:???
>>484
副問い合わせは4.1から、viewは5.0からだった希ガス。
489NAME IS NULL:2005/10/11(火) 14:06:23 ID:???
>>488
なるほど。d。
5.0って、まだα版って感じですかね?
490NAME IS NULL:2005/10/11(火) 14:38:44 ID:???
>>489
ver5.0.13がRC(Release Candidate)版だよ。

Stable > RC > beta > alfa
491NAME IS NULL:2005/10/11(火) 14:48:03 ID:???
alfa
492NAME IS NULL:2005/10/11(火) 15:06:09 ID:???
>>490
禿しくd!
493NAME IS NULL:2005/10/11(火) 15:38:06 ID:???
本当の stable は x.1 からだよ
494NAME IS NULL:2005/10/11(火) 16:34:05 ID:vPBIE0Xh
>>493
x.y.zとした場合、xがカウントアップされるのは大幅機能追加、
yも機能追加、zがバグ修正だと思うけど。

ver5.0.13は安定しつつあるけどver5.1.xはまだまだでしょ。
495NAME IS NULL:2005/10/11(火) 18:44:21 ID:0dv9mXs5
すいません。質問させて下さい。

あるテーブルの中の情報を他のホストの同じテーブル構造にinsertしたいと
考えています。そこで、テーブルの中の情報をSQLに落とし込みしたいのですが
可能でしょうか?

some_tableをsame_table.sql にし、違うホストで、source some_table.sql
する。他に良い方法があればアドバイス頂ければ助かります。宜しくお願い
致します。
496NAME IS NULL:2005/10/11(火) 20:23:15 ID:82ho+KsK
MySQL4.1です。

日付データ(YYYY-MM-DD HH:MM:SS)を使って、月毎の行数を知りたいのですが

SELECT count( formatDate ) , formatDate
FROM (
SELECT date_format( date, "%y/%m" ) AS formatdate
FROM `test`
) AS sub
GROUP BY formatDate

よりも、もっとスマートなやり方はないのでしょうか?
497NAME IS NULL:2005/10/11(火) 20:36:49 ID:???
>>496
サブクエリは別にいらないと思う。

SELECT count(*), date_format(date, "%y/%m") AS formatDate
FROM test
GROUP BY formatDate;
498NAME IS NULL:2005/10/11(火) 20:38:41 ID:???
SELECT date_format(formatDate , '%Y-%m') , count(*)
FROM test GROUP BY date_format(formatDate , '%Y-%m')

とか
499496:2005/10/11(火) 20:46:28 ID:???
>>497-498
ありがとうございます。

そうですね、普通にそれで出来ました。しかも早くなって嬉しい限り。
500NAME IS NULL:2005/10/12(水) 07:13:25 ID:???
>>495
ある時点でのデータを別のサーバに持っていきたい場合は、

myisamなら単にテーブル(FRMファイル、MYIファイル、MYDファイル)をコピー&ペースト。
それ以外はとりあえずmysqldumpの使用を検討か。

常時それを行いたいならレプリケーションを使う。
501NAME IS NULL:2005/10/12(水) 16:50:32 ID:Nn1nCqw6
mysql 3.23.58 のデータをmysqldumpで取って4.1.14に入れようと思ったら互換性がないみたいで入らないのですが
何かいい方法ありませんでしょうか?
502NAME IS NULL:2005/10/12(水) 18:18:53 ID:YJf8iZjT
>>501
え???どうなるのよ?
503NAME IS NULL:2005/10/12(水) 22:03:40 ID:???
>>501
mysqldumpのバージョンが3.23系に付属のそれということでは?
4.1系のmysqldumpで3.23のデータをダンプしたものを
4.1にインポートすればたぶん動くとおもう
504NAME IS NULL:2005/10/13(木) 03:08:35 ID:???
>>503
501はMySQL3.23と4.1の仕様の違い、例えばcharの長さの考え方が変わったとか
そんなのを簡単するマイグレーションツールないの?ってことかと思った。
505501:2005/10/13(木) 12:31:16 ID:WBVtPxcB
>>502 /*! 〜 という行が数行流れて止まるのです。
>>503 ってことは現3.23代をバージョンアップしてからってことになるのですね

結局 dumpコマンドとしてでなく sql文として実行してやればなんとかデータを入れたりはすることができました
ありがとうございました。

が又別の問題が発生したのですが
データ元のsql文字コードはlatin1 ここにEUCコードとしてデータを登録して使用しておりdumpしてとったファイルはそのまま
4.1側のsqlに入れようとすると文字化けします。 4.1側の文字コードはujisでshow character set コマンドでみるとEUC-JP と書いているので
あっていると思うのですが何故なんでしょうか?
506NAME IS NULL:2005/10/13(木) 13:39:30 ID:???
質問させてください。
MySQLでユーザ毎に容量制限するにはどうしたらいいでしょうか?
507NAME IS NULL:2005/10/13(木) 14:08:36 ID:???
>>505
その説明だけだと状況がいまいちわからんので一般的なアドバイスのみ。

SQL文としてデータを持っているのなら(INSERT文の列挙)、次のようにやれば文字化けはしないはず。

1. テーブルをujisで作成する。 CREATE TABLE t1 (c1 char(1)) default charset=ujis;
2. SQLを実行するクライアントの文字コードをujisにあわせる。 set names ujis;
3. 流し込み実行。

あと文字化けにもいろんなパターンがあるんだが、どういう文字化けになってる?
半角クエッションマーク"?"に成っているのか、なんともいえないぐちゃぐちゃなやつなのか。

あと文字化けの原因を突き止める上でGeneral Logを見るのは結構重要。
General Logを出すようにServerを設定して(起動オプションに--logをつける等)
まずMySQLサーバに文字化けせずに届いているのか、あるいはその前の時点で化けているのか調べるべし。
508NAME IS NULL:2005/10/13(木) 14:09:25 ID:???
>>506
MySQL自体にはそういう機能はないと思う。
509NAME IS NULL:2005/10/13(木) 23:39:59 ID:???
MySQLでのIndexの張り方について質問です。
特にマルチカラムインデックスについていまいちよくわかってないのですが、

「ID (主キー), 氏名, 都道府県, 市区町村, 住所以下」
という構成のテーブルがあるとして(データ量は1000万件程度)、
都道府県から検索したり、氏名and都道府県の組み合わせで検索したりと、
それぞれのカラムを自由に組み合わせて検索できるようにする場合は
どのようなインデックスの張り方が考えられるでしょうか?

MySQLは一度の検索にひとつのインデックスしか使用しないとのことなので、
複数のwhere条件を組み合わせる場合はマルチカラムインデックスを使用する必要があると
理解しているのですが、すべてのカラムが検索条件になりうる場合は単純に
すべてのカラムをひとつのマルチカラムインデックスに含めれば良いのでしょうか?
510NAME IS NULL:2005/10/13(木) 23:48:45 ID:A31Z9e2F
>>509
もしそれが例えじゃないなら・・・それ以前になんかがおかしくないか???
511509:2005/10/13(木) 23:57:55 ID:???
えっ すいません、恥を忍んで聞きます。
どこがおかしいのかわかりません。
教えてください。
512NAME IS NULL:2005/10/14(金) 03:13:54 ID:???
>>509
「いまいち良く分かっていない」ということなのでとりあえずここ読め。
ttp://dev.mysql.com/doc/refman/4.1/ja/mysql-indexes.html
513NAME IS NULL:2005/10/14(金) 04:53:37 ID:???
>>509
とりあえず・・・

> 複数のwhere条件を組み合わせる場合はマルチカラムインデックスを使用する
> 必要があると理解しているのですが、

これ、違うと思う。インデックスなしで検索はできるでしょ?
514509:2005/10/14(金) 12:17:01 ID:???
>>512

>mysql> SELECT * FROM tbl_name WHERE col1=val1 AND col2=val2;
>col1 と col2 に複合インデックスが存在する場合、対応するレコードを直接読み取れます。

これを「col1とcol2が検索条件のときにそれらを含むマルチカラムインデックスがあればベスト」と読んだのは間違い??
すなわち「複数のwhere条件を組み合わせる場合はマルチカラムインデックスを」と理解してたんですが・・・。

>>513
インデックスなしで検索って・・・?
説明が足りなかったけど、少しでも負荷を減らしたいとおもってて。
現実にインデックスなしで1000万件のテーブルに検索かけることって無いですよね。
515NAME IS NULL:2005/10/14(金) 12:29:14 ID:???
col1 だけの索引で十分に絞り込めるならマルチにする必要は無い。
col1+col2 の索引がある場合に col2 だけが検索条件の場合は索引は使われない。
氏名, 都道府県, 市区町村, 住所をいろいろな組み合わせで検索したいということなら
それぞれで単一の索引を作ったほうがまだ実用的。
516509:2005/10/14(金) 12:48:02 ID:???
>>515
なるほど、とてもわかりやすい。どうもありがとう。
517NAME IS NULL:2005/10/14(金) 22:50:14 ID:???
>>515

MySQL でマルチカラムのインデックスを作ったことはあるのかな。

col1+col2 のインデックスを作ろうとしても、
col1, col2 のそれぞれを検索するものも作られるよ。

この例だと3つ作られるわけだが、実際にどれが使われるのかは場合によるみたい。
ヒントをうまく与えられるといいんだけど、MySQL にはないらしい。
518NAME IS NULL:2005/10/15(土) 00:15:38 ID:???
>>517
マルチカラムのインデックスというのはマニュアルの「複合インデックス」とは別に何かあるの?
ttp://dev.mysql.com/doc/refman/4.1/ja/multiple-column-indexes.html
519517:2005/10/15(土) 00:36:38 ID:???
>>518

それは同じ。

ただ、>>517 のはちょっと間違って覚えていたよ。

col1+col2 の複合インデックスで作ったときは、
col1 もしくは col1+col2 のときにINDEXが使われる。
col2 に対しての検索には使われない。

逆順に、col2+col1 という複合インデックスも同時に作れる。
このときは、col2 もしくは col2+col1 という検索になるね。

>>509 のようにどれでも検索したいというときは、
順番を入れ替えて作った複合インデックスをいくつか作る
ということになりそうだけど、何か変だとは思う。
郵便番号とか(ある意味インデックスだね)を入れて簡単にしたほうがいいような。
520509:2005/10/15(土) 04:05:13 ID:???
>>519
そーか、郵便番号使えば大量にインデックス張らなくて済む話ですよね。
>>510 や >>513 が言ってたのもこのことか。そもそもMySQL関係ない話だった。。
けど勉強になりました、どうもありがとう。
521NAME IS NULL:2005/10/15(土) 17:01:11 ID:???
MySQL 5、11月にプロダクション・リリースへ
http://traiss.tabesugi.net:8080/slashdot/a0566da168040a89df61a901677e5bc9?edit=0
522NAME IS NULL:2005/10/17(月) 07:25:15 ID:???
初歩的な質問ですいません
IDを10桁で、文字列型ではなく、整数型で、
0から始まる番号で表示するにはテーブルはどう設定したらいいのでしょう?

100→0000000100

計算式が必要なので文字列型は使えないんです。
どうぐぐってもわからなかったので、お願いします。
523NAME IS NULL:2005/10/17(月) 07:50:24 ID:???
zerofill
524NAME IS NULL:2005/10/17(月) 07:59:07 ID:???
>>523
うわ〜
あれだけ悩んだのにあっさりできました。
ありがとうございました。
525NAME IS NULL:2005/10/17(月) 22:33:33 ID:???
DATE型で年月日入っているカラムから年と月で検索をかける方法がわかりません・・・orz
MySQLだとto_dateとかって使えないんでしょうか?
526NAME IS NULL:2005/10/18(火) 01:00:05 ID:Bivs9YNM
>>525
date_format
527NAME IS NULL:2005/10/18(火) 02:47:58 ID:???
>>523>>526も一言でバサッと解決カコイイ
528NAME IS NULL:2005/10/18(火) 06:16:56 ID:M02ZUYqC
オプチマイザによるキーの決定は、
テーブル全体の行数も判断材料になってるのでしょうか?
それとも行数の少ない時に選ばれるキーが、
行数が増えても使用されるのでしょうか?
529NAME IS NULL:2005/10/18(火) 07:57:24 ID:???
>>525
検索対象のフィールドに関数を使うのは避けるべきで、
例えば2005年10月で検索したいなら範囲条件で問い合わせるのが常套。
where xxx >= '2005-10-01' and xxx < '2005-11-01'
530NAME IS NULL:2005/10/18(火) 19:02:21 ID:PGtIQnsH
質問です。
MySQL4.0.21で、datetime型のカラムのデフォルト値に、現在日時を指定することは
可能なのでしょうか?もし可能なら、どう書けばよいでしょうか?

columname NOT NULL DEFAULT current_timestamp と書こうとしてエラーになり、
http://dev.mysql.com/doc/refman/4.1/ja/create-table.html
「DEFAULT 値は定数でなければならず、関数や式を使用することはできない」
という記述を見つけて、困っております。
531530:2005/10/18(火) 19:24:37 ID:???
補足です。
そのカラムに、できればTIMESTAMP型は使いたくありません。
なぜなら、先の、登録日時を保持するカラムとは別に、更新日時を保持する
カラムを TIMESTAMP 型で持ちたいからです。
532NAME IS NULL:2005/10/18(火) 20:28:33 ID:???
>>531
INSERT の時にnow()じゃダメなのか?
533530:2005/10/18(火) 21:16:53 ID:???
>>532
現在はそれでやっておりますが、それを忘れるプログラマがおりますので、
カラムにデフォルト値を指定したいのです。

テーブル設計をしっかりやることで、プログラマのミスを回避したいと
考えております。
534NAME IS NULL:2005/10/18(火) 22:43:33 ID:???
>>533
O/Rマッピングしてないの?
535530:2005/10/18(火) 22:56:18 ID:???
>>534
独自のフレームワークによってORマッピングは行っておりますが、手作業で
INSERT文、UPDATE文を書かなければならない場合もあります。
なお、このフレームワーク以外を使うことは、今のところできません。
536NAME IS NULL:2005/10/19(水) 04:44:30 ID:???
MySQLの商用ライセンス版のパッケージが出たらしい。
http://www.s-style.co.jp/company/infomation/2005101701.html
店頭で買えないのかね。ヨドバシでポイントが溜まるなら買っときたいんだが。
537NAME IS NULL:2005/10/19(水) 12:17:04 ID:???
>>536
http://itpro.nikkeibp.co.jp/article/NEWS/20051018/223019/
ITProでは店頭販売と出てるんで、売ってるんじゃない?
ヨドバシに売ってるかは知らんが
538NAME IS NULL:2005/10/19(水) 13:00:14 ID:???
>>537
最初そっちみて販元の情報確認したらパッケージ版なんだけど
ソフト流通系に乗らないで、直販のみみたいなんだよね。

ところでfreeの方(ML)でも書かれてたが、
>CD-Rを読み込める環境
売る気(売れる気)ナンシングですか(w
まあパッケージはバージョン依存しないが、
メディアはバージョン依存するから、出荷時出来るだけ最新のものを
ということではあろうが、マスター制作費&スタンプコストも下がってるし
ROMでやるべきだと思うのだが。
539NAME IS NULL:2005/10/19(水) 13:45:08 ID:HDkB7SHq
商売で使っているわけではないので、ライセンスを買ったことは無いのですが・・・・
やはりMySQL6が出たときには、ライセンスを買いなおさないといけないのでしょうか?
540539:2005/10/19(水) 13:46:22 ID:HDkB7SHq
ごめんなさい、訳のわからないことを書いてしまいました。

いつか使うかも知れないので、17800円の安いライセンスを買ってほったらかしておこうと思うのですが、
やはりMySQL6が出たときには、ライセンスを買いなおさないといけないのでしょうか?
541NAME IS NULL:2005/10/19(水) 14:48:58 ID:???
>>540
MySQLは知らないけど、普通はメジャーバージョンアップで買い直しじゃない?
商用ライセンスに永久ライセンスみたいなの付けるなんてあんま意味ないし。
どっちにしても、必要な時に買えば?
542NAME IS NULL:2005/10/19(水) 15:09:26 ID:kLd0WyTB
お願いいたします。
結構調べたのですが、見つからず、、、

今DBが一個ありまして、その中に、テーブルが10個ほど入っております。
いいままでのデータが、SJISで入力されており、それを、EUCに変更したいのですが、
 コマンド一回で一気に変換するようなコマンドありませんでしょうか?
543NAME IS NULL:2005/10/19(水) 16:50:02 ID:???
nkf
544NAME IS NULL:2005/10/19(水) 19:38:15 ID:???
>>539
MySQL3→MySQL4の話で言えば、ライセンスは持ち越し。
(InnoDBかBDBの使用料を含むか含まないかの区別しかない)
ライセンス料は特に値上げしてないから必要な時に買えば良いと思うよ。

でも
>17800円の安いライセンス
って多分Navicat2005単体のライセンスと勘違いしてる。
良いソフトだけど正直高いので、MySQLとパックになってる記念パッケージが
今回のお買い得かな。でも商用ライセンス不要ならお買い得にはならんしね。
545NAME IS NULL:2005/10/20(木) 01:22:55 ID:k19Aufr4
YYYYMM形式の年月の文字列の項目を検索項目とした場合
ある期間の範囲のデータを抽出するのに
単純に>や<を使うやり方は駄目なんですかね?
546NAME IS NULL:2005/10/20(木) 02:16:27 ID:???
訊く前にやってみるんだな
547NAME IS NULL:2005/10/22(土) 11:13:49 ID:???
4.1.15
548NAME IS NULL:2005/10/22(土) 18:17:25 ID:???
on duplicate key updateについて教えて下せぇ。
MySQL 4.1.12 + Excel2002でVBAからシートにあるデータをインサート
しようとしています(insertは正常に出来る事を確認しています)
テーブルは
mcode int(9) unsigned not null,
mkt int(2) unsigned not null,
is_kbn int(2) unsigned not null,
mg_name varchar(40) not null,
t_unit int(9),
primary key (mcode)

With unionjouhou(idx)
strSQL = ""
strSQL = strSQL & "insert into meigara ("
strSQL = strSQL & " mcode "
strSQL = strSQL & ", mkt "
strSQL = strSQL & ", is_kbn "
strSQL = strSQL & ", mg_name "
strSQL = strSQL & ", t_unit "
strSQL = strSQL & " ) "
strSQL = strSQL & " values "
strSQL = strSQL & " ( " & .strMCode
strSQL = strSQL & " , " & .strmkt
strSQL = strSQL & " , " & .stris_kbn
strSQL = strSQL & " , '" & .strmg_name & "'"
strSQL = strSQL & " , " & .strt_unit
strSQL = strSQL & " ) on duplicate key update "
strSQL = strSQL & " mkt = " & .strmkt
strSQL = strSQL & ", is_kbn = " & .stris_kbn
strSQL = strSQL & ", mg_name = " & .strmg_name
strSQL = strSQL & ", t_unit = " & .strt_unit
End With

それでon duplicate key updateをつけて上のコードを流したところ、
実行時エラー 214721900(80040e14)'
Unknown column 文字化け in 'field list'
と言うメッセージが出てしまいます。文字化けの部分はmg_name
みたいなんですけど、どう直せばいいんでしょうかね。
よろしくお願いしますm(__)m。
549NAME IS NULL:2005/10/22(土) 19:55:59 ID:???
自己解決しました。お騒がせスマソ

strSQL = strSQL & ", mg_name = '" & .strmg_name & "'"
と日本語の部分をくくったら正常にon duplicate key update
で更新できました。
550NAME IS NULL:2005/10/22(土) 22:23:57 ID:???
MYSQL ADMINを使っていますが質問をさせてください(NTTスマートスクウェア)

鯖側はEUCでクライアント環境はSJISですが、
データをDBに挿入する際にSJIS変換をしても
特定のデータだけ一部文字化けをしてしまいます

こういった場合どのような解決方法がありますか?
よろしければ教えてください。
551NAME IS NULL:2005/10/22(土) 23:42:01 ID:???
>>550
MYSQL ADMIN → phpMyAdminのことだよな?こういうことは正確に…
以下を書いた方がいいと思う。
・MySQLのバージョン
・化ける文字
・データの挿入方法(phpMyAdminから行うにしてもSQL、手入力、ファイルからインポート等がある)
・どのように文字化けを確認したのか(phpMyAdmin or 何かのアプリ etc)

とりあえずあやふやな状態でのエスパー回答になってしまうけど
データをファイルに作成してEUCで保存、保存したファイルをphpMyAdminでファイルを
インポートすればいける鴨。
後、phpMyAdminはUTF8固定で動作するのでクライアント環境がSJISうんぬんは
忘れた方がいいと思われ。
552551:2005/10/22(土) 23:46:01 ID:???
書き忘れ。
例えば "" なんかの文字はEUCのデータベースに正しく書き込まれていても
phpMyAdminで表示すると "?" になるので注意
553550:2005/10/23(日) 00:18:01 ID:???
>>551さん
断片的な情報ですみません
PHP MYADMINでしたorz

mysqlのバージョンは3.23.58
化ける文字は ガリクソン という単語の"ソン"ですね
データ挿入方法はSQLフォームからの手打ちです。

確認方法はブラウザです。他のデータは正常なのですが…

他のデータもブラウザで表示させたときは正常なのですが
phpMyAdminの中で確認する限りは殆どのデータが文字化けしています・・・

554NAME IS NULL:2005/10/23(日) 06:59:15 ID:L1Evw2iW
Warning: mysql_connect() [function.mysql-connect]: Access denied
for user: 'ppp@localhost' (Using password: YES)
in /virtual/xxx/public_html/mymysql.php on line 13
Access denied for user: 'ppp@localhost' (Using password: YES)
555NAME IS NULL:2005/10/23(日) 07:00:09 ID:L1Evw2iW
上記エラーの対策をおながいします。
556NAME IS NULL:2005/10/23(日) 09:30:10 ID:???
>>555
・英語を勉強する。または技術担当者を英語が読める者に切り換える。
・マニュアルを読む。またはドキュメントが読める技術担当者に切り換える。
557NAME IS NULL:2005/10/23(日) 09:41:34 ID:L1Evw2iW
そういうの役に立たん。別の人にパイプ 554|
558NAME IS NULL:2005/10/23(日) 10:05:11 ID:???
>>557
localhostから接続できるようにすれば直る気がする。
559NAME IS NULL:2005/10/23(日) 10:06:10 ID:L1Evw2iW
localhostからはphpでは試していませんがコンソールからなら
普通にいじれました。
560NAME IS NULL:2005/10/23(日) 10:16:48 ID:L1Evw2iW
今Linux自身でhttp://localhost/aaa/test.phpにアクセスしたけど
同じエラーでした。
561NAME IS NULL:2005/10/23(日) 10:38:29 ID:???
>>559
localhostからphpで試せば同じようなエラーが出る気がする。
562NAME IS NULL:2005/10/23(日) 10:45:52 ID:???
コンソールからの操作時、パラメータでユーザーpppを指定して
正常に接続できたんだろうか…
563NAME IS NULL:2005/10/23(日) 10:47:28 ID:L1Evw2iW
Linux再起動したら状況が変わりました。
Linuxのコンソールから
#mysql -u aaa -p
アクセス ディナイ フォー ユーザ aaa@localhost (ユージングパス YES)
になりました。

既出エラーのClient does not support authentication protocol....が
出てから、aaaのパスワードをold_passwordにしたのが関係しているかもしれません
564NAME IS NULL:2005/10/23(日) 10:48:18 ID:???
>>562
するどい
565NAME IS NULL:2005/10/23(日) 10:52:43 ID:???
既出エラーのClient does not support authenticationって書いてるけど
全然既出じゃないでしょ。ユーザーaaaもここで初めて出てきたし。
もう、一人で勝手にすれば?
566NAME IS NULL:2005/10/23(日) 10:53:39 ID:???
パスワードを空にしたらWinのブラウザのPHPで接続できました。
567NAME IS NULL:2005/10/23(日) 10:55:54 ID:???
>>565
そういそ文章はつまらん。
既出http://dev.mysql.com/doc/refman/4.1/ja/old-client.html
568NAME IS NULL:2005/10/23(日) 11:02:55 ID:???
でまた4.1タイプのロングパスワードを設定したら既出エラーの
Client does not support authenticationが出ました。
この状態ならLinuxの#mysql -u aaa -pでログインできます。
569NAME IS NULL:2005/10/23(日) 11:58:37 ID:???
>>568
つまり解決したんだね
おめでとう
570NAME IS NULL:2005/10/23(日) 12:57:04 ID:???
hogeDBの中にhoge1,hoge2とテーブルがあって
hoge1には
id name hogehoge hogehoge2
1 hoge あいう   かきく
2 aiu  かきく   さしす
3 kaka ほげげ  あばば

hoge2には
id name hogehoge3
1 hoge 05/01/01
2 aiu
3 hoge 05/02/02
4 hoge 05/02/03

571570:2005/10/23(日) 13:09:35 ID:???
途中で飛んじゃった(´・ω・`)

hogeDBの中にhoge1,hoge2とテーブルがあって
hoge1には
id name hogehoge hogehoge2
1 hoge あいう   かきく
2 aiu  かきく   さしす
3 kaka ほげげ  あばば

hoge2には
id name hogehoge3 hoge4
1 hoge 05/01/01 あいうえお
2 aiu  05/01/01 かきくけこ
3 hoge 05/02/02 さしすせそ
4 hoge 05/02/03 たちつてと
5 kaka 05/02/03 なにぬねの

こんな感じなってて
hoge1テーブルにhoge2のnameが同じ物をくっつけて
且つhogehoge3の最新の物だけをくっつける場合どうすればいいのでしょうか?
SELECT * FROM hoge1 INNER JOIN hoge2 ON hoge1.name=hoge2.name
これをすればくっつける事はできるのですが
hogehoge3の値が最新の物意外もくっついてしまいます(´・ω・`)
572NAME IS NULL:2005/10/23(日) 17:52:34 ID:???
MySQLで全角のデータ入れたら文字化けした
どうしたらなおるですか?
573NAME IS NULL:2005/10/23(日) 19:13:39 ID:???
OSが何とかどういう状況でとか一切書かずにそんな事言われてもどうなの?と言いたいけど
OS: WinXP MySQL 4.1.11
で接続時の文字列に
 STMT=SET CHARACTER SET SJIS
を追加したら俺の場合は文字化けはしなくなった。

574NAME IS NULL:2005/10/23(日) 19:30:05 ID:???
そういえばIDEとかでMysqlを利用出来るものがありますが
今の所大抵は送信側のエンコードが固定なためにクエリ上の日本語が???化しますよね

自分の場合Mysql4.1上ではUTF8で統一して
スクリプトから上ではクエリ毎にUTF8⇔EUCの変換をやってるんですが
こういう環境でIDE(EUC-JP)からの接続時だけEUCで受け入れるようにしたり
出来ないもんでしょうか

特定のユーザとの接続時だけ文字セット変える設定とか・・・
575NAME IS NULL:2005/10/23(日) 19:31:50 ID:???
補足。。574は全て4.1上での話です
576NAME IS NULL:2005/10/23(日) 19:48:34 ID:i27SxMcs
PHPからEUCで入力されたのをencodingでSJISへ変換はしてるんですけど
コマンドラインで確認すると文字化けしてる (´・ω・`)ショボーン
何故? Windowsのlocalhostでの問題です
初心者の質問に誰か救いの手を
577NAME IS NULL:2005/10/23(日) 20:11:47 ID:???
578NAME IS NULL:2005/10/24(月) 02:08:35 ID:???
InnoDBって、なんか壊れやすくね?
1千万レコードほど(ダンプサイズで700MBちょっと)入れたら、まともに取り込めない。
小分けにしても駄目だった。

なんか他に大量レコードに適した形式とか有るだろうか?
579NAME IS NULL:2005/10/24(月) 19:29:39 ID:???
Oracleのdesc(条件分岐)に代わるような処理ってありますか?
580NAME IS NULL:2005/10/24(月) 22:50:23 ID:???
テーブルによってテーブルファイルを保存する場所を変更することはできますか?

/var/db/mysql/DB名/テーブル名.XXX
って感じになると思うのですが、
/var/db/mysql/DB名/YYY/テーブル名.XXX
としたいのですが・・・。
581NAME IS NULL:2005/10/25(火) 01:04:35 ID:???
>>580
シンボリックリンク
582NAME IS NULL:2005/10/25(火) 02:04:48 ID:uyrWOZ4l
5.0.15正式リリース。
どうなの?
583NAME IS NULL:2005/10/25(火) 02:42:06 ID:???
>>582
内容的にはRCと変わってないんジャマイカ。
584NAME IS NULL:2005/10/25(火) 02:44:17 ID:???
そうそう、漏れ勘違いしてたんだけど5.0でViewとかSPとか追加されてMySQL遅くなったんだと思ってたら
実はver4.1よりもver5.0のほうが速いらしいね。
585NAME IS NULL:2005/10/25(火) 08:54:50 ID:iy8JxhV4
>>576
ついでに、DB接続時に

$result=mysql_query("SET NAMES キャラクターセット");

ってするともっと幸せになれると思うよ。
586NAME IS NULL:2005/10/25(火) 16:43:16 ID:???
>>576
俺もよく分かってないが、PHP+MySQLで日本語のレコードが化けてたけど
MySQL側をUTF-8、PHPのmbstringをhttp.output = passで化けなくなった
587NAME IS NULL:2005/10/25(火) 22:06:50 ID:???
mysql -u root -p
Enter password: ****
をやったのですが結果が
ERROR 1045: Access denied for user: 'root@localhost' (Using password: YES)
と出て中に入ることができません
いったいどうすればいいのでしょうか?
588NAME IS NULL:2005/10/25(火) 22:34:44 ID:???
>>587
元々rootユーザーで正常に接続できていたのかな…
疑うわけではないが、良からぬ事をしようとしているのを
フォローしてしまうとアレなのでヒントだけ。
"mysql skip-grant-tables" 辺りでググッくださいまし。
589587:2005/10/25(火) 23:20:46 ID:???
>>588さん
検索していろいろ見てきた結果、解決しました。
本当にありがとうございました。
590NAME IS NULL:2005/10/26(水) 17:52:11 ID:???
ものスゴイ嫌がらせ思いついた
1 :以下、名無しにかわりましてVIPがお送りします :2005/04/25(月) 04:44:27 ID:cxwJSDGr0
例えばさ、ID非表示の板で質問したやつがいるとするじゃん?
で、その答えがくる前に名前欄にそいつのレス番入れて
「すみません、自己解決しました」って入れるんだよ
マジコレはハマるwwwwwww
591NAME IS NULL:2005/10/26(水) 18:36:04 ID:???
そのレスしたやつに自分で「類似のトラップにひっかかる奴もいるかもしれな
いからちゃんと説明しる」とかツッコミ入れたらいいんじゃね。
よっぽど過疎化したスレ以外は、ほかの親切なやつが答えてくれるだろう。
592NAME IS NULL:2005/10/26(水) 18:42:42 ID:???
まずは答えたくなる質問をすべきだな。
593592:2005/10/26(水) 18:53:16 ID:???
すみません、自己解決しました
594592:2005/10/26(水) 19:04:13 ID:3DVzptjP
>>592
お前俺じゃねーよ

ちゃんと説明汁!
595592:2005/10/26(水) 19:15:49 ID:???
すみません、自己解決しました
596NAME IS NULL:2005/10/26(水) 19:56:47 ID:???
誰が本当の592なのか、見分ける方法を教えてください。
597NAME IS NULL:2005/10/26(水) 20:29:43 ID:???
>>596

本当の592は>>592のみ
598596:2005/10/26(水) 20:30:53 ID:???
すみません、自己解決しました
599NAME IS NULL:2005/10/26(水) 20:45:16 ID:???
InnobaseってOracleに買収されたんだね。

 InnobaseとMySQLは来年契約の更改を控えており,
米OracleはMySQL社との契約を継続する意向という。
MySQL社は今回の買収を歓迎するという声明を出したものの,
関係者によればMySQL社内でOracleの今後の出方に対する警戒も高まっているという。

だって。InnoDBが使えなくなることも考えられる?
オラクルウゼー
600NAME IS NULL:2005/10/26(水) 20:48:08 ID:???
>>599
何時の話を持ってくるんだ…
601599:2005/10/26(水) 21:02:08 ID:???
すみません、自己解決しました
602NAME IS NULL:2005/10/26(水) 22:38:38 ID:???
すみません、事故りました
603NAME IS NULL:2005/10/26(水) 22:55:18 ID:???
5.0.15になりましたね。
ところで、SQLでバージョンを知るにはどうすればよいのでしょうか。
SELECT なんとか FROM かんとか
でVerをとるようなことっってできないのでしょうか。
604NAME IS NULL:2005/10/26(水) 22:56:47 ID:???
>>603
select version();
605NAME IS NULL:2005/10/26(水) 23:02:37 ID:???
>>604
どうもです!!
606NAME IS NULL:2005/10/26(水) 23:34:56 ID:???
以下の4人が何かを試した回数と成功(成功回数)した回数を記録しました。
回数と成功の数値は随時更新されるので、成功率は実際にはデータとして入力せずに

select 名前,回数,成功,回数/成功 as 成功率 from 結果テーブル order by 成功率
というクエリでその都度出して成功率でソートしてます。

結果テーブル
名前|回数|成功|成功率%|順位
山田| 12| 12|  100|1
田中|  4|  3|  75 |2
伊藤| 100| 20|  20 |3
西村| 80|  8|  10 |4

で、順位ですが、単に成功率でソートした場合に順位をつけるのはループ回した回数そのものなので簡単なんですが、これを

select 名前,回数,成功,回数/成功 as 成功率 from 結果テーブル order by 回数
と言う感じで、成功でソートしつつも、順位カラムには成功率での順位を表示させたい、

名前|回数|成功|成功率%|順位
伊藤| 100| 20|  20 |3
山田| 12| 12|  100|1
西村| 80|  8|  10 |4
田中|  4|  3|  75 |2

ときにうまい方法は無いでしょうか?
あくまでDBに入力するのは、名前、回数、成功(成功回数)
回数と成功は随時更新されるので、それによって、成功率が変わると同時に順位(成功率の)も動的に変わりますのでそこをなんとかうまくやりたいんです。
607NAME IS NULL:2005/10/26(水) 23:45:52 ID:3rNqv6NN
現在、基本表の数が50ほどのシステムを制作するのに
MySQLかACCESSのどちらが良いのか悩んでいます。
プログラムはVisualC#.NETを用いて記述する予定です。
どちらの方がコーディング時・DB操作などにおいて
便利でしょうか。アドバイスお願いします。
608NAME IS NULL:2005/10/26(水) 23:54:33 ID:???
>>606
AUTO_INCREMENTカラムを持ったテンポラリテーブルを使用してみては?

CREATE TEMPORARY TABLE WORK(
 名前 VARCHAR(XX),回数 INT,成功 INT, 成功率 INT, 順位 INT AUTO_INCREMENT NOT NULL PRIMARY KEY);

INSERT INTO WORK(名前,回数,成功,成功率)
 SELECT 名前,回数,成功,回数/成功*100 AS 成功率 FROM 結果テーブル ORDER BY 成功率 DESC;

SELECT * FROM WORK ORDER BY 成功 DESC;
609NAME IS NULL:2005/10/27(木) 00:16:08 ID:???
>>603
status
610NAME IS NULL:2005/10/27(木) 00:30:08 ID:???
>>607
ADOで接続するのならコーティングの手間は変わらないんじゃないかな?
双方のSQLの独自関数を理解、解消すれば大丈夫かと。
DB操作は当人の慣れ次第だし、MySQLにしてもODBC接続でAccessからデータの操作はできるしね。
選択基準としては
・複数のクライアントから接続するなら MySQL > Access
・配布の手間が楽なのは MySQL < Access
・MySQLは使用方法によってはフリーではない
辺りではなかろうか?
DBサーバーがWindows固定ならMSDEという方向性もあると思うよ。
MySQLのスレでなんだけど、漏れは
・スタンドアロンならAccess
・C/Sなら規模によってPostgresかMSDE
を使うことが多いかな。
611606:2005/10/27(木) 00:51:20 ID:???
>>608
うわ、なんかいきなり難しそうなことに。
例はかなり簡単に書いたんですが、もっと件数が多くてページングの処理とかも入ってます。漏れの手に負えるかどうか・・・・頑張ってみます。
回数、成功のデータ更新時に、成功率を実データとしてinsertしちゃうってほうが手軽ですかね。
612607:2005/10/27(木) 09:59:59 ID:???
ありがとうございます。

複数クライアントでの使用や配布などは
一応想定はしていますが、これは卒業研究として作成するものなので、
実際は途中まで実装して終了になると思います。

コーディングの際の手間が同じレベルなら
レコードの追加などの表操作がより簡単に行えるACCESS
の方を選択したいと思います。
613NAME IS NULL:2005/10/27(木) 20:11:13 ID:EyBRBt/B
Unix系OSでmysqlの負荷状態を詳細に調べる方法ってないでしょうか?
topやpsではmysql全体の負荷しか分からないので、困っています。
mysqlをユーザ単位の動作権限で動かせればいいのですが、
少数でない場合、その数のmysqlをインスコするのは現実的に厳しいのです。
614NAME IS NULL:2005/10/27(木) 21:02:42 ID:???
>>613
>>1
mytop
615NAME IS NULL:2005/10/27(木) 21:19:08 ID:???
>>613
求めているものが全然判らん。
mytopでカバーできるものじゃないの?
616NAME IS NULL:2005/10/27(木) 21:36:37 ID:???
--with-charset=ujisでコンパイルしてなかったlatin1な環境で
EUC前提のスクリプトを運用しちゃってました。
これをujis環境に変更して、データも正しく持ち越したいのですが
うまくいかないので困ってます。バージョンは4.1.15で、FreBSD4.11です。

mysqldumpして、ujis環境ででDB作り直してリストアすればよいと考え、
やってみたら文字化けしてました。

mysqldumpが、中身はEUCのものを
latin1からutf8への変換をして出力しているようです。
元のDBがlatin1だから当然の挙動だとは思うのですが、
この変換を無効にする方法は無いでしょうか。
無変換の状態で取り出してやればそのままEUCのダンプデータになると思うので。

あと、逆変換すればいいやとおもって、
lv -Iu8 -Ol1 で変換したところ、ほぼうまく戻ったように見せて
やはり一部文字化けしているようでした。
617NAME IS NULL:2005/10/27(木) 21:37:15 ID:gBSh0AKt
ageわすれた。
618NAME IS NULL:2005/10/27(木) 21:44:51 ID:???
>>616
ちょっと試せる環境がないのでスマソだがmysqldumpに
--default-character-set=ujis オプションを付けてみるとどうだろう?
ひょっとしたら --default-character-set=binary の方がいいかもしれんが。
619NAME IS NULL:2005/10/27(木) 22:08:16 ID:???
>>616
mysqldump の仕様変更の弊害(文字化け)
http://www.mysql.gr.jp/frame/modules/bwiki/?FAQ#content_1_45
620NAME IS NULL:2005/10/28(金) 10:37:37 ID:???
ver5ぜんぜん話題にならないなー
621NAME IS NULL:2005/10/28(金) 13:22:38 ID:???
ベンチマーク対決! MySQL 4.1.15 vs 5.0.15 どっちが速い?
http://www.drk7.jp/MT/archives/000941.html
622NAME IS NULL:2005/10/28(金) 13:31:19 ID:???
5終わってるのかよw
623NAME IS NULL:2005/10/28(金) 13:38:07 ID:???
>>621
へぇ〜、そうなんだ。 ストアドが使えるのが5から? これが使いたくて
総合性能に興味合ったんだけど、全体性能はやっぱまだとりあえず動く
初期バージョンって感じですね。まだ導入は見送ろうかな。
624NAME IS NULL:2005/10/28(金) 13:48:54 ID:???
MLの情報によると、innodb_thread_concurrency のデフォルト値が
変わった事が原因だそうだ。
デフォルトの20から、元の8に戻すとそれなりの性能が出る模様。
ちゅうワケで興味ある椰子はさっさと導入してレポよろ。
625 :2005/10/28(金) 19:37:50 ID:pY4Joffh
PHPとmySQLの組み合わせの本はおおいけど
JSPとMYSQLの本は少ない気がする。なにかいいのないですか。
626NAME IS NULL:2005/10/28(金) 20:23:39 ID:???
pythonがいいと思う
627NAME IS NULL:2005/10/28(金) 20:59:53 ID:???
>>621
同じ構文を走らせた時に、5系の方が微妙に速い という噂を聞いたんだが、
現状では、「5の機能を使わないなら4.1最強」ってことなんだな。

MySQLが激しく苦手なランキング処理が解消できるなら5系の選択肢もありえるかもしれないけど。
628NAME IS NULL:2005/10/28(金) 21:00:30 ID:???
>>621 うちらもこれじゃ5.1まで待ちだなす。
んでもって、またmultibyte char実装が
変更してごたついたりでもしたら、今度
こそpostgresに逝ってまうでゴルァ。
629616:2005/10/28(金) 21:41:23 ID:???
>>618,619
ありがとうございます。

mysqldump --default-character-set=binary database
で取り出して
テーブルのcharset部を s/latin1/ujis/g してリストアしたらうまくいきました。
630NAME IS NULL:2005/10/28(金) 22:16:31 ID:???
>>621
現実逃避モードなのでウチでもやってみた。共にInnoDBでmy.iniはデフォルトのまま。
う〜む、4.1.15 < 5.0.15 になってしまった…。

4.1.15
 transaction type . . . : TPC-B (sort of)
 scaling factor . . . : 1
 number of clients . . : 10
 number of transactions per client : 100
 number of transactions actually processed : 1000/1000
 tps ( include connections establishing) : 131.599518
 tps ( exclude connections establishing) : 131.732312


5.0.15
 transaction type . . . : TPC-B (sort of)
 scaling factor . . . : 1
 number of clients . . : 10
 number of transactions per client : 100
 number of transactions actually processed : 1000/1000
 tps ( include connections establishing) : 332.911867
 tps ( exclude connections establishing) : 333.817146
631NAME IS NULL:2005/10/28(金) 23:15:53 ID:???
うちでもやってみようかな
632NAME IS NULL:2005/10/28(金) 23:25:45 ID:???
>>630
CPU(モデル、クロック、L2キャッシュ容量)
HDD(モデル、型番)
メモリ容量
OS

以上項目ぷりーず
何か条件があるはず・・・・
633606:2005/10/29(土) 00:41:08 ID:???
>>608
ちょっとアフォなことを考えてみますた。
ループ回しながら、自分(ある一つのレコード)の成功率より、成功率が高いレコードの数を数えれば、そのときの自分の順位が出せますね。
ループの中で1レコード毎にクエリ出すことになるけど。
まだ試してないのでうまくいくかわからないし、バカっぽいけど、やってみます。
634630:2005/10/29(土) 09:14:38 ID:???
>>632
サーバー
 CPU Pentium4 2.4C(2.4GHz, L2 512KB)
 HDD IBM IC35L040AVER07-0(40GB, 7200rpm, EIDE)
 MEM 512MB
 OS WindowsXP SP2

ベンチクライアント
 CPU Pentium4 520(2.8GHz, L2 1MB)
 HDD SEAGATE ST380013AS(80GB, 7200rpm, SATA)
 MEM 512MB
 OS Solaris10

MySQL ServerはMySQL ABからダウンロードしたWindows版バイナリを使用。
ベンチはmysqlbenchは自前コンパイル。
635630:2005/10/29(土) 09:16:02 ID:???
続き。
ついでだからサーバー、ベンチクライアント共に同じマシンで動作させた時の結果も貼り付けておくね。

サーバー、ベンチクライアント
 CPU Pentium4 520(2.8GHz, L2 1MB)
 HDD SEAGATE ST380013AS(80GB, 7200rpm, SATA)
 MEM 512MB
 OS Solaris10

MySQL ServerはMySQL ABからダウンロードしたSolaris10版バイナリを使用。
ベンチはmysqlbenchを自前コンパイル。

4.1.15
 transaction type . . . : TPC-B (sort of)
 scaling factor . . . : 1
 number of clients . . : 10
 number of transactions per client : 100
 number of transactions actually processed : 1000/1000
 tps ( include connections establishing) : 542.650719
 tps ( exclude connections establishing) : 544.134179

5.0.15
 transaction type . . . : TPC-B (sort of)
 scaling factor . . . : 1
 number of clients . . : 10
 number of transactions per client : 100
 number of transactions actually processed : 1000/1000
 tps ( include connections establishing) : 895.553398
 tps ( exclude connections establishing) : 900.518789
636630:2005/10/29(土) 09:28:17 ID:???
あっと、念のため >>635 の結果は、>>630 からの流れなので
テーブルタイプ InnoDB、クライアント数 10、トランザクション数 100で
my.iniはデフォルトのままで行った結果ね。
637NAME IS NULL:2005/10/29(土) 09:56:01 ID:???
うちもまぜてくれぃ。といっても、MySQL 5は、なんか
おっかないんでまだインス子してないから、
4.1 でのmyisamとinnodbの比較だけよん。

鯖:Linux kernel 2.6.14
P4 1.8GHz
cache256kB
memory 1GB
HDS724040KLAT80 (HGST 400GB U100 7200, uATA/100)
クライアント:同じマシンから

MySQL 4.1.15 ... myisam
transaction type . . . : TPC-B (sort of)
scaling factor . . . : 1
number of clients . . : 10
number of transactions per client : 100
number of transactions actually processed : 1000/1000
tps ( include connections establishing) : 319.885762
tps ( exclude connections establishing) : 635.494396

MySQL 4.1.15 ... innodb
transaction type . . . : TPC-B (sort of)
scaling factor . . . : 1
number of clients . . : 10
number of transactions per client : 100
number of transactions actually processed : 1000/1000
tps ( include connections establishing) : 190.563886
tps ( exclude connections establishing) : 270.924003
638NAME IS NULL:2005/10/29(土) 12:31:36 ID:???
OS Redhat Linux
CPU MMX Pen 166MHz
MEM 32MB
HDD 2.4GB

結果 インスコ失敗
639NAME IS NULL:2005/10/29(土) 12:37:00 ID:???
>>638 Makefile 編集してがんがる。Linuxなら
CC = gcc
CFLAGS = -O2 -D_REENTRANT
LDFLAGS = -Wl,-R/usr/local/mysql/lib
MYSQL_INCLUDE= -I/usr/local/mysql/include
MYSQL_LFLAGS= -L/lib -L/usr/local/mysql/lib
MYSQL_LIBS= -lm -lz -lnsl -lcrypt
 . . . .
640NAME IS NULL:2005/10/29(土) 15:57:23 ID:QmmIUHx9
OS Windows XP + SP2
MySQL 5.0.15
MyODBC 3.51
ACCESS 2003
# CLIENT SECTION
default-character-set=sjis
# SERVER SECTION
default-character-set=utf8

結果 文字化け発生!解消方法求む!!!
641640:2005/10/29(土) 16:04:00 ID:???
すみません、自己解決しました
642NAME IS NULL:2005/10/29(土) 16:23:41 ID:???
どういう風に解決したかぐらい書いてよ
643640:2005/10/29(土) 17:07:56 ID:???
# CLIENT SECTIONと# SERVER SECTIONを
同じdefault-character-set=sjisにしたら直りました。
お騒がせしました。
644NAME IS NULL:2005/10/29(土) 18:56:30 ID:QmmIUHx9
640だけど641、643誰?
ID違うし・・・
645NAME IS NULL:2005/10/29(土) 20:34:43 ID:???
>>644 自演乙
646NAME IS NULL:2005/10/29(土) 22:11:29 ID:QmmIUHx9
>>645
自慰乙?
647NAME IS NULL:2005/10/30(日) 00:56:03 ID:???
>>630
丁寧に報告してくれてサンクス

CPUのL2の量によって4.1有利か5.0有利か変わるのかと思ったんだが、
条件は全然違う所にあるみたいだなぁ

突き詰めていったら、ディスクのフラグメント状況によるとか、しょーもない要因の気もしてきた・・・・
648NAME IS NULL:2005/10/31(月) 12:10:04 ID:EtZ8MLQ0
mySQLをインストールしたのですが
信号が青くなりません。
スタート ザ サービス を押しても一瞬青になってすぐ赤になります。
そして「variables」という項目になにも書かれていません。

かなりネットと本で調べたのですが解決できません。
どうしればよいか教えてください
649NAME IS NULL:2005/10/31(月) 12:21:18 ID:???
>>648
MySQLのログにエラーが出力されてないか?
650NAME IS NULL:2005/10/31(月) 14:04:12 ID:Exjn2IvW
すみません。 MySQLのデータベース名を変更したいのですがどうすればよいのでしょうか?
651NAME IS NULL:2005/10/31(月) 17:07:00 ID:???
>>650
ディレクトリ名を変える
652NAME IS NULL:2005/10/31(月) 18:18:33 ID:Exjn2IvW
>>651 え・・それでいいんですか?
653NAME IS NULL:2005/10/31(月) 18:22:09 ID:Exjn2IvW
>>651 できました。ありがとうございました。
654NAME IS NULL:2005/11/01(火) 23:24:36 ID:???
MySQL5.0.15 への移行を検討していて分かったこと。


○JOIN に 4.1以前との互換性が無い。

従来、JOIN で USING を用いるとき、指定できるカラム名は、そのすぐ前(す
ぐ左?)のテーブルにあるカラムだけだった。しかし5.0.12からそれが変更さ
れ、それ以前に出現したすべてのテーブルのカラムが指定できるようになった
(SQL:2003互換)。
http://dev.mysql.com/doc/refman/5.0/en/upgrading-from-4-1.html

しかし、恐ろしいことに、あるJOIN以前の複数のテーブルに同一のカラム名が
存在していた場合、そのカラム名をUSING区で指定しているSQLは
ERROR 1052: Column '***' in from clause is ambiguous
というエラーになることに。

当方は、従来のMySQLのUSING句の使いづらい文法に依存したコードをたくさん
書いていたので、SQLをすべてチェックして書き直さなければ移行できないこ
とが判明。ああくやしい。


○Connector-J 3.1.11 はメモリリークする。

※ただし、Tomcat/4.1.29, j2sdk1.4.2_03 との組み合わせ。
 JDKが有名なバグありバージョンなので、微妙。
(Connector-J 3.0.17 は問題なかった。)
655NAME IS NULL:2005/11/01(火) 23:52:51 ID:???
>>654
例文にあったSQL
SELECT CHAR(ORD('A') USING latin1) = 'a';
が('A`)に見えた

というのは、置いといて、5.0入れてないから分からないんだけど
サブクエリーで使うような場合も、メインクエリーに出てきたテーブルが影響するってこと?

まあ、たいていカラム名にテーブル別名も指定してるから、俺は問題ないかな。
テーブル名も指定する癖を付けた方がいいと思われ。
656NAME IS NULL:2005/11/01(火) 23:59:11 ID:XkixHZ9d
>>655
USING 句で、各カラムの所属テーブル名を指定することは、不可能だと思うが。
657NAME IS NULL:2005/11/02(水) 00:33:04 ID:zmkwaL0C
現在、大学のPCと自宅のPC、両方にMySQLを入れています。
二つのPCは接続しておらず、単体でレコード入力・表定義をしています。

dataフォルダに表情報が全て入っていると思ったので
一方のdataフォルダをそのままもう一つのPCにコピーし
データの同期を図ろうと思ったのですが
コピーはうまくできましたが、パスワードを入れて
ログインした途端、強制終了してしまいます。

これの原因はなんでしょうか。
大学でやった続きを家でやりたいので何とかしたいのですが・・・。
658654:2005/11/02(水) 00:34:06 ID:???
追加報告。
Connector-J3.1.11 は、j2sdk1.4.2_08 と組み合わせてもやっぱりメモリリー
クした。Tomcat が OutOfMemoryError を吐いてしまう。

>>655
JOIN の中の USING の話だぞ。勘違いしていないか?
659NAME IS NULL:2005/11/02(水) 00:49:08 ID:???
こんなテーブルがあったとして
| ID| い | ろ |
|  1| 10 | 20 |
|  2| 35 | 15 |


「は」フィードを増やして、「い」+「ろ」の値を一気に「は」フィードに入れたい。
| ID| い | ろ | は |
|  1| 10 | 20 | 30 |
|  2| 35 | 15 | 50 |

$sql = "select from TABLE";
$result = mysql_query($sql);
while ($row = @mysql_fetch_array($result)){
$temp_val = $row['い'] + $row['ろ'];
$sql = "INSERT INTO `TABLE` (`は`) VALUES ({$temp_val}) where ID = {$row['ID']}";
}


これを一発でやる方法というとどんな手があるでしょうか?
↑こんな感じでmysql_fetch_arrayでループを回して一行分ごとに
insertのクエリを発行、実行してみたけど、エラーになってうまくいかないです。
660NAME IS NULL:2005/11/02(水) 01:02:55 ID:???
>>659
まずは、どこでエラーが出ているのかを考えたほうがいい。
661655:2005/11/02(水) 01:05:21 ID:???
>>658
勘違いしてた('A`)
662NAME IS NULL:2005/11/02(水) 02:57:51 ID:???
>>658
詳しく。 大抵の場合、アプリ側の問題だと思うのだけど。
663NAME IS NULL:2005/11/02(水) 03:05:51 ID:Rkbs4Zeo
>>657
MyISAM型テーブルなら *.FRMファイル、*.MYIファイル、*MYDファイルをコピペするだけでどの環境のMySQLにも持ち運べる。

使っているのがInnoDB型テーブルなら、"create table as select * from ... engine=myisam"で元のPC上でMyISAM型のコピーを作成して別のPCに持ち運んで、別のPC上でまた"create table as select.."するか"alter table"すればいいんでない。

テーブルが大量にあると面倒だけど・・・。
664NAME IS NULL:2005/11/02(水) 07:24:11 ID:???
>>659
update を使う方法は?

言語はphpか...

$sql="UPDATE `TABLE` SET `は`=`い`+`ろ`";
mysql_query($sql);

ではだめ?
665NAME IS NULL:2005/11/02(水) 08:14:05 ID:???
>>657
ちゃんとmysqldを落としてからコピーしました?
666NAME IS NULL:2005/11/02(水) 10:02:45 ID:???
>>663
テーブル数は50以上です・・・。

>>665
binフォルダにmysqld.exeが入っていますがそれのことですか。
入れたままでなく、コピー時に起動させて何らかの処理を
行わせなければならないんでしょうか。
667654:2005/11/02(水) 11:40:58 ID:???
>>662
> 詳しく。 大抵の場合、アプリ側の問題だと思うのだけど。

自分も不安になって、コードを確かめた。ResultSet#close() を忘れている個
所があったので修正した。しかし修正後も結果は変わらず、OutOfMemoryError
だ。

環境はWindows2000, Eclipse3.1.1, JDK1.4.2_08, Tomcat4.1.29, Connector/J
3.1.11 だ。まだLinux では試してないが、たぶん同じだろう。

アプリは、一種のシミュレーションで、似たようなSQLを数千回も発行する。
一つの PreparedStatement に、セットする値を変えて execute()、これの繰
り返し。タスクマネージャでプロセスを監視していると、Tomcat の
javaw.exe のメモリ使用量がみるみる膨らんでいく。90メガを超えたあたりで
OutOfMemoryError。

Connector/J 3.0.17 にすると、エラーは起こらなくなる。Tomcatのメモリ使
用量も38メガ程度で安定している。

どうやら Connector/J 3.1系にはとんでもないバグが頻発しているらしいし、
http://diary.jp.aol.com/applet/27c2d4uyd/20051014/archive
今回のような現象も不思議ではないと思う。

しかし最新のConnector/Jを使わないと、MySQL5.0(おそらく4.1以上)では
"Illegal mix of collations" というエラーになるから、古いJarを使いつづ
けるわけにもいかない。
http://www.mysql.gr.jp/mysqlml/mysql/msg/9515

とりあえず以上。
668NAME IS NULL:2005/11/02(水) 11:56:51 ID:???
>>666
InnoDBを使っていて、しかもテーブル数が多いなら、ディレクトリコピーより、
mysqldump を使ったほうが楽だ。mysqld を止める必要もないし。
http://dev.mysql.com/doc/refman/4.1/ja/mysqldump.html

最新のDBを mysqldump でファイルに落とし、移行先のDBを一旦 DROP, CREATE
しなおし、
mysql -u ユーザ名 DB名 < ダンプファイル名。
あとは待ってればいい。

当方は、遠隔地にある計60メガ近い容量のDBと同期させているが、Linux上 なら
10分程度しかかからない。

ただし Windows上の MySQL だと2時間かかる。やってられん。
669NAME IS NULL:2005/11/02(水) 13:40:49 ID:???
>>668
どうもご指導ありがとうございます。
いま大学で作業中なので、今晩家でやってみたいと思います。

Windowsなので2時間かかるのか・・・

ところでココってsage進行ですか?
670666:2005/11/02(水) 13:52:57 ID:???
>>668
もう一点確認させて欲しいのですが、
移行先のDBを一旦 DROP, CREATEしなおし、
> 移行先のDBを一旦 DROP, CREATEしなおし、
とは、移行先の各DBに幾つかの表が既にあっても
とりあえずDBごとdropして、その後再び同じ名前のDBをcreate。
(この時点で、DBに表はない。)

> mysql -u ユーザ名 DB名 < ダンプファイル名。
については、
mysql -u root 顧客 < UnivPC-1
mysql -u root 店員 < UnivPC-1
・・・。
という流れでしょうか。
671668:2005/11/02(水) 14:02:47 ID:???
>>670
それで合ってる。

念のため細かい点を補足。
・DBの容量が小さければ、Windowsでもリストアにそんなに時間はかからない。
・InnoDBよりMyISAM の方が、リストアは圧倒的に速い。
・DBが複数あるんなら、--databases や --all-databases オプションを
 検討されたし。
672666:2005/11/02(水) 14:18:09 ID:???
>>671
OK。どうもです。
673NAME IS NULL:2005/11/02(水) 16:17:49 ID:???
長文スマソ

>>667
問題の切り分けをしたほうがいい。Tomcat越しにアクセスさせるのではなく単純なJavaコードからConnector/Jを使ってみそ。

Win2000, JDK1.4.2_08, Connector/J 3.1.11, Eclipse3.1.0で以下のようにPreparedStatementを100万回繰り返したが、
"-verbose:gc"で得られたGCログからはメモリーリークは発生しなかったぞ。

public void testMemory() throws Exception {
String url = "jdbc:mysql://localhost/test";
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection conn = DriverManager.getConnection(url);
Statement stmt = conn.createStatement();
stmt.executeUpdate("DROP TABLE IF EXISTS t1");
stmt.executeUpdate("CREATE TABLE t1 (c1 int) engine=MEMORY");
stmt.executeUpdate("INSERT INTO t1 VALUES(0)");
PreparedStatement pstmt = conn.prepareStatement("UPDATE t1 SET c1 = ?");
int tryal = 1000000;
for (int i = 0; i < tryal; i++) {
pstmt.setInt(1, i);
pstmt.execute();
}
stmt.close();
pstmt.close();
conn.close();
}

[GC 1139K->627K(1984K), 0.0001869 secs]
[GC 1139K->627K(1984K), 0.0001880 secs]
[GC 1139K->627K(1984K), 0.0001861 secs]
・・・
[GC 1139K->627K(1984K), 0.0001922 secs]
[GC 1139K->627K(1984K), 0.0001875 secs]
[GC 1139K->627K(1984K), 0.0001900 secs]
674666:2005/11/02(水) 16:27:14 ID:???
先程教えて頂いた方法をログイン直後い実行しましたが
以下の文全てに対して"syntax error"になってしまいました。
ユーザはroot,パスもroot,customerdbはDBの一つです。

mysql> mysqldump --all-databases;
mysql> mysqldump -a -u root -p root > C:\kari;
mysql> mysqldump customerdb -u root -p root > C:\kari;

なにがダメなのでしょうか…。
675668:2005/11/02(水) 18:00:25 ID:???
>>674
mysqldump は mysql にログインして実行するんじゃないよ。
UNIX ならシェル、Windows ならコマンドプロンプトの画面でそのまま実行する。
つまり、プロンプトは、Windowsなら
mysql> じゃなくて、c:\mysql> の状態で実行。
676654:2005/11/02(水) 18:27:41 ID:???
>>673
わざわざありがとう。しかし、PreparedStatement#executeUpdate()ばかりな
のが気になる。ResultSet を返す PreparedStatement#executeQuery() だとど
うだろう?

時間が無いのでこれだけ。すまん。自分もあとで試してみる。
677666:2005/11/02(水) 18:55:41 ID:???
単純ミスでした(__)

コマンドプロンプトにて
C:\Program Files\MySQL\MySQL Server 4.1\bin>(続)
(続)mysqldump --all-databases -u root -p root > C:\tttt;
を実行したところCのトップにttttというファイルができました。
これで良かったのでしょうか?あと、拡張子が分かりません…。
678NAME IS NULL:2005/11/02(水) 19:24:54 ID:???
>>677
それでいいよ。
ただのテキスト(SQL)だから、エディタで中を見て、正常にデータが入って
いるかを見てごらん。
拡張子は何でもいい。*.dmp とか、*.sql とか、好きにして。*.txt でもいいよ。
679NAME IS NULL:2005/11/02(水) 19:29:34 ID:???
みんなやさしいな。
こんなカスみたいな奴を良く相手にできるもんだ。
680NAME IS NULL:2005/11/02(水) 19:40:25 ID:???
>>679 おまえみたいな奴こそカス
681NAME IS NULL:2005/11/02(水) 19:42:31 ID:???
>>677

拡張子はファイル名として指定。
(続)mysqldump --all-databases -u root -p root > C:¥tttt.txt;←

中身はメモ帳かノートパットから開いて確認
682666:2005/11/02(水) 20:09:33 ID:???
中身は下記のようになっていますが…これはおかしいですよね。

Usage: mysqldump [OPTIONS] database [tables]
OR mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
OR mysqldump [OPTIONS] --all-databases [OPTIONS]
For more options, use mysqldump --help

(実行時のコマンドは>>677のとおりです。)
683NAME IS NULL:2005/11/02(水) 20:26:31 ID:???
-p と root の間にスペースを空けちゃ行けない気がした。
未確認ですまそ。
684NAME IS NULL:2005/11/02(水) 20:38:41 ID:???
-p root ではなくて --password=root だな。
685NAME IS NULL:2005/11/02(水) 20:42:41 ID:???
みんなやさしいな。
こんなカスみたいな奴を良く相手にできるもんだ。
686NAME IS NULL:2005/11/02(水) 21:35:01 ID:???
底辺が大きくならないと上に伸びないからな。
687NAME IS NULL:2005/11/02(水) 21:35:13 ID:cakceBv0
phpmyadminでは下のように表示されているテーブルを
PHPで作成したいのですが、どう
書けばいいのでしょうか?
エラーばかり出てわかりません。
よろしくおねがいします。

フィールド、フィールドタイプ、表示、空の値(NULL)、基本値、追加、実行
dt datetime いいえ 0000-00-00 00:00:00
lup mediumint(8) UNSIGNED いいえ 0
tu smallint(5) UNSIGNED いいえ 0
688NAME IS NULL:2005/11/02(水) 21:50:56 ID:???
>>687
phpmyadminでそのテーブルのエクスポートを実行すればSQLが表示されるので
それをコピーして、PHPで実行(mysql_query等)すればいい。
多分、こんなSQLが表示されるはず。
`testtable`, MyISAM, ujis の部分はオマイさんの環境によって変わるはずだから、
このまま使用しないように。

CREATE TABLE `testtable` (
`dt` datetime NOT NULL default '0000-00-00 00:00:00',
`lup` mediumint(8) unsigned NOT NULL default '0',
`tu` smallint(5) unsigned NOT NULL default '0'
) ENGINE=MyISAM DEFAULT CHARSET=ujis;
689666:2005/11/02(水) 22:00:35 ID:???
>>684
以下のように実行し、
C:\Program Files\MySQL4.1\bin>
mysqldump --all-databases -u root --password=root > C:\fair.txt;

C:\Program Files\MySQL4.1\bin>

ファイルを確認しましたがその内容は>>682と同じでした。
現在MySQLにあるDBは"mysql""test2"で、test2に
テスト用にテーブル"1st"を定義しています。
う〜ん・・・
690NAME IS NULL:2005/11/02(水) 22:23:15 ID:???
>>689

もしファイルに出さないでちゃんと出てくるんだったら何か環境が悪い。

これ以上は MySQL の質問ではなくて
Windows のコマンドプロンプトの使い方だから、
他で勉強してくれ。
691NAME IS NULL:2005/11/02(水) 22:50:38 ID:???
>>689
何か文法が間違っているんだろうけど、もうネット越しではわかんないねえ。
デスクトップ共有でも出来たらいいんだけど。

いちいちファイルの中身を確認するのも面倒だろうから、末尾の
>c:\fair.txt を外して、いろいろ試行錯誤してみてよ。

テーブル定義のSQLなどが画面にあふれ出したら成功だから、Ctrl + C を押して
中断。今度は > c:\fair.txt をつければ、さっき画面にあふれたテキストが
ファイルに収まる。

あと、最後の「;」は要らないからね。
692NAME IS NULL:2005/11/02(水) 22:57:18 ID:???
-uの後のスペースもいらんな
693NAME IS NULL:2005/11/02(水) 23:00:34 ID:???
>>692

それはどっちでもいい。混乱させるな。
694666:2005/11/02(水) 23:02:29 ID:???
>>691
その方法でできました。ファイルの中身が正しく書き込まれました。
明日もう一つのPCにてコピーしてみます。

たくさんの助言どうもありがとうございました。
695NAME IS NULL:2005/11/02(水) 23:08:24 ID:???
>>691
の指摘の通り、最後の「;」を入れなければOKですね。
私も詳しくないのですが、;をいれるとUsageがでました。
696691:2005/11/02(水) 23:23:25 ID:???
>>694
うまく行って良かった。お疲れさん。

こういうのを一人で身につけるのは大変だ。詳しい人が近くにいれば、5分で
終わることなのに。今後も苦労するだろうけど、まあ頑張れ。

あとは、誰かが些細なところで引っかかってたら、かつての自分だと思って
助けてやってね。


>>695
あ、やっぱりそれでしたか。私はリダイレクトさせて試してたんで、セミコロンが
付いててもダンプ出来ましたが、あやしいのは他になさそうでしたしね。
697NAME IS NULL:2005/11/02(水) 23:52:13 ID:???
「Before start of result set 」というエラーが作業をさえぎり、
課題がさっぱり進みません。
String ititle = rs.getString("title");
という記述を入れると出てきやがります。
result set の定義とかその辺は問題ないと思うんですが、
どなたがお分かりになる方いらっしゃいますか?
698NAME IS NULL:2005/11/02(水) 23:57:23 ID:cakceBv0
ありがとうございました!
やってみます!
699NAME IS NULL:2005/11/02(水) 23:58:11 ID:cakceBv0
>>688
ありがとうございました!
やってみます!
700NAME IS NULL:2005/11/03(木) 00:00:46 ID:???
今日はクソ野郎ばかり現れるな。スレ違いだし。
result setが空じゃないのか?

>result set の定義とかその辺は問題ないと思うんですが
そう思い込めるオマイがうらやましいよ。
701NAME IS NULL:2005/11/03(木) 00:11:11 ID:???
>>700
文句あるならこのスレにこなければいい
雰囲気乱すな
702NAME IS NULL:2005/11/03(木) 00:12:11 ID:???
この野郎、絶対てめぇの手はかりねぇぞ。
意地でも自力でやってやる。
703NAME IS NULL:2005/11/03(木) 00:31:14 ID:??? BE:637200689-#
なんだこりゃ
704NAME IS NULL:2005/11/03(木) 00:31:23 ID:???
分からん所は素直に聞くのも勇気だ。
どつぼにはまる前にソース見せれ。
705NAME IS NULL:2005/11/03(木) 00:43:33 ID:???
一応 --xml で XML を吐くけど、これって XML DBMS として実用に耐え得るの?
706697:2005/11/03(木) 00:45:53 ID:???
すみません、自己解決しました
707697:2005/11/03(木) 00:49:08 ID:???
いや、マジで自己解決した。
やっぱrsは関係なかった。
rs.next()を書いてなかった。
なきそうになった。
そら動かねーよ。
708NAME IS NULL:2005/11/03(木) 04:00:03 ID:???
>>705
堪えない。
709NAME IS NULL:2005/11/03(木) 05:27:26 ID:???
>>654>>676

接続プロパティ"dontTrackOpenResources=true"(デフォルトはfalse)をつけて、
それでもメモリリークするかどうかを試してみて。

http://dev.mysql.com/doc/refman/5.0/en/cj-configuration-properties.html

710654:2005/11/03(木) 13:09:45 ID:???
>>709
了解。明日、試してみる。

ところで、>>654 の JOIN 〜 USING 句の話には、誰も食いつかないなあ。5.0
に移行するには、環境設定を変えるだけじゃ済まず、既存のSQLそのものをチェッ
ク、修正しなければならないわけで、これは重大な問題だと思うんだが。

MySQLの従来の USING句の仕様があまりにもタコだったのを、5.0から世間の標
準に合わせたわけで、その点自体はありがたいことだけど、移行コストが跳ね
上がってしまったことには正直参っている。

4.1への移行は、既存のシステムはほとんどの場合、コードの手直しなしに可
能だったけれど、5.0だと、手直しなしで移行できるシステムはほとんど無い
だろう。これほど基本的な構文の仕様が変わったのだから。

皆はどうやっているんだろうか?
711NAME IS NULL:2005/11/03(木) 13:50:04 ID:7VfeavMH
初歩的な質問なのですが,データベース名の変更は
どうすればいいのでしょうか.Alter databaseで
検索はしてみたのですが,それらしいのが無くて分かりません.

それから,あるDBの表を別のDBに移動,コピーするには
どうしたらよいのですか.
712NAME IS NULL:2005/11/03(木) 13:52:19 ID:???
713NAME IS NULL:2005/11/03(木) 14:44:45 ID:???
>>710
おれは4.1へも移行しなかったからな。5.0も多分パス。
新規案件はPostgreSQLで行くことが決定しているし。
MLの問題吐き出しOFFの結果がフィードバックされて
日本語周りが改善されたら考えるかな>移行
714NAME IS NULL:2005/11/03(木) 14:55:29 ID:???
>>710
俺のところではMySQL4.1はスルーしてた。
所謂新機能を実務で使うのはこれからってところなので
今後似たようなことがなければ大丈夫。
715NAME IS NULL:2005/11/03(木) 15:03:35 ID:???
最新情報を追いかけていないんだけど、MySQL5.0の日本語周りって
4.1ベース?4.0に戻ったりしてたらうれしいんだけど。
716NAME IS NULL:2005/11/03(木) 15:10:28 ID:???
joinによる表結合を今知った…

俺の使ってた解説書や解説サイトに等価結合の方法しか書いてなかったので
結合条件のうち片方がない場合はif()で条件分けしたりしてた
717NAME IS NULL:2005/11/03(木) 15:39:33 ID:???
>>715
(当たり前だが)MySQL4.1ベース。

MySQL4.1.15、MySQL5.0.13からは
MySQLサーバに--skip-character-set-client-handshake
というオプションが追加された。これはある意味
S/C間での文字コード変換についてはMySQL4.0以前と
似たような動作をするオプション。
718NAME IS NULL:2005/11/03(木) 15:44:54 ID:???
>>711
たぶん、正式な方法は存在しないのだと思う。

>>650-653 にもあるが、MySQL は長年、ファイルシステムをそのまま利用して、
データベースやテーブルが作られていた。だから、DB名を変えるにはディレク
トリ名を変えれば済んだし、テーブルを移すには同名ファイルをコピーすれば
いい。この簡単さが売りだった。

しかし、InnoDBの登場や、DB名テーブル名の国際化などが原因で、この関係は
成り立たなくなりつつある。詳しくは以下のサイトを参考にされたし。
「MySQL日本語の旅」
http://oss.timedia.co.jp/index.fcgi/kahua-web/show/MySQL%c6%fc%cb%dc%b8%ec%a4%ce%ce%b9

結局、あらゆる環境で安全な方法としては、mysqldump の出力内容をエディタ
で編集して、新規DBやテーブルを作るしかないんじゃないだろうか?
719NAME IS NULL:2005/11/03(木) 15:46:43 ID:???
>>717
さんくす。

>(当たり前だが)MySQL4.1ベース。
ですよねw

--skip-character-set-client-handshake
こんなオプション付けたんですか。
テスト機でも作ってみるか。

char(6)は六文字とかそこら辺の変な仕様もOFFできると
良いのだけど。
720NAME IS NULL:2005/11/03(木) 15:52:22 ID:???
>>711
WEBサーバーとPHPが必要だけど、phpMyAdminを使えば簡単な操作で可能。
内部でゴリゴリとCREATE TABLE, DROP TABLEをやっているだけだが。
721NAME IS NULL:2005/11/03(木) 16:09:39 ID:???
>>716
とりあえず、ここでも見とけ。
http://www.techscore.com/tech/sql/index.html

あと、MySQL は確かに便利だが、標準的なRDBから見ると、使えない機能や
独自拡張の多い、言わば「変態RDB」であることも知っとけ。
http://www.mysql.gr.jp/Manual/mysql-3.23.38/manual.ja_Compatibility.html

上のリンク先は、すでに大変古い内容だけれども、MySQLが当初、どういうDBを
目指していたかを知るためにはいい資料だと思う。
722NAME IS NULL:2005/11/03(木) 16:18:22 ID:???
select * from table_name
で表示した内容をテキストファイルに出力するコマンドってあります?
723NAME IS NULL:2005/11/03(木) 16:27:37 ID:???
>>722
コピペ
724NAME IS NULL:2005/11/03(木) 16:48:32 ID:???
コマンドプロンプトの画面って全画面にしても
横が半分までしか行かないから,改行されて見づらい.
その状態でコピペしてもアレだから出力してくれると
ありがたいんだが
725NAME IS NULL:2005/11/03(木) 17:05:02 ID:???
>>722

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

って起動時に出てくるのは読まないの?
\h とかしてみないの? なんで? それってアレじゃない?

726NAME IS NULL:2005/11/03(木) 17:07:08 ID:???
>>721
そこ見やすいですね

俺は既にmysqlの独自拡張に汚染されて他のRDB行くのが億劫w
4.1以降は特にGroup by周辺が便利で
727NAME IS NULL:2005/11/03(木) 17:08:33 ID:???
>>724
mysqlクライアントでSQL文の結果をファイルに出力する
http://www.bnote.net/mysql/14_output.html

ぐぐったらすぐ出てきましたやんか
728NAME IS NULL:2005/11/03(木) 18:32:01 ID:???
>>717 ををを、すばらすい。
PHPを出来合いの 4.1系mysql ライブラリと
リンクしてるもんで、いつも
"SET NAMES キャラセット名"
で日本語文字化け対策しないと
いけんかった。
729NAME IS NULL:2005/11/03(木) 20:46:23 ID:???
あの、素朴に質問なんですが、
MySQLって、、、

root(若しくは同等の権限を持つユーザ)からの、
『drop database mysql』
を受け付けるますか?

自分でやる勇気ないので、知ってる方お願いします・・。
730NAME IS NULL:2005/11/03(木) 22:21:55 ID:???
$sql = "まあ、ふつうのsql文";
$result = mysql_query($sql);
$rows = mysql_num_rows($result);

って書いてるところを

$sql = "まあ、ふつうのsql文";
$rows = mysql_num_rows(mysql_query($sql));

って書くのは、パフォーマンス的にはどうなんでしょう?

$sql = "まあ、ふつうのsql文";
while ($row = mysql_fetch_array(mysql_query($sql))) {
いろいろ
}

なんてのもいかがなもんでしょうか?

ずっと上の書き方してたけど、一行でも減らしたいと思うんですが。
731NAME IS NULL:2005/11/03(木) 22:28:57 ID:???
PHPの質問じゃないの?
732NAME IS NULL:2005/11/03(木) 22:35:55 ID:???
>>729
普通にデータベースなんでDROP出来るよ。
させたくないなら、それこそDROP権限を剥奪しておく。
733NAME IS NULL:2005/11/03(木) 22:44:46 ID:???
>>730
質問する前に実行して時間計ったほうが早くない?
734NAME IS NULL:2005/11/04(金) 01:04:32 ID:???
>>731
そうかもですね。web prog板で聞いてみた方がいいかな?
>>733
そんな難しい事のやりかた解りません。
735NAME IS NULL:2005/11/04(金) 01:50:30 ID:???
時間はかるのが難しいぐらいなら、早くなっても気がつかないだろう。
736733:2005/11/04(金) 01:53:43 ID:???
>>734
ちょwおまwww

<?php
$time1 = mtime();
// ----- ここから -----
(1)
// ----- ここまで -----
$time2 = mtime();
echo $time2 - $time1;

function mtime() {
 list($usec, $sec) = explode(" ", microtime());
 return ((float)$usec + (float)$sec);
}
?>

の(1)の部分に時間を計測したい処理を書けばいいんじゃね?
処理が軽い場合はループするなどしてな。
737NAME IS NULL:2005/11/04(金) 03:32:00 ID:???
スレ違いだけどPHP5なら $time = microtime(true); でok
738654:2005/11/04(金) 12:23:03 ID:???
>>709
やっと Connector/J 3.1.11 の実験が出来たので、報告する。

○dontTrackOpenResources=true を指定すると、Connector/J 3.1.11 でもメ
モリリークしなくなった。

>>673 のテストコードのテーブル型を InnoDB に変え、次に ResultSet を
返すような PreparedStatement を追加して、同様にこちらもループの中で値
のセット、実行を繰り返してみた。結果は、やはりメモリリークしない。

この二つの実験結果からは「Conector/Jではなくて、当方のアプリがダメダメ」
という結論しか導き出せそうに無い。しかし、どうか信じてくれ。ResultSet
はすべて使用直後にclose している。行儀の悪い作りにはしていないのだ。

ならこの結果をどう考えるべきか。テストコードと違ってアプリは複雑だから、
そういう複合的な条件でしか再現しないバグが Connector/J にあるのかもし
れない。我ながら説得力が無いが。

ただ、dontTrackOpenResources=true と指定すれば問題は回避できることは確
認できたので、とりあえずそれで行こうと思う。こういうプロパティを true
にしなければならないのは少々残念だが。

ということで、いろいろお世話になりました。深く感謝いたします。
739NAME IS NULL:2005/11/04(金) 14:41:28 ID:???
10000行程度の関連テーブルが3つある場合、3度クエリするより
3つをINNER JOIN等で結合して1度でクエリしたほうがコストは低いですか?
740NAME IS NULL:2005/11/04(金) 14:59:22 ID:???
場合によるんじゃね?
741NAME IS NULL:2005/11/04(金) 16:17:43 ID:???
>>739
コストを計ってここに報告汁!
742NAME IS NULL:2005/11/04(金) 17:32:00 ID:???
Connector/J 3.1.11 バグ報告(文字化け)。

SELECT CONCAT(文字列型のカラム名, 数字型のカラム名) FROM テーブル名
↑の結果が文字化けする。
(useUnicode=true&characterEncoding=MS932、MySQL5.0.15。)

バグ回避策としては、「数字型のカラム名 + ''」と書くと化けなくなる。見
苦しい記述だが。なお、--skip-character-set-client-handshake を指定して
も効果は無かった。

これは MySQL Bugs には載っていないようだが、既知のバグだろうか?
また、何かもっときれいな回避策は無いだろうか?
743NAME IS NULL:2005/11/04(金) 18:41:11 ID:???
>>742
試してないけど、これではダメ?
SELECT CONCAT(文字列型のカラム名, CAST(数字型のカラム名 AS CHAR)) FROM テーブル名
 or
SELECT CONCAT(文字列型のカラム名, CAST(数字型のカラム名 AS CHAR CHARACTER SET 文字コード)) FROM テーブル名

個人的には文字列型と数字型をCASTせずにCONCATする方が気持ち悪い。
744742:2005/11/04(金) 19:18:34 ID:???
>>743
ありがとう。恥ずかしながら、MySQLでキャストする方法を知らなかった。
こんな関数があったのか。
http://dev.mysql.com/doc/refman/4.1/ja/cast-functions.html

CAST(数値型カラム名 AS CHAR) で文字化けしないようになった。

CONCAT() で文字列以外を結合するのが気持ち悪いのは同意だが、
マニュアルでは「数値型の引数は同等の文字列形式に変換される」
ことになっている。
http://dev.mysql.com/doc/refman/4.1/ja/string-functions.html
745NAME IS NULL:2005/11/04(金) 19:58:19 ID:???
そもそも、SQL の標準的な文字列結合演算子は || だ。
MySQL ではそれが使えなくて、代わりに CONCAT() なんていう関数を用意して
いるわけで、こんな関数の存在自体が気持ち悪い。

なら mysqld に --ansi オプション付けろって?ゼロからの開発ならそうしたいよ。
746NAME IS NULL:2005/11/04(金) 20:03:58 ID:NTx28D3F
尾に初心者の質問と思うけど、一つだけ許して。ぜんぜん分からん。
データベースの中身をセレクトで引っ張ってきて、
テキスト領域に出力すると、スペース後の文字列が出てこない。
 を使ってやればいいの?
747746:2005/11/04(金) 20:06:27 ID:NTx28D3F
消えてる・・・
×> を使ってやればいいの?
○>&nbsp;を使ってやればいいの?
748NAME IS NULL:2005/11/04(金) 20:39:42 ID:???
>>746-747
こちらも、君が何を聞きたいのか、全然分からん。

テキスト領域ってなんだ?TEXTAREA のことか?
DB の内容を PHP か何かで出力させているのか?
もしそうなら、ブラウザのHTMLソースには、DBの内容は出力されているか?

君の質問をここまで解読しようとした自分を誉めてやりたい。
749NAME IS NULL:2005/11/04(金) 21:00:14 ID:???
>>746-747
カラムってわかるか?
750NAME IS NULL:2005/11/04(金) 21:51:57 ID:???
すみません。困っているので質問させてください。

FedoraCore + Apache + PHP の環境でCGIを動かしてまして、
その中にデータベースを利用するアプリケーションがあります。
問題は、ウェブ上でCGIを通して更新されたはずの情報が、
何故かシェルから見たときに更新されていないんです。
特定のテーブルのみで起こる現象で、同じデータベース内の別のテーブル、
他のデータベースの内容は更新された内容が確認できますが、
該当テーブルのみは何日も前に更新されているはずの古い情報が表示されます。

こういう場合について何か解説したサイトなんかはありますでしょうか?
751746:2005/11/04(金) 21:53:41 ID:NTx28D3F
>>749
ぐぐってみる。ありがと
752746:2005/11/04(金) 21:57:26 ID:NTx28D3F
>>748
ごめん、シカトしてしまったorz
テキスト領域はお察しのとおりTEXTAREAの事です。
そしてJSPで出力してます。
確認した所、ソースにはちゃんと出力されていました。
手間かけてすいません。
753746:2005/11/04(金) 22:11:17 ID:NTx28D3F
あーすいません自己解決しました。
ダブルコーテーションが抜けてただけでした。
お騒がせしました。
754NAME IS NULL:2005/11/04(金) 22:51:14 ID:???
>>750 しぇるからmysqlかなんかで見たところ、
更新したつもりのテーブルが書き替わって
ないことですか?それは単にちゃんとデータベース
更新されてないから、というオチでわ。cgiスクリプトの
ばぐをまず疑うべきでしょう。

テーブルが書き換わってるのに、web上の表示が
更新されないという話しなら、キャッシュとか。。
でもたぶんそっちのことじゃないよね。
755NAME IS NULL:2005/11/05(土) 07:32:42 ID:g1Ja5KZb
5.0.15使ってみた。
アウター結合の仕様とか変わってるぽい。

select … from table-A left join table-B 結合条件 left join table-C 結合条件 …

(↑)4.1.15だとOKなのに、5.0.15だとNGだった。
小ショック。
756NAME IS NULL:2005/11/05(土) 11:02:43 ID:???
>755
外部結合だけ?
外部・内部を問わず、JOIN 〜 USING を使うと互換性が無い、という話ではな
いのか?
その話なら >>654 >>710 で出てきたけど、それともまた別の話なのか?
757NAME IS NULL:2005/11/05(土) 15:45:27 ID:???
うう、もーらちがあかん・・・ver.4.14です

table1: data1 , nurupo_id
table2: nurupo_id , data2 , ga_id
table3: ga_id , data3
というテーブルがあるとして、
table1>table2>table3の順にLEFT JOINで全件表示したくて
昨日から悩んでいるのですがさっぱり上手くいきません。
SELECT data1 data2 data3 FROM table1 LEFT JOIN table2 LEFT JOIN table3 on〜
だとなんかえらい事になるし、ググってもこれだ!というものは探せないし…
どうしたらうまく結合できるでしょうか…アドバイスおねがいします。
758NAME IS NULL:2005/11/05(土) 16:01:00 ID:???
>table1>table2>table3の順にLEFT JOINで全件表示したくて
という表現が良く判らないので間違っているかもしれんが、こういうこと?
間違っているようなら、サンプルデータと期待する結果をカキコよろ。

SELECT data1,data2,data3
FROM table1
LEFT OUTER JOIN table2 ON table1.nurupo_id = table2.nurupo_id
LEFT OUTER JOIN table3 ON table2.ga_id = table3.ga_id
759757:2005/11/05(土) 16:50:07 ID:???
>>758
期待していた結果がでました!
OUTER JOIN の言葉すら知りませんでした。精進します…
本当に助かりました。ありがとうございます!
760NAME IS NULL:2005/11/05(土) 21:17:12 ID:???
正直、結合はよく解ってないけどなんでもかんでもinner joinで済ましちゃってるんですがこんな漏れは逝ってよしですか?
761NAME IS NULL:2005/11/05(土) 21:54:41 ID:???
DMLはわかるけどDMLはわかるって人も
結合とかちょっと難度が上がるとわかんなくなるからな
SQLは奥が深いぜ
762NAME IS NULL:2005/11/05(土) 22:24:31 ID:DQvC5iUD
MySQL には、ORACLE でいうところの表領域(tablespace)は、無いようですが、
「このテーブルはAディスク、このテーブルはBディスク」の様なことはできないのでしょうか?
763NAME IS NULL:2005/11/05(土) 22:51:01 ID:urZZ/Ba6
エクセルVBAでMYSQLと接続する方法を教えてください。
ODBCドライバ使えばできるらしいのですが、
私が持ってるVBAの本にはまるでかかれてません。
764NAME IS NULL:2005/11/05(土) 23:10:39 ID:???
マルチうざい奴だな。
ODBCを使えばできることが判っているのならググれや。
765NAME IS NULL:2005/11/06(日) 00:05:56 ID:???
>>762
意味が良く判らないけど、ディスクI/Oを分散させたいの?
http://www.mysql.gr.jp/frame/modules/bwiki/?FAQ#content_1_23
766NAME IS NULL:2005/11/06(日) 00:25:50 ID:???
>>764
たぶんGoogleからアク禁喰らってるんだよ。
エロワードの検索のし過ぎとかで。

>>763
ほれ。
ttp://homepage2.nifty.com/kasayan/vba/database.htm
767762:2005/11/06(日) 00:47:53 ID:???
>765
なるほど〜。
ありがとう。
768ご質問:2005/11/06(日) 01:01:44 ID:Uo6ppMeg


@Oracle + CSE(Osqledit)
AMySQL + CSE(Osqledit)

@の様にAのパターンをそれぞれ連動させる良い方法は
ありますか?

一応、CSEをMySQLに連動させようとぐぐって挑戦をしては
みたのですが、うまく行きません。

そもそもMySQLとCSEとを連動させる事は無理なのでしょうか?
769NAME IS NULL:2005/11/06(日) 10:20:22 ID:???
>>763
現在VBA+MySQL 4.1.12aで作ってる最中。いろんな入門書をみながら作ってる。

一番最初は「Excelで使うMySQL」 九天社でも読め。
770763:2005/11/06(日) 14:27:14 ID:???
他スレで回答がありました。
ありがとうございました。
771NAME IS NULL:2005/11/06(日) 14:42:13 ID:???
>>763 この板から消えろ 馬鹿すぎ

28 名前: NAME IS NULL Mail: 投稿日: 05/11/05(土) 23:07:24 ID: urZZ/Ba6

エクセルVBAでMYSQLと接続する方法を教えてください。
ODBCドライバ使えばできるらしいのですが、
私が持ってるVBAの本にはまるでかかれてません。

50 名前: NAME IS NULL Mail: 投稿日: 05/11/05(土) 23:07:55 ID: urZZ/Ba6

エクセルVBAでMYSQLと接続する方法を教えてください。
ODBCドライバ使えばできるらしいのですが、
私が持ってるVBAの本にはまるでかかれてません。


763 名前: NAME IS NULL Mail: 投稿日: 05/11/05(土) 22:51:01 ID: urZZ/Ba6

エクセルVBAでMYSQLと接続する方法を教えてください。
ODBCドライバ使えばできるらしいのですが、
私が持ってるVBAの本にはまるでかかれてません。
772NAME IS NULL:2005/11/06(日) 14:43:11 ID:???
>>771
MySQL vs PostgreSQL Part2
http://pc8.2ch.net/test/read.cgi/db/1123011800/54

お前がマルチしてどうすんだよw
773NAME IS NULL:2005/11/06(日) 14:52:11 ID:???
マルチにマルチで返しマルチが増殖。
これぞマルチ理論
774NAME IS NULL:2005/11/06(日) 14:55:10 ID:???
775NAME IS NULL:2005/11/06(日) 16:39:10 ID:RcrbLB0d
最近MySQL5.0にアップデートした者ですが。
今まで、"sql"というカラム名を持ったテーブルを使っていたのですが、
selectやinsertでこのカラム名(もしくはエイリアスでも)を使用するとエラーが出る様になりました。
どなたか対処方法ご存知の方いらっしゃいませんか?

またalter tableでこの"sql"というカラム名を変更しようにも、sql文のなかに "sql"と言う文字が入ってるだけで
エラーがでてしまい、途方に暮れています。
どなたか是非対処方法をお教えください
776NAME IS NULL:2005/11/06(日) 16:50:20 ID:???
>>775
テーブル名に'sql'って…
名前変えなさい。
変え方はこのスレを最初から読み返してみる事をお勧めします。
777NAME IS NULL:2005/11/06(日) 17:14:26 ID:RcrbLB0d
カラム名なんだけど。
778NAME IS NULL:2005/11/06(日) 17:20:28 ID:???
余計駄目
779NAME IS NULL:2005/11/06(日) 18:39:37 ID:???
Mysql 4.1.11 Windows版 インデックスの作成について。
テーブル作成の後にcreate index 〜で作成することは出来たんですけど、一つのcreate table 〜の中でやろうとすると
シンタックスエラーになります。
コマンドプロンプトから
c:\> mysql testdb -u user -pxxxx < c:/v.sql で作ろうとしているんでその中身を書きます。

create table V(
num int(9) auto_increment,
item1 varchar(20),
item2 varchar(20),
item3 char(1),
item4 char(1),
item5 varchar(50),
item6 text,
index v_idx on item5,
primary key (num)
) engine=InnoDB , character set sjis;

どう直せばいいか、教えてください m(__)m。
780NAME IS NULL:2005/11/06(日) 18:41:51 ID:???
>>775
バッククオートで括れば?
`sql`みたいに。
781NAME IS NULL:2005/11/06(日) 19:11:45 ID:???
>>779
index v_idx on item5,
 ↓
index v_idx (item5),
782NAME IS NULL:2005/11/06(日) 19:51:44 ID:???
>>781
有難うございます! m(__)m 
783NAME IS NULL:2005/11/06(日) 20:04:10 ID:0T6ye7p4
>>780
ありがとうございます。alter tableでカラム名を変更できました。

>>778
4.1までは問題なく稼働していたから・・・
今後は気をつけます。
784NAME IS NULL:2005/11/06(日) 20:19:41 ID:???
>>772

マルチに個別に叱咤しているので、マルチでなし
785NAME IS NULL:2005/11/07(月) 01:17:36 ID:???
カラム名にnoって今でもたまにやるよ。
意味としては気づきにくいんだよなNOじゃなくてNo.なのに
786NAME IS NULL:2005/11/07(月) 10:51:04 ID:???
>>784
コピペやん
個別にってんなら文体も文章も全部変えとけ
787NAME IS NULL:2005/11/07(月) 12:47:51 ID:XuTYqAbL
マシンAのファイルをdumpしてマシンBにコピーすると
ひらがな・漢字の部分が文字化けしていました.
文字コードの設定が原因ではないかと思うのですが
よろしければ解決方法を教えてください.
788NAME IS NULL:2005/11/07(月) 13:50:43 ID:???
789NAME IS NULL:2005/11/07(月) 14:08:57 ID:XuTYqAbL
ありがとうございます.

要は,dumpの際に--default-character-set=binaryオプションを
指定すればよいということでしょうか.

マシンA,BのMysqlのバージョンはともに4.1で
A(コピーしたいデータがある)の文字コードはlatin1です
B(データの移動先)の文字コードは,今手元にないので分かりません.
790NAME IS NULL:2005/11/07(月) 15:55:01 ID:JC67ND0H
他スレで初歩的過ぎるためかスルーされたんですが、

if($ken<>''){ }

{}内が飛ばされるのはなんで?
<> とか '' の意味がわかりません 。教えてください
791NAME IS NULL:2005/11/07(月) 16:02:30 ID:???
超能力者の俺が答えてやる。

県名が空だから。
792NAME IS NULL:2005/11/07(月) 16:59:25 ID:XuTYqAbL
select文の書き方によって,結果が変わるのですが
原因は何でしょうか.

mysql> select address,mail from person;
+---------------------------------+-
| address | mail
+---------------------------------+-
|東京都江東区神森3-1SSKビル424号 | (省略)
|鳥飼町123番地3 |
|市服部町91-32-612号 |
| |
| 山口県山口市秋吉村123-9 |
+---------------------------------+-
5 rows in set (0.00 sec)

mysql> select address from person;
+---------------------------------+
| address |
+---------------------------------+
| 東京都江東区神森3-1SSKビル424号 |
| 島根県更級郡鳥飼町123番地3 |
| 岡山県南行李市服部町91-32-612号 |
| 熊本県熊本市与謝鯉村6-12 |
| 山口県山口市秋吉村123-9 |
+---------------------------------+

レコードは,タブで区切ったテキストからloadして格納したものです.
また,addressはtext型です.
793NAME IS NULL:2005/11/07(月) 17:00:29 ID:XuTYqAbL
※住所は架空のものです.
794NAME IS NULL:2005/11/07(月) 17:18:05 ID:???
>>790
スルーされたのはその場に相応しい質問じゃなかったからじゃないの。
多言語のプログラミングの質問だから、ここでも相応しくはないね。
795NAME IS NULL:2005/11/07(月) 17:19:52 ID:???
select文の書き方が違うから
796NAME IS NULL:2005/11/07(月) 17:23:08 ID:XuTYqAbL
>>795
データ自体は問題なく格納されているんでしょうか.
また,下の結果のように正しく表示させるにはどうすればよいのですか.
797NAME IS NULL:2005/11/07(月) 18:13:10 ID:???
>>796
addressカラムではなくて、mailカラムにコントロールコードが
入っているような気がするんだけど。
select mail from person; でもおかしくならない?
798NAME IS NULL:2005/11/07(月) 18:22:32 ID:XuTYqAbL
>>797
それでもおかしくなにります.
コントロールコード??表定義の不備ですか.

>>792の上の図の空白が削られているので,.におきかえて書きます)
mysql> select address,mail from person;
+---------------------------------+---------------------------------+
| address.........................| mail............................|
+---------------------------------+---------------------------------+
.|東京都江東区神森3-1SSKビル424号.|[email protected]...
.............|鳥飼町123番地3......|[email protected]...............
.............|市服部町91-32-612号.|[email protected]...............
|.熊本県熊本市与謝鯉村6-12........|.NULL............................|
|.山口県山口市秋吉村123-9.........|.NULL............................|
+---------------------------------+---------------------------------+

メールのみの場合は以下のようになりました.
mysql> select mail from consultant;
+---------------------------------+
|.mail............................|
+---------------------------------+
.|[email protected]
.............|.ne.jp
.............|oo.com
|.NULL............................|
|.NULL............................|
+---------------------------------+
799797:2005/11/07(月) 18:40:33 ID:???
>>798
いや、表定義のミスではなくて元データがおかしい、またはインポート(load)時の
指定ミスだと思う。
mail カラム単体の結果を見た感じ、load コマンドのパラメータ
 lines terminated by '行末コード'
の指定が元データと一致していないのかも。
行末コードの指定を以下のどれかに変更して load し直してみるとか?
'\r\n' か '\n' か '\r'
800NAME IS NULL:2005/11/07(月) 18:55:34 ID:XuTYqAbL
>>799
元データは
-------------------------
12...あああ......東京都〜
123..いいいい....静岡県〜
-------------------------
のように各データ間をタブで区切って,
行末はそのまま改行しています.Nullは"\N"です.

テキストファイルからのインポートは
load data infile "(名前).txt" into table person; です.
801NAME IS NULL:2005/11/07(月) 19:02:17 ID:XuTYqAbL
[email protected]\R や \N\Rのようにかいても
[email protected],NRとなってしまい,
セレクトの結果もズレたままで,何も変わりませんでした….
802797:2005/11/07(月) 19:07:51 ID:???
>>800
ちょっと疲れてきた…。漏れの説明がヘタすぎるんだね。
以下のどれかでインポートし直してみればいかかでしょう?
元のデータはテーブルから消しておかないと重複してしまうと思うのでご注意を。

load data infile "(名前).txt" into table person lines terminated by '\r\n';
 または
load data infile "(名前).txt" into table person lines terminated by '\r';
 または
load data infile "(名前).txt" into table person lines terminated by '\n';
803NAME IS NULL:2005/11/07(月) 19:16:14 ID:XuTYqAbL
>>802
テキストファイルの各行の最後に,[(タブ)\r]を追加し
2行目の文でロードするとうまく表示されました.
どうも助かりました.ありがとう
804NAME IS NULL:2005/11/07(月) 19:48:12 ID:???
number, name
4, うんこ
7, まんこ
7, あんこ
11, いんこ
11, りんご

からは

4, うんこ
7, まんこ
7, あんこ
11, いんこ
11, りんご

number, name
1, みかん
2, ばなな
3, めろん
5, すいか
6, きゅうり

からは

1, みかん
2, ばなな
3, めろん

みたいな取り出し方をするにはどうしたらいいですか?
805NAME IS NULL:2005/11/07(月) 21:31:57 ID:???

   ワケ      ワカ      ラン♪
  ∧_∧    ∧_∧    ∧_∧
 (; ・∀・)  (; ・∀・)   (; ・∀・)
⊂ ⊂  )  ( つ つ  ⊂__へ  つ
 く く く    ) ) )     (_)/
 (_(_)  (__)_)    彡(_)
806804:2005/11/07(月) 21:38:32 ID:???
numberが3種類みたいなことです
807NAME IS NULL:2005/11/07(月) 21:52:24 ID:???
ナンバーズよりロト6
808NAME IS NULL:2005/11/07(月) 22:02:39 ID:???
>>806
サブクエリが使えるバージョンならこんな感じでいけるんちゃう?

select table1.number,table1.name
from table1
inner join (
 select number from table1 group by number order by number limit 3
) as t on table1.number = t.number;
809NAME IS NULL:2005/11/07(月) 22:14:57 ID:???
SELECT number, name FROM テーブル WHERE number <> 5 OR number <> 6
810804:2005/11/07(月) 22:15:46 ID:???
4.0じゃ無理か・・・
4.1以上だったら

number, name
4, うんこ
7, まんこ
7, あんこ
11, いんこ
11, りんご



number, name
4, うんこ
7, まんこ-あんこ
11, いんこ-りんご

みたいなこともできますか?
811808:2005/11/07(月) 22:22:14 ID:???
>>810
アホくさ、後から条件だしなや。相手しとれんわ。
アプリ側で好きにさらせ。
812NAME IS NULL:2005/11/07(月) 23:43:13 ID:???
5.0.15をインストールしたんですが
winmysqladmin.exeが見当たりません。
どこあるのでしょうか?
813NAME IS NULL:2005/11/08(火) 01:59:23 ID:JH3nQr9Z
MySQL 5.0.15をインストールしたのですが
操作方法がわかりません、コマンドを打ってデータベースを作ったりするには
どの実行ファイルを操作すればいいのでしょうか?(MySQLで)
MySQL以外の例えばphpMyAdminなどではMySQLに接続できないと言われます。
(phpMyAdmin は、MySQL サーバーに接続しようとしました。そして、サーバーは接続を拒絶しました。config.inc.php の中のホスト、ユーザー名およびパスワードをチェックし、MySQL サーバーの管理人から与えられた情報にそれらが相当することを確かめるべきです。)
814NAME IS NULL:2005/11/08(火) 02:09:07 ID:???
>>810
804は意味がよくわからんけどそれならgroup_concatで可
815NAME IS NULL:2005/11/08(火) 02:25:46 ID:???
>>812
winmysqladminはWindows特有でサポートもメンテナンスも
半分放棄されたような代物で、最近は同梱されなくなってる。
どうしても使いたいなら古いMySQL4.0系から取ってくる。
理由が特になければ、現時点で推奨されるMySQL Administratorを使う。
http://dev.mysql.com/downloads/administrator/index.html
816804:2005/11/08(火) 03:04:23 ID:???
>>814
ああありがとう
817NAME IS NULL:2005/11/08(火) 05:31:33 ID:???
JOINを使って検索す時、通常WHEREに書くような条件もONに書くべきなんでしょうか?
それとも、tb1.id = tb2.id などは ONに書き、 tb1.id='1' などはWHEREに書くのでしょうか?
818NAME IS NULL:2005/11/08(火) 08:30:29 ID:???
インストールしていたMySQLをコントロールパネルから削除したのですが、
新しいMySQLをインストールすると前のデータベースが残っていました。
MySQLの場合、データベースのファイルはどこに格納されているのでしょうか?

MySQL4 Windouws2000 環境です。
819NAME IS NULL:2005/11/08(火) 13:11:18 ID:???
>>818
MySQLをインストールした/しようとしているディレクトリの中の
dataディレクトリの中。でもプログラムの追加と削除で[削除]した場合、
インストーラがデータの削除するかどうか訊いてきたでしょ?
820NAME IS NULL:2005/11/08(火) 15:17:23 ID:???
自分の好きな音楽のジャンルをチェックボックスで複数選択して、
データベースに格納する。

ということをやりたいのですが、
ジャンルは 1-100までのintで定義されていて、
いくつでも選択可能

ユーザを定義した(ハンドルネームとか、メールアドレスとか、パスワードとか)
テーブルがありまして、できればこのテーブルに上のデータを入れたいです。

ユーザとジャンルから検索をかけたときにインデックスが使われているようにしたいのですが
どのようなデータ構造にすればいい感じでしょうか?

アドバイスよろしくお願いします。
821NAME IS NULL:2005/11/08(火) 15:42:04 ID:???
>>820
やってみたのが、
ユーザテーブルとジャンル登録のテーブルを別物にしてみました。

| user | int(10) unsigned |
| genre | int(10) unsigned |

これですと、ユーザからの検索、ジャンルからの検索はどっちも高速っぽいのですが、
ユーザ情報を取得するときに、複数のクエリを発行することになってしまうのですが、
なんとかならないでしょうか・・・・

822NAME IS NULL:2005/11/08(火) 16:11:13 ID:???
>>820-821
もう一つ言っていることが良く理解できないんだけど、こういうこと?

--- ユーザーテーブル(tb_user)---
user int, handlename varchar(xxx)...略...

--- お気に入りのジャンルテーブル(tb_genre) ---
user int, genre int

--- 抽出SQL ---
SELECT genre, tb_genre.user, handlename ...略... FROM tb_genre
LEFT OUTER JOIN tb_user ON tb_genre.user = tb_user.user
WHERE
tb_genre.user = xxx    ユーザーで抽出
または genre = xxxx    ジャンルで抽出
823NAME IS NULL:2005/11/08(火) 16:42:21 ID:???
>>822
レスありがとうございます

例えばこのクエリですと、tb_user.user で絞り込んだ場合、
複数行が出力されてしまうのを、
1行で返してもらいたいのです。

genreのところを int のカンマ区切りで 1,4,10,15
みたいな感じで整形して、
select user ,handlename , pass ... genre
                      ↑
ここが 1,4,10,15 となるような結果といいますか・・・

わかりにくくてすみません(´・ω・`)
824NAME IS NULL:2005/11/08(火) 20:27:46 ID:???
>>815
なるほど!ありがとうございます。
825NAME IS NULL:2005/11/08(火) 21:06:16 ID:???
5.0.15のデフォルトキャラクタをujisにしたら
コマンドプロンプトにselect * from tableで表示されるマルチバイトが化けます。
sjisにすると化けません。
コマンドプロンプトの文字コードって帰れるんですか?
826NAME IS NULL:2005/11/08(火) 21:36:04 ID:???
>>825
Windows?
Windows標準のコンソールでは選べないんじゃないかな。
827NAME IS NULL:2005/11/08(火) 22:27:26 ID:???
4.0.26でレコード数の多い(数百万件)MyISAMテーブルに
alter table comment = '本当にありがとうございました'
でコメントを設定しようとすると、すごい時間がかかってしまいます。

全レコードを見に行っているような気がするぐらい時間がかかります。

frmファイルを書き換えるだけで終わらないんですかねぇ。
828NAME IS NULL:2005/11/08(火) 23:13:51 ID:???
>>826
あ、すいません。忘れてました。Windowsです。
そうですか。。。みなさん、どす窓ではselectとかして見ないんですかね?
829NAME IS NULL:2005/11/08(火) 23:19:50 ID:???
>>827
そのALTERの意味が分かんないけど、DEFAULT指定してるんなら全部の行に
'本当にありがとうございました'
を突っ込んでるんじゃね?
最初DEFAULT抜きにして、あとでDEFAULTを追加すれば?

>>828
set names sjis;
とか
830NAME IS NULL:2005/11/08(火) 23:20:52 ID:???
MySQL 4.1.11
あるテーブル (仮に t )でコード-日付でデータが入っています
t_code input_date item1 item2

でこれから当日から過去100日分のデータを日付順に見たいと思って
います。過去のデータ100日分を出すだけなら

select * from t
where t_code = **** (←見たいコード)
order by input_date desc limit 100

で出来るんですが、次の段階、日付をまた昇順に並べ替えて出力する
のとくっつけてするにはどうすればいいか、教えてくださいm(__)m。

831NAME IS NULL:2005/11/08(火) 23:49:56 ID:???
>>828
DOS窓はsjisだから、データベースがsjisでなければ set names sjisをしないと化ける。
毎回、これを入力するのが面倒なら以下のような内容で C:\my.ini に保存しておけばいい。

[mysql]
default-character-set=sjis

注意しないといけないのは、C:\my.ini を参照するのは MySQL のコマンドだけということ。
(個別に作成したアプリはこの限りではないけど)
例えば MySQL用ODBCドライバは C:\my.ini は参照しないので、ODBCの設定で
set name sjis をやらないと Access などからリンクすると化けるハメになる。
832NAME IS NULL:2005/11/08(火) 23:55:12 ID:???
>>830
4.1.11ならサブクエリが使えるから以下でいいんじゃない?
何となく無駄が多い気もするけど。

select * from (
 select * from t
 where t_code = ****
 order by input_date desc limit 100
) as x
order by input_date;
833NAME IS NULL:2005/11/09(水) 00:10:08 ID:???
>>832
おぉ有難うございます。その as x をつけないので

ERROR 1248 (42000):Every derived table must have its own alias

とMySQLに怒られていたとこです(^^;。
サブクエリとか結合とか難しいっす。
834827:2005/11/09(水) 00:48:23 ID:???
>>829
カラムじゃなくてテーブルに設定できるコメントです。
create table の table_option に指定する comment と同じです。
一応、処理が終わってから見るとちゃんと設定されていたんですけどね。

835818:2005/11/09(水) 08:25:41 ID:???
>>819

ありがとうございました。
836NAME IS NULL:2005/11/09(水) 11:06:04 ID:???
>>834
alter table は、基本的に、テーブルコピー&廃棄を行う。
実行中は、テーブルに対してアクセスすることが出来なくなる。

数万レコード超えたらメンテナンス時以外は使わない方がよい。
837NAME IS NULL:2005/11/09(水) 15:22:26 ID:Vdm/FnMI
先日,「セレクト文の結果がうまく表示されない」という
状態の解決策として,load dataの際に,「lines terminated by '\r'」
と書けば良い教えていただいた者ですが,この記述は通常は
行わないものなんでしょうか?
というのも,毎回warningがレコード数と同じくらい出てしまうからです.
以前のように「lines〜」なしでloadすると,セレクト文の結果は
乱れてしまうものの,warningなしでinsertできます.
838NAME IS NULL:2005/11/09(水) 15:27:33 ID:???
長文失礼します。

カテゴリテーブル
| catid | parent_catid | catname | catnum1 | catnum2 |...
記事テーブル
| itemid | content | ....
記事カテゴリテーブル
| itemid | catid |

こんな感じのテーブルがあります。
カテゴリは親IDを設定してツリー構成になる様になっています。
記事は複数のカテゴリを割り当てるようになっています。

編集より閲覧の方がかなり多いと思うので、表示時のクエリ数を減らす為に、
カテゴリの登録数(cat_num1)・下層カテゴリも含めた登録数(cat_num2 )の2つを(記事投稿・編集・削除・カテゴリの構成変更)時に更新させようかと思っています。

今やっているのは、まずSELECTでカテゴリ毎の記事数を抜き出しPHPで下層を含めたものを計算し
更新された記事に関連するカテゴリを全て1個づつUPDATEしているのですが、関連するカテゴリ数が多くなると
それだけUPDATEも沢山行うので、一度のUPDATEで何とかできないか考えています。(増えても一度に10〜15程度だと思いますが)
cat_num1だけならMySQLの関数のみで何とかなりそうな気がするんですが、下層カテゴリも含めた登録数はやはりPHPなどで計算しないと無理ですかね・・。

こんなもの保存せずに、表示時にクエリして計算するほうが良いのでしょうか?
または、もっと素敵な感じに登録数を保存する方法あったら教えてください。。
839NAME IS NULL:2005/11/09(水) 19:59:35 ID:???
>>831
ありがとう。普段はujisで使って中身を見るときだけsjisにして見ることにします。
840827:2005/11/10(木) 02:27:37 ID:???
>>836
了解です。

変更内容に合わせて処理が変わるわけじゃないんですね。
841NAME IS NULL:2005/11/10(木) 20:19:29 ID:???
余りに初歩的かもしれませんが。rootでログインして今現在どのユーザーがどのデータベースに接続しているのかって
判ります?別に管理者の仕事をしているわけじゃないんですけど。
842NAME IS NULL:2005/11/10(木) 20:37:34 ID:???
show processlist ?
843NAME IS NULL:2005/11/10(木) 21:40:12 ID:???
>>842
回答

 \     アリガd     /
 
    /´/´  /´/´  /´/´
   (,,゚Д゚)/ (,,゚Д゚)/ (,,゚Д゚)/ <ありがd!
  _(ノ_,)つ (ノ_,)つ (ノ_,)つ
 (_ノ / (_ノ / (_ノ /
  UU    UU   UU
844NAME IS NULL:2005/11/10(木) 23:28:55 ID:???
やねう企画社内では、
「MySQLなんてへちょいソフト使うくらいなら舌噛み切って死んだるわ」
という評価だそうです。
http://d.hatena.ne.jp/pmoky/20051102#1130945592
845NAME IS NULL:2005/11/11(金) 00:50:38 ID:???
エロゲでデータベースなんて使わない、ってことだろ?
846NAME IS NULL:2005/11/11(金) 03:24:16 ID:???
MySQLって基本的にメンテフリーで無停止稼動が可能ですか?
847NAME IS NULL:2005/11/11(金) 04:02:56 ID:???
私にはどうしてもわかりませんでした。
MySQLで、データベース単位に容量の上限をかける方法。
だれか知ってる方いらっしゃいましたら、ヒントいただけないでしょうか。

アプリケーション別にデータベース(create database)を作って、
1つのアプリケーションでの大量データ発生が、別のアプリケーションに
影響与えないようにしたいんです。

運用の手間の問題から、データベース別にパーティションを分けるのは
避けたいのですが。

環境は、CentOS4.2、MySQL4.1.12です。

848NAME IS NULL:2005/11/11(金) 14:34:42 ID:ne/6/gfo
>>844
まあオープンソフトだし。オラクルのほうがいいし。

>>846
どんどん遅く成っても良ければ

>>847
MySQLのレンタル鯖でもするのかな?
849NAME IS NULL:2005/11/11(金) 21:08:53 ID:???
>>844
文句があるならあっちでやって。わざわざ2ちゃんに持ってくる必要なし。
850847:2005/11/11(金) 23:02:47 ID:???
レンタル鯖でなく、会社で使うのに。
MySQL使いたい人が何人かいるのですが、サーバは1台で済ませたく。
851NAME IS NULL:2005/11/12(土) 00:03:13 ID:???
会社で使うんだったら容量制限なんてしなくてもいいのでは?
テスト用サーバとかなら、なおさら余裕有る方が安心してテストできるような気が。
852NAME IS NULL:2005/11/12(土) 00:59:22 ID:8s5Xp8OJ
MySQL control centerをダウンロードしようと思ってるんですが
なぜか、MySQL administratorのページに飛ばされてしまいます。

MySQLCCのダウンロードページを張ってもらえませんか?
853NAME IS NULL:2005/11/12(土) 01:31:13 ID:???
>>852
http://downloads.mysql.com/archives.php?p=mysqlcc

MySQLAdminに飛ばすのは意味があってやってることなので
今更MySQLCCを敢えて使うのに意味があるのか?ちゅう感じだが。
854NAME IS NULL:2005/11/12(土) 11:13:20 ID:???
>847

http://www.faqts.com/knowledge_base/view.phtml/aid/648/fid/94

結局のとこ、MySQL単体ではその機能はないけど、
DB毎にユーザを作成し、そのユーザに対するquota でどうよ、
って所らしい。(斜め読み)

UNIXらしいといえば、らしい解決方法だなぁ。
855852 日曜プログラマー:2005/11/12(土) 12:18:00 ID:8s5Xp8OJ
>>853
あ、データベースの操作もadminからできるんですね。

今まで、データベースって言ってたのが、5.0からスキーマって言う言葉に代わってるんですね。
856ヘルプ:2005/11/12(土) 14:29:20 ID:5aSo15tf
だれか助けて下さい。
文字化けで困っています。どこのサイトを検索しても解決できません。
環境は PHP5 + MySQL + WindowsXP(IIS) で
フォームの内容をMySQLに「日本語」と書き込むと
フォーム送信の内容($_POST)はちゃんと「日本語」と表示されますが、
登録した内容を表示は「逓?{??」となってしまいます。
「php.ini」「my.ini」もSJISに統一したりEUC-JPに統一してみたり
してるのですが全然解決せず困っています。
だれか助けてください。
857ヘルプ:2005/11/12(土) 14:32:45 ID:5aSo15tf
ちなみに「mysql_client_encoding」っていうPHPの関数で
接続したMySQLのエンコーディングを調べたら
「latin1_swedish_ci」とでました。
この辺がおかしい気がします…。
858NAME IS NULL:2005/11/12(土) 14:37:26 ID:???
859NAME IS NULL:2005/11/14(月) 01:43:42 ID:+Vq9ufzG
誰か俺に問題点を教えてください。
LAN上の別のマシンからアクセスしようとしたら接続できません。
サーバークライアントともマシンはWindowsで、MySQLのバージョンは5.0.15-ntです。
telnet "マシン名" 3306
は、ローカルにやると接続できて、別のマシンからは接続できません。
なぜですか?
860NAME IS NULL:2005/11/14(月) 01:49:26 ID:???
答えでてるじゃないか。
ローカル以外の権限がないんだろ?
861NAME IS NULL:2005/11/14(月) 03:35:02 ID:???
>>859
接続できないと貴方が判断した理由(要因)は如何に?
そんくらい明示汁
862NAME IS NULL:2005/11/14(月) 03:40:36 ID:???
telnet hoge 3306 で接続できないってことはMySQLによるユーザ認証以前の問題だろ。

F/Wとか、マシン名の解決とかその辺を一辺整理したほうがいいよ。
863NAME IS NULL:2005/11/14(月) 09:39:14 ID:xQifeiUn
質問です。
show table statusでレコード数をrowsで求めようとしたのですが、実際にテーブルから読み出した数と違うときがあります。
これは何が原因なのでしょうか.
864859:2005/11/14(月) 12:27:33 ID:+Vq9ufzG
>>862
pingは通るんですよ。
LAN内にファイアウォールはないし。
サーバーのOSがWindows XPのHome Editonなのって関係ありますかね?
865NAME IS NULL:2005/11/14(月) 12:44:26 ID:???
>>864
Windowsファイアウォールには穴を開けているのか?
866859:2005/11/14(月) 13:00:30 ID:???
>>865
穴あけたら通りました。
データベースと関係ないミスですみません。
助かりました。
867NAME IS NULL:2005/11/14(月) 16:40:47 ID:6uYHf5vX
指定したcsvのファイルを自動で定期的に
インポートしなおしたりすることはできますでしょうか?
868NAME IS NULL:2005/11/14(月) 17:14:55 ID:???
>>867
cronとかでmysqlとかmysqlimportを回せば容易に可能。
869NAME IS NULL:2005/11/14(月) 21:13:21 ID:???
64bit環境でMySQL使ってる人いますか?
870NAME IS NULL:2005/11/15(火) 13:06:05 ID:???
>>863
InnoDB 使ってて、結果セットが巨大な時は概算になる可能性がある。
それじゃないか?
871NAME IS NULL:2005/11/15(火) 15:19:39 ID:???
>>869
どこの64bit環境か知らんけど、FreeBSD/amd64でMySQL4.0入れて
一日がしがし動かしたことあるけどふつーに動いてたが…
872NAME IS NULL:2005/11/15(火) 22:51:00 ID:e6XaRFFy
うちはAIX/p5で動かしてるけど,RHEL4/XEON64の方がパフォーマンスいいな
873NAME IS NULL:2005/11/15(火) 23:26:31 ID:???
>>867
CSV Engine使ってみれば
874NAME IS NULL:2005/11/16(水) 03:43:04 ID:???
メモリ増やしたので、innodb_buffer_pool_sizeを増やそうと
思うのだけど、それに合わせてinnodb_log_file_sizeを増やすと、
ib_logfile0のサイズが違うと起動してくれません。 このサイズを
増やすのってどうすれば良いのでしょう?
--skip-innodbで起動して削除? --skip-innodbが根拠無く怖い。。

あとinnodb_buffer_pool_sizeとkey_bufferとにどんなパランスで
割り当てるのが良いのかな?
875NAME IS NULL:2005/11/16(水) 03:43:42 ID:???
my.conf
876869:2005/11/16(水) 13:11:48 ID:???
>>872
http://dev.mysql.com/doc/refman/4.1/ja/linux.html
ここにLinuxで使う場合の同時接続数の問題が書いてありますが、
64bit環境でも関係あるんでしょうか?
64bit用のバイナリパッケージはダイナミックリンクのやつしかなくて、判断付かないんですが・・・
877NAME IS NULL:2005/11/16(水) 17:01:11 ID:???
すいません。質問があります。
検索キーワードの検索対象がテーブル2のDの列と、テーブル3のFの列で
該当するレコードが含まれている、テーブル1のレコードを表示させたいのですが、
どの様にすれば効率が良いのでしょうか。

下記の場合で「hoge」と検索すると
まず、テーブル2に当てはまるのが「a」と「b」。
テーブル3に当てはまるのが「cc」。
で、テーブル1で「a」と「b」が含まれているのは「1」と「2」で
同じく「cc」が含まれているのが「1」。
それを検索結果として表示させる。

テーブル1
A B C
─────
1 a,b,c aa,bb,
2 a,b bb,cc
3 c aa

テーブル2
D E
─────
a hoge
b hogehoge
c moge

テーブル3
F G
─────
aa mori
bb morimori
cc hogemori
878877:2005/11/16(水) 17:04:28 ID:???
色々とやってみたのですが、
・検索キーワードが複数ある場合
・テーブル2とテーブル3で該当レコードが複数ある場合
(上記例だと「hoge」で検索した場合、テーブル2で2レコード該当)

ここらへんの処理でとまどっています…。
やはり何回もsql文を繰り返さなければいけないでしょうか。
どうか御教授お願いします。
879NAME IS NULL:2005/11/16(水) 17:44:26 ID:???
>>877
質問
・例では、"cc" が含まれているのは "1" となっているが、"2" の間違いではないか?
・結果的に表示したいのは、"2" だけ?、"1" と "2" 両方?
・確認用で聞くが、検索条件を "mo" とした時、期待する結果は?
・MySQLのバージョンは?
880877:2005/11/16(水) 17:54:36 ID:???
お返事ありがとうございます。分かり辛い内容で申し訳ないです…。

>・例では、"cc" が含まれているのは "1" となっているが、"2" の間違いではないか?
「2」の間違いです…。
で、結果的に表示したいのは「1」と「2」の両方です。

>・確認用で聞くが、検索条件を "mo" とした時、期待する結果は?
テーブル2で「mo」があるのが「c」。
→テーブル1のB列で「c」があるは「2」

テーブル3で「mo」があるのが「aa」「bb」「cc」。
→テーブル1のC列で「aa」「bb」「cc」があるのは「1」「2」「3」

結果:「1」「2」「3」

MYSQLのバージョンは4.0.20です。
881877:2005/11/16(水) 18:07:49 ID:???
>>880
テーブル2で「mo」があるのが「c」。
 ×→テーブル1のB列で「c」があるは「2」
 ○→テーブル1のB列で「c」があるは「2」と「1」
だと思うんだが…

自信はないが、これでどうだろう?

SELECT DISTINCT t1.*
FROM t1, t2, t3
WHERE
t2.E LIKE '%hoge%'
AND t3.G LIKE '%hoge%'
AND (FIND_IN_SET(t2.D, t1.B) > 0 OR FIND_IN_SET(t3.F, t1.C) > 0);
882881:2005/11/16(水) 18:09:53 ID:???
>>881
あっ、違った。

テーブル2で「mo」があるのが「c」。
 ×→テーブル1のB列で「c」があるは「2」
 ○→テーブル1のB列で「c」があるは「1」と「3」
だと思うんだが…
883NAME IS NULL:2005/11/16(水) 18:29:59 ID:erNhWRfH
Aというデータベースの中にあるtable1と、Bというデータベースの中にあるtable2を
Inner Join することはできませんか?
できるとするとどうやりますか?
884NAME IS NULL:2005/11/16(水) 20:04:27 ID:???
>>883
公式に書いてあるから。
わからなくなったらマニュアルを目を皿にして読むようにするべし。
http://dev.mysql.com/doc/refman/4.1/ja/select.html
885877:2005/11/16(水) 20:33:33 ID:???
>882
>テーブル2で「mo」があるのが「c」。
>×→テーブル1のB列で「c」があるは「2」
>○→テーブル1のB列で「c」があるは「1」と「3」
また間違えました…。正しくその通り。

で。>881を元に色々とやったのですが上手く動作せず…。
ヒットするはずのテーブルが該当しないです…。
886NAME IS NULL:2005/11/16(水) 21:16:02 ID:???
>>876
それは昔のRHのglibcに問題があるてこと
だからABはLinuxThreadのPatchを提供してたから

ある人たちは変なglibc(RH)を使うなと言ってたし
887NAME IS NULL:2005/11/16(水) 21:38:22 ID:c/MFEjm7
すみません
レンタルサーバー上でSQLがうまく動かないのですが
質問はどの板にいけばよろしいのでしょうか
888877:2005/11/16(水) 22:09:34 ID:???
んー。>881さんのお陰でここまで出来ました。

SELECT DISTINCT t1.*
FROM t1, t2, t3
WHERE
(t2.E LIKE '%hoge%' AND FIND_IN_SET(t2.D, t1.B) > 0)
OR
(t3.G LIKE '%hoge%' AND FIND_IN_SET(t3.F, t1.C) > 0)

これで希望の動作をしているっぽいです。
ただ、これで該当件数をcount(*)で取得しようとすると
(上記の例だと「1」「2」「3」の3つが該当しているから“3”)
テーブル2とテーブル3のレコード数の合計が出てしまいます。
上記の構文って無駄な動きをしているんでしょうか。
889NAME IS NULL:2005/11/17(木) 03:51:09 ID:???
>>887
レンタル鯖板
890NAME IS NULL:2005/11/17(木) 05:05:13 ID:???
質問させてください。
ランダムな数字のデータが入っていて(中には重複した数字もある)
重複したデータを削除して表示させたいのですがどうしたらいいでしょうか?
891NAME IS NULL:2005/11/17(木) 07:38:05 ID:???
>>877
どちらにしてもテーブル1は元々有って変えられないのかもし
れないが変な設計だぁね。(テスト課題かなんか?)
ちゃんと動くSQLできてもすんげーパフォーマンス悪いだろーなぁ。
892877:2005/11/17(木) 09:36:56 ID:???
んー。テスト課題ではないんですがね。
例えばテーブル1が商品情報として、
その商品の特徴とかのピクトを
テーブル2とテーブル3に(ピクトの説明なども一緒に)格納して、
テーブル1にはそのIDだけを当てはめているんです。
で。商品を検索するとき、その特徴で文字列検索した場合の
検索SQLを考えていたんです
そのピクトは全商品共通なんで、ピクト情報全部を
テーブル1に突っ込むのも無駄かなぁと思ったんで別テーブルにしたんですが、
パフォーマンス悪いですかねぇ…。
まだ設計段階なんですが、どの様な構成が良いですか…?
893891:2005/11/17(木) 10:34:37 ID:???
>>892
カテゴリーの割り当てね。そうだろうとは思った。
昔自分でガリガリ読み書きしてた頃はこういう設計してましたけどね。

この場合は、テーブル (1) と (2,3) の間に、もう1つ「割り付け用」の
テーブルを用意。
1,a
1,aa
3,c
と書いてけば、1個でも1000個でも割り当てられまっしゃろ。

あと連結キーは、文字列か整数かではパフォーマンスがおっとろしく違うので、
テーブル2,3のキーは aa とかは避けるべきですね。
894877:2005/11/17(木) 11:26:19 ID:???
>893
まだSQLは勉強中なんでためになります。

>この場合は、テーブル (1) と (2,3) の間に、もう1つ「割り付け用」のテーブルを用意。
>1,a
>1,aa
>3,c
これってテーブル1に割り付けられているものを1行ごとに書いていくんですか?
例えばテーブル1の1の場合は
H I
─────
1 a
1 b
1 c
1 aa
1 bb
みたいに? レコード数やカテゴリ数が増えると、けっこうなレコード数になりますね。
で。これだと検索する場合に
「テーブル2」と「テーブル3」→「割り付け用テーブル」→「テーブル1」と
流れが遠くなるので遅くなるのかなぁって思っていました…。

>あと連結キーは、文字列か整数かではパフォーマンスがおっとろしく違うので、
そうなんですね。
勉強になりますー。
895869,876:2005/11/17(木) 14:32:31 ID:???
>886
昔のRHのglibcに問題ってのは、STACK_SIZEがデフォルトのままだからって言う意味ですか?
当方Gentoo使ってますので、もしそうだとすると自前でglibc入れ直しってことか…
896NAME IS NULL:2005/11/17(木) 16:22:36 ID:???
アンケート集計をしているのですが、
テーブルに“aaa,bbb,ccc,ddd”などと、カンマで区切られた文字列が入っているとします。
tableA
ID_文字
1_aaa,bbb,ccc
2_bbb,ccc
3_aaa,ccc
これを
$ans[] = array('aaa','bbb')
のような変数の“aaa”か“bbb”のいずれかが含まれている、
というように検索をしたいのですが、
いちいち$ansを分割して

SELECT *
FROM tableA
WHERE FIND_IN_SET('aaa',tableA.文字)
or FIND_IN_SET('bbb',tableA.文字)…

とやっていたのですが、$ansに含まれている文字が多くなるにつれて
sql文が長くなってしまいます…。
“,”で区切られている文字列の比較関数ってあるのでしょうか?

897NAME IS NULL:2005/11/17(木) 16:27:43 ID:???
>>896
ひょっとして >>877の方?
テーブルの設計を見直した方がいいのではないでしょうか?
1 aaa
1 bbb
1 ccc
2 bbb
2 ccc
3 aaa
3 ccc
898896:2005/11/17(木) 16:34:21 ID:???
違いますー。
チェックボックス式のアンケートフォームがすでにあって、
ひとつの設問に対して、複数回答すると
ans1 < aaa,bbb,ddd
みたいにインサートされているんですね。
それの集計結果をリアルタイムに表示させたかったのですが、、、
899NAME IS NULL:2005/11/17(木) 16:37:11 ID:???
ttp://www.itmedia.co.jp/enterprise/0308/24/epn01.html
こんな感じのアンケートフォームです。
この説明だと「'飴'が含まれている」というのに、FIND_IN_SETを使っているのですが、
「'飴'か'チョコ'が含まれている」というので、表示させたいんです。
900NAME IS NULL:2005/11/17(木) 16:59:23 ID:???
つーか、SQL文が長くなると問題あるの? 動作が遅くなるとか?
901NAME IS NULL:2005/11/17(木) 17:21:05 ID:???
>>899
複数回答のアンケートならテーブルは>>897のように縦に持つか、横に持つなら次のようにするべし。
ID、ガム、飴、チョコ
そのサイトの方法はFIND_IN_SETの説明のためにあえてそういう作りにしたもので、
アンケートのように必ず全件スキャンする場合にのみ有効。検索に使う場合には不向き。
902896:2005/11/17(木) 17:40:10 ID:???
>901
そうなんだ。複数回答の場合、回答項目が多くなるにつれ、テーブルが横に広がっていくので、
なるべく、ひとつの項目にまとまる様に
<input type='checkbox' value='aaa' name='ans1[]'>aaa
<input type='checkbox' value='bbb' name='ans1[]'>bbb
<input type='checkbox' value='ccc' name='ans1[]'>ccc
ってやってたけど、、、
これだと、後からテーブルいぢらんとも項目も増やせるし。
そう言われれば、検索(集計)には不向きなのかな…?
903NAME IS NULL:2005/11/18(金) 14:45:49 ID:???
先日から Windows版 MySQL 4.0.26 を使用しています。

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

テーブル名:goods
 goods_id  name       price1
-------------------------------
| G1000001 | MBS 1320-33 | 266 |
| G1000002 | MBS 1310-33 | 574 |
| G1000003 | MBS 1230-22 | 413 |
| G1000004 | MBS 1220-22 | 196 |
| G1000005 | MBS 1210-22 | 315 |
| G1000006 | MBS 1205-22 | 266 |
-------------------------------


テーブル名:price_etc
 customer_ID goods_id  price_sp
-------------------------------
| C1000001 | G1000002 | 100 |
| C1000001 | G1000005 | 200 |
| C1000001 | G1000006 | 150 |
-------------------------------

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

 goods_id  name       price1 price_sp
---------------------------------------
| G1000001 | MBS 1320-33 | 266 |
| G1000002 | MBS 1310-33 | 574 | 100
| G1000003 | MBS 1230-22 | 413 |
| G1000004 | MBS 1220-22 | 196 |
| G1000005 | MBS 1210-22 | 315 | 200
| G1000006 | MBS 1205-22 | 266 | 150
---------------------------------------

下記のように打ち込んでも
select goods.goods_id,name,price1,price_sp
from goods,price_etc
where goods.goods_id = price_etc.goods_id;

下記のように表示されてしまいます。
 goods_id  name       price1 price_sp
---------------------------------------
| G1000002 | MBS 1310-33 | 574 | 100
| G1000005 | MBS 1210-22 | 315 | 200
| G1000006 | MBS 1205-22 | 266 | 150
---------------------------------------

列:price_etc が無い場合は 空白で表示させるには、どうすればいいでしょうか?
初歩的な質問だと思うのですが 教えて下さい。
お願いします。
904NAME IS NULL:2005/11/18(金) 16:21:19 ID:???
>>903
結合がなくても、空欄で表示したいって事ね。
where ではなく、JOIを使えば希望通りのビューができますよ。
JOIN は便利なので、マニュアルの熟読をお薦めする。
905903:2005/11/18(金) 19:16:41 ID:???
>>904

早速の回答有り難うございます。

select goods.goods_id,name,price1,price_sp from goods
left join price_etc on (goods.goods_id = price_etc.goods_id);

で表示できる事が出来ました。
ありがとうございました。

家に転がっていた『Oracle7 SQL入門』って本に where に (+) を付けると
表示できると書いてあったので where の説明Webページばかり読んでました(;´Д`)
この本に JOIN なんて書いてなかったです…(;´д⊂)
906NAME IS NULL:2005/11/19(土) 00:29:39 ID:???
『Oracle7 SQL入門』
MySQL 3.22の本を読みながらOracle10gを使うようなものだな。
907NAME IS NULL:2005/11/19(土) 07:38:21 ID:aX35oZax
文字型とか数字型とかよくわかりません。

↓のような感じのデータベースを登録する場合
----
| 漢字|
| abcd|
| 1111|
| 2222|
----
  ↑の列のフィールドの型は何が適切でしょうか。
とりあえずホームページ上でそのまま表示できる形になればいいのですが。
それとフィールドの名前なんかは適当でも良いのですか?

自分で書いてても説明不足と感じる部分もありますが
どなたか教えてくださいますでしょうか。
908NAME IS NULL:2005/11/19(土) 10:57:07 ID:???
     ∩___∩
     | 丿     ヽ
     /  ●   ● |         
     | U  ( _●_)  ミ   
    彡、    ヽノ ,,/  >>907 まず、文字型と数字型を理解…
    /     ┌─┐´                           
   |´  丶 ヽ{ DB }ヽ                           
    r    ヽ、__)ニ(_丿                   
    ヽ、___   ヽ ヽ
    と____ノ_ノ
909NAME IS NULL:2005/11/19(土) 11:18:39 ID:???
>>907
文字型
123            → いちにさん
123 + 123 =123123 → いちにさんいちにさん

数字型
123          → ひゃくにじゅうさん
123 + 123 = 246 → にひゃくよんじゅうろく

データに合わせた型をどうぞ
910NAME IS NULL:2005/11/19(土) 12:54:22 ID:jS+0sYtY
真面目に解りません。どなたか教えていただけないでしょうか?

データベースExerciseに対して、以下の参照系SQL文(SELECT文)を実行し、実行結果となるようなJavaプログラムSelect.javaを作成する。

SELECT Course_ID, Student_ID, MAX(Grades) FROM Registration GROUP BY Course_ID;

実行結果
% java -classpath .;./ConnectorJ.jar Select
Connected to MySQL Server.
Course_ID = A01, Student_ID = S001, MAX(Grades) = 78
Course_ID = F01, Student_ID = S002, MAX(Grades) = 90
Course_ID = F11, Student_ID = S002, MAX(Grades) = 95
Course_ID = F12, Student_ID = S002, MAX(Grades) = 90
Course_ID = F21, Student_ID = S003, MAX(Grades) = 95
Course_ID = F22, Student_ID = S003, MAX(Grades) = 92
Course_ID = F31, Student_ID = S001, MAX(Grades) = 95
7 rows were returned.
Disconnected from MySQL Server.

お願いします
911NAME IS NULL:2005/11/19(土) 13:11:27 ID:???
>>910
ここまでやってみたんだが…というのであればフォローするけど、丸投げはお断り。
宿題は一人でやりな。
それとスレ違い。Java関連のスレに行け。
912NAME IS NULL:2005/11/19(土) 14:41:52 ID:???
最近「使ってみたんだけどわかりません。使い方教えてください」が増えたのは、
学校の授業で取り上げられるようになったってことなんかねぇ

なんか見る度に疲れが出てくる・・・・
913NAME IS NULL:2005/11/19(土) 14:48:54 ID:???
MySQLって大規模で且タダ厨且自社ASPという需要しかないじゃん。
他所に売るのが目的なら、ライバル?のPostgresとか、最近ならsqliteとかになるのでは?
914NAME IS NULL:2005/11/19(土) 15:38:07 ID:???
>>913
sqliteはないだろうw
915NAME IS NULL:2005/11/19(土) 16:56:37 ID:???
あるよ。なんで?
916NAME IS NULL:2005/11/20(日) 01:25:59 ID:b960UEpN
すみませんどうしても教えて欲しいことがあるんですが、

select 受注No form 受注M で受注Noを取り出し、
while文で、受注Noごとのレコードをあるだけ表示させようと思うんですが、
終了条件が分かりません。
Nullになれば、終了させればいいと思うんですが、文法が分かりません。
よろしくお願いします
917NAME IS NULL:2005/11/20(日) 01:30:52 ID:???
>>916
「あるだけ表示」させるのに、「終了条件」必要な意味が分からん。
というか、perlかphpかvbかC?

MySQLの問題じゃないよね?
問題の切り分けが出来るようにならないと、これから先何も解決できないよ。
918NAME IS NULL:2005/11/20(日) 01:51:07 ID:b960UEpN
>>917
VBです。DataGridで1レコードずつ繰り返し処理で、表示させようと思っています。
一部省略したソースです

Mysql = "select 受注No from 銀行M"
Rs.Open Mysql, Cn 
while () ←ここで、受注Noが取得できなくなると終了させたい
一覧.Row = 0+1 一覧.Col = 0
一覧.Text = Rs.Fields("受注No").Value
一覧.Col = 1
一覧.Text = Rs.Fields("品名").Value
一覧.Col = 2
Rs.MoveNext
wend
Rs.Close

そのためのwhile文の条件式が分からないので教えてください。
919NAME IS NULL:2005/11/20(日) 01:58:09 ID:???
>>918
VB固有の話しじゃんかよ。

ま、さすがに以下のJavaプログラムを作成せよ には度肝抜かれたが
920NAME IS NULL:2005/11/20(日) 02:02:02 ID:???
よーわからんが
Rs.HasNextとかないのか?
Rs.MoveNextがフラグを返したりするかも知れんし
921NAME IS NULL:2005/11/20(日) 08:03:00 ID:dJl4sgts
初歩的な質問なのですが、
データベース以下のテーブルは、
rootデレクトリに全てのテーブルが格納されるのでしょうか?
それともデイレクトリ階層のようなものを、
設けたりする事ができるのでしょうか?
922NAME IS NULL:2005/11/20(日) 08:44:43 ID:???
>>921
おれもそれ知りたい
923NAME IS NULL:2005/11/20(日) 10:25:37 ID:???
使ってみりゃわかる
924NAME IS NULL:2005/11/20(日) 10:25:50 ID:???
そう。いやならDBをわける。
925NAME IS NULL:2005/11/20(日) 10:50:27 ID:???
データベースA
   LテーブルA1
   LテーブルA2
データベースB
   LテーブルB1
   LテーブルB2
しかできないだろうね
926NAME IS NULL:2005/11/20(日) 16:34:16 ID:???
>>918
っ Rs.EOF
927NAME IS NULL:2005/11/20(日) 17:07:31 ID:???
PHPからMyISAMなテーブルを操作しています。
テーブルの説明(EXPLAIN)はどうすれば取得できますか?
928NAME IS NULL:2005/11/20(日) 18:21:02 ID:???
テーブルのなかに更新日時フィールドなんかをつくらずに、phpからテーブルのデータの最終更新日時を取得する方法はありますか?
929NAME IS NULL:2005/11/20(日) 19:00:57 ID:???
>>927 explaine ... のquery送るのじゃ駄目なの?

>>928 俺も知りたいが、方法無いのでわ。
自分は更新日時フィールド使ってやってます。
930NAME IS NULL:2005/11/20(日) 21:43:47 ID:???
>>927-928のどっちもSHOW TABLEで取得できるけど、

PHPからSHOW〜を飛ばしても取得が出来ないかなぁ。
fetch_rowはSELECT専用だった気ガス
931NAME IS NULL:2005/11/20(日) 21:47:09 ID:JWVQQiAq
MYSQLにはやっぱPHPなのか?
誰か答えろ
932 ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄:2005/11/20(日) 22:36:08 ID:???
___ ミ
┌ ┌ | ζ
┌ ┌ |
┌ ┌ |
┌ ┌ |
┌ ┌ |
┌ ┌ |
┌ ┌ |
933NAME IS NULL:2005/11/21(月) 00:29:37 ID:???
931はしんでしまった
934NAME IS NULL:2005/11/21(月) 01:20:50 ID:???
はじめからヒットするレコードが1件と解りきってるときにそのレコードの各フィールドの値を取り出すのに毎回

$sql = "select * from hoge_table where id = 25";
$result = mysql_query($sql);
$rows = mysql_num_rows($result);
while ($row = mysql_fetch_array($result)){
//ここで取り出す
}

こんなことをやってるのですが、もっと簡単にそのレコードの各フィールドの値を取り出す関数があったと思ったんですが、検索してもいまいちわかりません。関数名だけでも教えていただけませんか?
935NAME IS NULL:2005/11/21(月) 01:21:21 ID:???
>>930
showの結果も取れるよ。
936NAME IS NULL:2005/11/21(月) 01:23:08 ID:???
>>934
http://www.php.net/manual/ja/ref.mysql.php
ヘルプも引けないの?
937NAME IS NULL:2005/11/21(月) 02:22:38 ID:???
ごめんなさい、下記@Aのようなテーブルがあって、
Bのような結果がほしいんですけど、どう書けばいいか検討がつきません。
サブクエリが使えない環境のためいろいろ悩みましたが
ちょっとお手上げでした。。。
誰かパッとお答えいただけるようでしたら教えてください。

@matsertb   Auriagetb
id name    id tuki uriage
---------    ----------------
1  aaa001   1  10   100
2  aaa002   1  11   200
3  bbb001   3  10   300
4  bbb002   3  11   400
5  aaa003   4  11   500
          5  10   600
          5  11   700

B結果
a.name b.uriage
------------------
aaa001 300
aaa002 0
aaa003 1300

938937:2005/11/21(月) 02:25:14 ID:???
mastertb.nameがAAAで始まるIDごとの、売り上げを取得したいです。
939NAME IS NULL:2005/11/21(月) 02:38:34 ID:???
>>937
サブクエリはいらんと思うが。。。

select
name, coalesce(sum(uriage), 0) as uriage
from mastertb
left outer join uriagetb on mastertb.id = uriagetb.id
where name like 'AAA%'
group by mastertb.id;
940937:2005/11/21(月) 03:01:36 ID:???
>>939さん
ありが追うございます。
ごめんなさい、説明間違えました。。。
keywordtb.keywordがxxxで始まるIDごとの売り上げがほしいのですが、
keywordtbレコード数×uriagetb レコード数分合計が出てしまい、
計算が合いません。

@matsertb     Akeywordtb
id name      id keyword
---------      -------------------
1  aaa001     1 xxx0001
2  aaa002     1 xxx0002
3  bbb001     1 xxx0003
4  bbb002     2 yyy0001
5  aaa003     3 xxx0001
            3 xxx0002
Auriagetb
id tuki uriage
----------------
1  10   100
1  11   200
2  10   300
3  11   400
4  11   500
5  10   600
5  11   700


B結果
a.name b.uriage
------------------
aaa001 300
bbb001 400

941NAME IS NULL:2005/11/21(月) 11:28:16 ID:kgOtiYdS
MySQL5,1っていつ頃出るか皆目見当つきませんか?
942NAME IS NULL:2005/11/21(月) 12:15:24 ID:???
idc1c2c3
10013
1012
102123



idc
1001
1003
1012
1021
1022
1033

このようにテーブルを変換したいのですが、
どのようにSQLを書けばいいのでしょうか?
943NAME IS NULL:2005/11/21(月) 12:30:49 ID:???
>>942
スペースが除去されてしまって、カラムの区切り位置が判りませぬ
944NAME IS NULL:2005/11/21(月) 12:55:02 ID:???
>>943
すみません。


id c1 c2 c3
100 1 3
101 2
102 1 2 3



id c
100 1
100 3
101 2
102 1
102 2
103 3


です。
945NAME IS NULL:2005/11/21(月) 16:13:39 ID:STvFOXar
>>931
Mysqlが使えるところでも、
PerlのDBIモジュールがなぜか
入ってないところがあるからかなぁ?
phpの構築優先、Perlは2の次って感じかも。

おいらはPerlでも使ってるけど。
946NAME IS NULL:2005/11/21(月) 17:14:00 ID:TgU/MA2m
キャラクターセットを調べるコマンドってありますか?
utf8やlatin1などと出てくると思うのですが
947NAME IS NULL:2005/11/21(月) 21:21:18 ID:???
>>945
PHP4はデフォでMySQLが使えるけど、PerlはCPANからインスコしないといけないからかな。
PHP5ではSQLiteに変更になっちゃったけど。
948NAME IS NULL:2005/11/21(月) 21:59:13 ID:STvFOXar
>>947
なるほど、PHPは最初から使えたのね。
949940:2005/11/22(火) 00:24:22 ID:???
自己解決。
上のほうで出ていたTemporaryTableが意外と難しくなかったため、そちらで回避しました。
どうもありがとうございました。
950930:2005/11/22(火) 01:28:00 ID:???
>>935
ほんとだ。
Pearからquery("SHOW TABLE STATUS LIKE 'テーブル名'")
でヘッダが取得できた。こりゃ便利だ
951NAME IS NULL:2005/11/22(火) 08:04:17 ID:???
>>950
SHOW に限らず結果セットを返してくる SQL 文は
全部 SELECT と同じように使えるよ。
952NAME IS NULL:2005/11/22(火) 19:58:44 ID:???
すみません、英語のマニュアル等をみたり、ググってみても
ちょっと見つからなかったので質問させていただきます。

当方phpMyAdmin 2.7.0-beta1+MySQL 5.0.15(win版)を
WinXpProで稼動しているのですが、phpMyAdminの画面で
ビューならびに、トリガー、ストアドプロシージャの作成は
SQLコマンド画面から直接コマンドを送る以外に、GUI操作
で簡単に作成できるような機能はまだ実装されていないの
でしょうか?

また同様に外部キーの設定もSQLコマンドを直接送るしか
ないのでしょうか?
953NAME IS NULL:2005/11/22(火) 20:47:53 ID:???
>>944
これだ゛れかおしえてください。
954NAME IS NULL:2005/11/23(水) 00:52:40 ID:???
>>944
ビューってより、テーブルを作り替えるってことでしょうか?
955NAME IS NULL:2005/11/23(水) 01:12:18 ID:???
>>944
新しくテーブルを作ればよいの?
create table t2 select id,c1 from t where c1 is not null
union select id,c2 from t where c2 is not null
union select id,c3 from t where c3 is not null;
956940:2005/11/23(水) 01:14:35 ID:YAMI2oR6
>>953
苦肉の策ですが。

create temporary table tmptb
(id varchar(3) ,
cvarchar(1) ,
PRIMARY KEY (id , c )
);
insert into tmptb select id as id , c1 as c from tb1 where c1 != "" ;
insert into tmptb select id as id , c2 as c from tb1 where c2 != "";
insert into tmptb select id as id , c3 as c from tb1 where c3 != "";
select * from tmptb order by id , c;
957940:2005/11/23(水) 01:18:15 ID:???
>>955
スマートですね。。
958NAME IS NULL:2005/11/23(水) 13:41:37 ID:???
>>954-956
テンポラリーなテーブルを作らずに、任意のcを抽出したいのですが、
素直に最初のテーブルの状態で

c1=1 or C2=1 or ....

とやるのがいいのでしょうか?
それともテンポラリーなテーブル作った方がいいでしょうか?
959NAME IS NULL:2005/11/23(水) 13:59:14 ID:???
>>958
それで用が足りるならそれでいいんでは?
960NAME IS NULL:2005/11/23(水) 17:27:11 ID:zX9bGfyz
PHP使ってDBの負荷を観測しようかと考えてるのですが…

Questions,7967029
Uptime,53941

QuestionsをUptimeで割れば混雑具合が分かるのでしょうか?
961NAME IS NULL:2005/11/23(水) 17:29:27 ID:???
>>959
いや、元々はc1からc5まであって、
抽出するときの条件が複数になるから、
二つめの形になったものをSELCTしたほうが簡単に書けるかなと思って。
962NAME IS NULL:2005/11/24(木) 02:52:48 ID:Y4TFTONw
txtファイルを再度インポートした際に上書き?できるようにしたいのですが
どういった方法がありますか?

name
-----
a←
b← のデータに上書きするような感じです
c←
↓に追加されるのでなく


963NAME IS NULL:2005/11/24(木) 07:57:29 ID:???
>>962
nameをuniqueにして、insertの代わりにreplaceを使う
964NAME IS NULL:2005/11/24(木) 22:04:51 ID:???
SELECT id,fa,mmc FROM tb WHERE id=1
UNION
SELECT id,fa,mmc FROM tbORDER BY mmc LIMIT 100, 30;
100は可変

id=1と、100番目から30個取得したい場合、2回SELECTするしかないのでしょうか?
また、上の場合id=1の行がかならず先頭に来ることは保証されていますか?
965NAME IS NULL:2005/11/25(金) 01:19:34 ID:???
phpとmysqldが別のサーバにインストールされている場合
php mysql間の通信は暗号化されているのでしょうか。
966NAME IS NULL:2005/11/25(金) 02:07:47 ID:ECnAQf/t
| 何について調べますか?
| ┌────────────┐
| | お前を消す方法       |
| |                  |
| └────────────┘
| [ オプション(O) ]   [ 検索(S) ]
|
`──────────┐ ┌───
           , '´l,  ..| ./
       , -─-'- 、i_  |/
    __, '´       ヽ、
   ',ー-- ●       ヽ、
    `"'ゝ、_          ',
      〈`'ー;==ヽ、〈ー- 、 !
       `ー´    ヽi`ヽ iノ
                ! /
              r'´、ヽ
              `´ヽノ



           , '´l,
       , -─-'- 、i_
      , '´○ _ ○  ヽ、
      i    /  |     ヽ、
       ゝ ├-┤       ',
      〈`'ー;==ヽ、〈ー- 、 !
       `ー´    ヽi`ヽ iノ
                ! /
              r'´、ヽ
              `´ヽノ
967NAME IS NULL:2005/11/25(金) 03:25:23 ID:pnUQMbxe
Acsessでlinux上のmysqlに接続ってできますか?
968NAME IS NULL:2005/11/25(金) 04:38:54 ID:pnUQMbxe
できるみたいでした。スレ汚しすいませんでした
969NAME IS NULL:2005/11/25(金) 09:53:43 ID:???
>>965
されてない。必要なら自分でSSL噛ますようにしないと駄目。
その手のドキュメントが存在した気がする。
970NAME IS NULL:2005/11/25(金) 10:00:43 ID:JqnBQ7af
以下のようなSQL文で、
日付の比較に時間がかかっています。

select * from aaa where start <= '2005-11-25'
and end >= '2005-11-25'

チューニングする方法はあるでしょうか?

971NAME IS NULL:2005/11/25(金) 13:40:58 ID:???
インデックス張るとか
972NAME IS NULL:2005/11/25(金) 18:23:30 ID:???
>>970
'2005-11-25' をキャストしたった方が速い様な気も
するけど、MySQLが最適化してる気もする。
 あと出てくる2つの日付はいつも同じ?
なら ... and end>=start のが速そうですね
973NAME IS NULL:2005/11/25(金) 19:38:05 ID:???
end >= start と end >= '2005-11-25' は全然意味が違うと思うのだが。
974NAME IS NULL:2005/11/25(金) 20:57:04 ID:???
諸兄には余りに初歩的なのかも知れませんが一つ教えて。現在Win版で勉強中なんですけど、
Linuxにインストールしてwinのクライアントから日本語データを入れる場合って日本語の設定ってどうするの?
975NAME IS NULL:2005/11/25(金) 22:53:24 ID:???
mysql のアップグレードに失敗してどういう訳か再インストールもままならず、
mysqlhotcopy なども利用できないのでしょうがなくとりあえず
データベース用のディレクトリをそのままバックアップして OS の再インストールをしたいと考えてます。

使っていたバージョンは MySQL 3 でして、 OS 再インストール時には ver 4 以降を利用したいと思っているのですが
この場合データベース用のディレクトリをそのままコピー&ペーストでテーブルの完全な引継ぎは可能でしょうか?

どなたか教えてください。
976NAME IS NULL:2005/11/26(土) 06:12:34 ID:???
サブクエリーを使わずに「集計してから結合」ってできます?


select 社員マスタ.入社年度, 社員マスタ.氏名, a.時数計, a.売上計
from
(SELECT 社員ID, Sum(時数) AS 時数計, Sum(売上額) AS 売上計
FROM 売上データ
WHERE 日付 Between '3/1/2001' And '3/31/2001' group by 社員ID) as a

left join 社員マスタ on 社員マスタ.社員ID = a.社員ID order by 社員マスタ.
入社年度

こーいうことがしたいんですけど、ウチの鯖のMySQLは4.0.26なんですよね・・・・
結合してから集計だとどうやっても集計が何重も無駄に重なって正しくカウントされない(´д`)
977NAME IS NULL:2005/11/26(土) 06:58:58 ID:2dGwNsu1
xamppでphpMyAdminとMySQL5.0をインストールしました。
phpMyAdminのキャラクタセットをeuc-jpにしたいのですが、
$cfg['DefaultLang'] = 'ja-euc';
$cfg['DefaultCharset'] = 'euc-jp';
と変更しても、選択メニューにutf-8しか出てきません。
これは「4.1以上はutf-8しか想定してません」という意味でしょうか?
いっそutf-8で使おうかとも思うのですが問題はないものでしょうか?
978NAME IS NULL:2005/11/26(土) 08:16:51 ID:???
>>977
SET NAMES ? などでクライアント側エンコーディングを指定すると
サーバー側エンコーディングを使って SELECT 時に
自動変換されるので特に問題ない
979NAME IS NULL:2005/11/26(土) 13:23:50 ID:igepm8sw
0で始まる9桁の数字をchar型で入れようとしても
最初の0が抜けて入ります。
解決方法教えてください。エロいひと。
980NAME IS NULL:2005/11/26(土) 13:41:28 ID:???
>>979
INSERTする時、' で囲っていないとか。

INSERT INTO t VALUES(003) → 3 が書き込まれる
INSERT INTO t VALUES('003') → 003 が書き込まれる
981NAME IS NULL:2005/11/26(土) 14:12:42 ID:igepm8sw
>>980
それで解決しました!
どうもありがとうございました。
982NAME IS NULL:2005/11/26(土) 14:32:59 ID:???
>>979
000000001が00000001になるのかと思ったよ。
983NAME IS NULL:2005/11/26(土) 21:09:10 ID:???
>>960-976の質問にも答えてください(><)
984NAME IS NULL:2005/11/27(日) 00:48:24 ID:???
>>979
0フィルってのも楽でいいよ
985NAME IS NULL:2005/11/27(日) 02:51:39 ID:???
http://www.mysql.gr.jp/frame/modules/bwiki/index.php?FAQ

ここマジで役に立つね
文字化け問題でストレスたまりまくりだったけど
何とかまともに動くよーになった
作った人たちに感謝
986NAME IS NULL:2005/11/27(日) 14:44:16 ID:???
mysql4.1.13でtextでフィールド作るとblobになっちゃうのはなぜ?
987NAME IS NULL:2005/11/27(日) 17:34:33 ID:qkh6/+hT
MySQL 5.0.16-nt(Windows版)で、VARCHARに英数字だと
正常に挿入できるのに日本語をINSERTしようとすると、
ERROR 1406 (22001): Data too long for column 'str' at row 1
と言うエラーが出てINSERTに失敗するのですが、解決策は無いのでしょうか?
全部TINYBLOBとかで解決するのはあまりにも悔しい…。

ちなみに、「show variables like 'char%'」の結果は
character_sets_dirを除いて全てutf8です。
988NAME IS NULL