MySQL 総合 Part23

このエントリーをはてなブックマークに追加
943NAME IS NULL:2013/07/25(木) 20:49:46.73 ID:???
ちんちんの話題でレスが流れまくって追えなくなるんならまだしも、もともと過疎なんだからそんなに気にすることもないと思うけど
944NAME IS NULL:2013/07/25(木) 22:42:07.81 ID:???
Spiderってそんな必死になってまで使うもんなのかな?
お遊びで試すならいいけど、永久開発版ってイメージが。
945NAME IS NULL:2013/07/26(金) 10:34:35.30 ID:???
>>943
ビルドの話になるとちんぷんかんぷんなので
ちんちんの話と区別がつかないんじゃないかな
946NAME IS NULL:2013/07/26(金) 14:24:48.10 ID:+B9xyxW0
一般論として、int(11)とchar(2)だと、どちらがパフォーマンス(メモリとか検索速度とか)がいいと思いますか?

具体的には、国コードの値を数値で保存するか2文字のアルファベットにするか考えてます。

例えば日本だと、392かJPになります。
947NAME IS NULL:2013/07/26(金) 18:31:51.92 ID:???
>>946
まあ数値ですな
948NAME IS NULL:2013/07/26(金) 21:33:00.47 ID:???
差があったとしても誤差程度。空間効率はCHAR(2)の方が良い。
949NAME IS NULL:2013/07/26(金) 22:09:15.05 ID:???
intだとなぜ11桁に膨れ上がるか不思議
950NAME IS NULL:2013/07/27(土) 00:32:39.01 ID:???
tinyint,smallint
951NAME IS NULL:2013/07/27(土) 06:04:51.70 ID:???
国コードはSMALLINT
952NAME IS NULL:2013/07/27(土) 08:57:57.47 ID:???
>>944
悪くないんだけど、JOINとかのパフォーマンスが致命的。
業務で1テーブル1000万件とかを扱うのは無理。
953NAME IS NULL:2013/07/27(土) 14:05:48.79 ID:???
spiderって何に使うの?
954NAME IS NULL:2013/07/29(月) 17:58:35.81 ID:BusOCDW5
MySQL Connector/C 6.1でプログラムを書いているのですが
mysql_options(&mysql, MYSQL_SET_CHARSET_NAME, "utf8");
とやっても????になって文字化けしているようです。

件数はあっているようなので接続やSQLの実行はできていそうなんですが
文字化けが治りません。どこらへんがあやしいでしょうか
955NAME IS NULL:2013/07/29(月) 18:30:58.81 ID:???
データベースはutf8なのにmysql_options(&mysql, MYSQL_SET_CHARSET_NAME, "sjis");にしてやらないと
文字化けするみたい、謎
956NAME IS NULL:2013/07/29(月) 19:15:36.82 ID:BusOCDW5
utf8で結果を取得したいのですが、どなたか教えていただけませんか
957NAME IS NULL:2013/07/30(火) 04:03:05.07 ID:???
utf8で取得できていないと判断した根拠が見えないなぁ。
utf8で取得できてるんじゃないの?
958NAME IS NULL:2013/07/30(火) 06:32:01.32 ID:23oI6gWg
>>957
ちょっと調べてみます。sjisの取得するソースを参考にしたので
配列がsjisの型になってるかもしれません。
959NAME IS NULL:2013/07/30(火) 08:53:36.63 ID:0xJ0btsb
??utf8ベースでプログラム作ってるはずなのに、sjisでmysqlから取得すると文字化けしませんでした。

??納得できないデータベースもutf8でプログラムもutf8なのになんでMySQL Connector/Cだけsjis??
960NAME IS NULL:2013/07/30(火) 09:28:54.42 ID:???
SJISで取得できてるってことは、その確認してる環境がSJISなんじゃないの?
961NAME IS NULL:2013/07/30(火) 09:54:06.86 ID:???
Unicode 文字セットを使用するになってますね。ただしソースはsjisになってます。

ソースのせい?
962NAME IS NULL:2013/07/30(火) 10:47:01.40 ID:???
>>958
utf8のカラムにsjisのバイト列が入ってるか、
sjisのカラムにutf8のバイト列が入ってるかのどっちかと予想。
963NAME IS NULL:2013/07/30(火) 12:37:32.05 ID:0xJ0btsb
>>962
ダンプして確認してもUTF8の形式のテキストにUTF8の指定がされてて日本語は化けてないので
データベースのほうはいいと思います。
964NAME IS NULL:2013/07/30(火) 15:57:51.52 ID:???
うまくいかないorz
MySQL Connector/C使ってる人はutf8使えているんですか?

そもそも引数がconst charなのに戻り値がutf8とか変じゃないんですか

もうあきらめてMySQL Connector/C++を試してみようかな
965NAME IS NULL:2013/07/30(火) 16:17:03.33 ID:???
なんかいろいろ勘違いしてるだけな気がする
レスのあちこちにおかしいところがあるので・・・

こっちで試すだけの材料出せる?
966NAME IS NULL:2013/07/30(火) 16:23:20.79 ID:???
一応言っておくけど、
WindowsのUNICODEはUTF16で、UTF8とは別だからね
その辺わかってる?
967NAME IS NULL:2013/07/30(火) 16:31:34.12 ID:???
>>966
わかってませんでした。すみません。
968NAME IS NULL:2013/07/30(火) 17:59:10.36 ID:???
_tprintf(L"%s\n", CW2T(CA2W(record[1], CP_UTF8)));
で取れました。お騒がせしました。
969NAME IS NULL:2013/07/30(火) 18:32:28.21 ID:???
>>968
Windowsのことさっぱりわからないからそれが謎の文字列に見えるが、それで最終解決なの?
970NAME IS NULL:2013/07/30(火) 18:47:20.79 ID:???
>>969
はい、こんな感じでうまく出ました。
while (record = mysql_fetch_row(results)) {
_tprintf(L"%s\n", CW2T(CA2W(record[1], CP_UTF8)));
}

めんどくさかったのでマクロを使ってUTF8→UTF16→TCHARにしてます。

これから逆に命令を作りますが次はこんな感じになるのかな
CT2A(_T("SQL"), CP_UTF8)
971NAME IS NULL:2013/07/31(水) 12:41:55.01 ID:???
ATLのマクロか、、、やってみてうまくいかないならそれなりのスレで聞くのがいいかも
972NAME IS NULL:2013/08/02(金) 10:56:27.05 ID:???
長年疑問だったことを質問させてくれ
innoDBのibdataは巨大1ファイルと2Gくらいのファイル沢山とだったら、
どっちがパフォーマンス良くなるんだ?

前提はSSDとして、教えてくだされ
973NAME IS NULL:2013/08/02(金) 11:41:34.48 ID:???
ファイルシステムレベルではext3/4の場合
4GBのところで間接参照の段数が増えるので、そこで差が出る。
http://www.atmarkit.co.jp/ait/articles/0306/24/news002_2.html

でもSQLの処理そのものに比べればごく短い時間の差になるはず。

それとMySQL 5.6からinnodb_file_per_tableがデフォルト有効に
なったので、もう考える意味がない。
974NAME IS NULL:2013/08/02(金) 13:09:43.81 ID:0Gsm/tnE
CA2T(record[1], CP_UTF8)でもいけたのでいちょうご報告
975NAME IS NULL:2013/08/02(金) 14:23:41.58 ID:???
>>974
>>968でなんでA->W->Tって二段階に変換する必要があるんだろうと思ったんだけど、
やっぱり直接いけますか。
多分Windows+MySQLの仕事はしないと思うけど、すっきりしたよ。
976NAME IS NULL:2013/08/09(金) 16:32:10.33 ID:MjVUqmJh
SHOW CREAT TABLE で、AUTO_INCREMENT を
出力しないようにするにはどうすれば良いですか?
977NAME IS NULL:2013/08/09(金) 23:41:24.70 ID:???
>>977
ない。
978NAME IS NULL:2013/08/09(金) 23:51:09.80 ID:???
仕様が気にくわないならビルドすればいいじゃない
979976:2013/08/10(土) 01:15:59.80 ID:MBKbovHP
>>977

ありがとうございます。
MySQLに限らないですが、何かが出来ないという知識を得ることは
何かが出来る場合の知識を得ることに比べて難しく感じているので
とても有難いです。

もうひとつ教えていただきたいのですが、どこでその知識を得ましたか?

どこかに明示されているのでしょうか。
あるいは既知の情報から導き出されたものなのでしょうか。

基本的には公式のマニュアルを読むようにしているのですが、
深く理解するには色々とむずかしいことが多いです。
980NAME IS NULL:2013/08/10(土) 09:24:26.00 ID:MBKbovHP
ビープ音を鳴らすだけのコマンドってないでしょうか?

長時間のタスクが終了したときに音で教えてくれると助かるので、
いつも時間のかかるコマンドに続けてエラーが出るコマンドを打つことで
ビープを発生させています。

ただ、このやり方はあまり気持ちいいものじゃないので、
もしかして音だけを発生させるような仕組みがあるのかな
と思い質問させて頂きました。
981NAME IS NULL:2013/08/10(土) 10:36:16.57 ID:???
>>980
>beep
それ、MySQLの仕事か?
やるならshなりbatなりでラップしてやることだと思うが
982NAME IS NULL:2013/08/10(土) 11:23:23.78 ID:MBKbovHP
>>981
コマンドラインで mysql に入っての作業なんですが、そんなことって出来ます?
983NAME IS NULL:2013/08/10(土) 11:30:01.09 ID:???
>>982
beepを消すのしか見つけられなかった
というか、エラーが出コマンドを実行すればいいのではなかろうか
984NAME IS NULL:2013/08/10(土) 11:36:49.13 ID:???
>>980
select '^G';
985NAME IS NULL:2013/08/10(土) 16:31:26.02 ID:???
>>980
SELECT 0x07;
986982:2013/08/10(土) 21:33:50.00 ID:MBKbovHP
>>983
ありがとう。
ですよね。

>>984-985
すまん、たぶん面白いことを行ってるんだろうけど
俺には何が言いたいのか分からない
987NAME IS NULL:2013/08/10(土) 22:57:37.51 ID:???
じゃあふつうに
mysql> \! echo -e '\a'
988NAME IS NULL:2013/08/10(土) 23:28:53.31 ID:???
>>986
select '^G';
^Gは制御文字
Windowsなら、Ctrlキー+Gで入力
Linuxなら、Ctrlキー+Vに続き、Ctrlキー+Gと入力
989NAME IS NULL:2013/08/11(日) 12:50:20.97 ID:???
面白いこととか失礼なやっちゃなw
990NAME IS NULL:2013/08/11(日) 15:24:02.14 ID:???
質問自体が一番面白いこと言ってるのにねw
991NAME IS NULL:2013/08/11(日) 15:51:03.50 ID:???
>>979
基本は英語のリファレンスマニュアル。
「できること」を書いてないケースはほとんどない。

裏取りはソースコード。
992NAME IS NULL
できる限り最良の回答だというのになんてことをw