いっぽんの猟銃のむこうに (DAIZOじいさんとGun)

ヌルめの技術メモとか。フリーランスやってます (http://acez.jp/)

2011-01-01から1年間の記事一覧

FK設定で失敗したときにエラーの詳細を確認する

MySQLが1005番というエラー番号を一律で返しやがるので。 SHOW ENGINE INNODB STATUS; で直前のFK失敗ログが見れます。メモ。

末尾スペースが無視される

全てのMySQL照合は PADSPACE タイプの物だと覚えておいてください。これは、MySQLの中の全ての CHAR と VARCHAR 値が後続スペースを無視して比較されるという事を意味します。 後続文字が剥ぎ取られたり、比較がそれらを無視する場合は、もしカラムが固有の…

CHECK制約貼った時にFK貼るとエラーになる

MySQLの文字列照合はデフォルトでignore caseなのでキー項目にはそれを防ぐためにBINARY句を付与したりしますが、CHECK制約でNOT NULLとか後から付与するとそれがなぜか外れます。(MySQL 5.5)それに気づかずにFKを貼ると文字コードが異なるのでエラーになる…

FK制約が自動生成されるはずなのに Can't create table

罠があってマニュアルだと 参照表の中では、外部キーカラムが同じ順番で first カラムとしてリストされているインデックスが存在する必要があります。もしそのようなインデックスが無ければ、自動的に参照表上に作成されます。 http://dev.mysql.com/doc/ref…

MySQLの文字列型(CHAR, VARCHAR, TEXT)は大文字小文字を区別しない(Ignore Case)

'aaa' = 'AAA' なんでPKにすると余裕でduplicate keyしたりする。すげえ。これを防ぐにはDDLで VARCHAR(20) BINARY; などとバイナリ指定しないといけない。めんどくせえー ちなみにテーブル名とかOracleは大文字小文字を区別しないのは有名だけど、 MySQLもm…

MySQLのストアドルーチンはMySQLエラーコード、エラーメッセージを取得できない

MySQLのストアドルーチン(ストアドプロシージャ、ストアドファンクション、トリガ)は Oracleで言うところのSQLCODE,SQLERRM的なエラーコード、メッセージを取得できないhttp://bugs.mysql.com/bug.php?id=11660 SQL実行したらざっくり「ストアドでエラーに…

Oracle -> MySQL SQL変換メモ

■システム日付 ・Oracle SYSDATE ・MySQL NOW()■日付型→文字列型変換(YYYY/MM/DD) ・Oracle: TO_DATE(TO_CHAR(SYSDATE), 'YY-MM-DD') ・MySQL: DATE_FORMAT( SYSDATE() , '%Y-%m-%d')■TRUNC(日付) ・Oracle TRUNC(SYSDATE) ・MySQL DATE(SYSDATE())■ADD_MONT…

下位バージョンのサーバに上位バージョンのサーバからExpすると ORA-00904: "POLTYP": invalid identifier

10gのDBサーバに11gのクライアントからEXPしたりしようとすると ORA-00904: "POLTYP": invalid identifier って出て途中でアボートする。逆(10gでexpしたものを11gにimp)とかは普通にできるので なんつーか割り切った仕様なんですかね。めんどくせえなー

トリガは値を返せない

RETURN 文は、値を返すことのできないトリガでは利用不可。すぐさまトリガから出るには、LEAVE 文を使用する。 http://dev.mysql.com/doc/refman/5.1/ja/routine-restrictions.htmlたまたまbreakみたいなRETURNだったからLEAVEで逃げれたけど、 これどうなん…

トリガを設定するとSUPER privilegeがどうこう言われる

注意:MySQL 5.1.6以前のバージョンでは、MySQL は CREATE TRIGGER を使用する為に SUPER権限を要求する http://dev.mysql.com/doc/refman/5.1/ja/create-trigger.htmlということで、5.0系だとrootユーザじゃないとトリガが設定できないようです。 え……何その…

 iBatis(2.x系)でカラム名順にresultMapに入れる

id NUMBER(10), name VARCHAR(20), sex CHAR(1)...みたいなテーブルがあり、 iBatis使って全件引っこ抜いたりすると、 HashMapだと当然バラバラのkey, valueだし、TreeMapだと50音順で並んじゃいます。 こんなときはLinkedHashMapにすると良いみたいです。 <select id="selectAllByColumnSorted" resultClass="java.util.LinkedHashMap" parameterClass="String" remapResults="true"> </select>…

sqlplusでコマンド実行履歴とか使えるようにする(rlwrap)

sqlplusは前回の履歴とか呼び出せないのがなんとも切ないですよねー。 以下の手順でrlwrap入れると、シェルで履歴呼び出しとかできるようになります。便利。依存ライブラリのインストール $ yum -y install readline-devel (Debian系は $ apt-get install li…

slコマンドのインストール

こちらのエントリを参考に。Debian/Ubuntu版。 http://ameblo.jp/hetarelog/entry-10375421106.html基本的には一緒だが、一部ソース修正の必要がある。・必要ライブラリの導入 # apt-get install libncurses5-dev ・ファイル取得、解凍、豪華にするパッチ当…

NUMERICとDECIMALの違い

結論から言うと「ない」。 MySQL の場合、DECIMAL(M,D) 並びに NUMERIC (M,D) は同じで、両方共正確に M 桁の精度を持っています。 http://dev.mysql.com/doc/refman/5.1/ja/precision-math-decimal-changes.htmlまあなんとなくDECIMALの方が一般的に使われ…

CHAR型のカラムにスペースを含む文字列を入れるとトリムされる

mysql > CREATE TABLE hoge ( col1 char(10)) ;みたいな char(10) hoge とかのレコードに対して mysql > INSERT INTO hoge (col1) value ('0 ');としても mysql> SELECT length(col1) from hoge; +--------------+ | length(col1) | +--------------+ | 1 | …

コマンドの実行結果と実行時間をまとめて吐き出す

いつも思い出せないので。 $ time (ls -l) >log.log 2>&1 2とか&とかがダメなんですよねー。覚えらんない。

カレントディレクトリ内の特定ファイルのCRCを生成させるワンライナー

例えば細切れにされたdmpがFTPでいっぱい転送されてくるような場合。 普通に考えて怖いですよね。なので以下のようにして*.dmp.crcを生成。 $ for i in `ls *.dmp` ; do cksum $i > $i.crc; done; 比較するときは $ for i in `ls *.dmp` ; do cksum $i | dif…

Oracle Instant Client導入

とりあえずcx_Oracle動けばいいやって感じの場合のメモ。こっからBasicとSDKを拾ってくる http://www.oracle.com/technetwork/jp/topics/index-099943-ja.html■rpmインストール # rpm -ivh oracle-instantclient11.2-basic-11.2.0.1.0-1.x86_64.rpm # rpm -i…

sqlplusでSQLを流し、その実行時間をtimeで計測する

Linuxでコマンド実行時間を取るのに便利なtimeコマンドですが、sqlplusとかだと途中で入力受付になってそこで止まってしまって計測できないことがあります。そういう時にヒアドキュメントなんですが、いつも忘れちゃうのでメモ。 $ time sqlplus benchmark/t…

カイジがチンチロリンで目無しを出して3000ペリカ失う確率をざっくりと求める

カイジ(第二期)面白いですよね。でも途中から何故か「そもそも、そんなに目って出るもんかしら?」ってことが気になりだしてしまい、それどころじゃありませんでした。数学的に考えると、一回振った場合は確率的に 6/6 * 5/6 * 4/6 = 20 / 36 = 0.555、つま…

ウィザード形式で実行されるプログラムの実行時間を測る

Linuxならtimeコマンドで一発なんですが、Windowsだと基本GUIな上に「おいこれいったいいつになったら終わるんだよ」みたいなウィザードが延々と表示されるだけ、というしんどい状況に置かれることが多々あります。しかもそういうソフトに限って予測時間も何…

超適当にapacheにORACLE_HOMEを認識させる

普通にphpコマンドで流すと通るのにWebから接続できねー!って場合、apacheユーザのパスにORACLE_HOMEとかが通ってない。かといえ、apacheとかPHPとかソースから入れるのはめんどくさい。。。という糞畜生向けに、起動スクリプトに環境変数を直書きするとい…

listとかtupleとかdictとかをprintすると文字化けする

こんな感じで普通にやると化ける。 >>> s = ['あ', 'い', 'う'] >>> print s ['\xe3\x81\x82', '\xe3\x81\x84', '\xe3\x81\x86'] Python3000にすれば治るよ!とか言われても OSにそのまま入ってる奴つかいたいし……3000とかあやしすぎるし……そんなときは >>> …

CentOSへのMySQLdbの最低限の入れ方

最新版を最低限の手順で入れたい時に。 ネット上では色々入れ方があって混乱するのでまとめておく。・easy_install導入 # wget http://peak.telecommunity.com/dist/ez_setup.py # python ez_setup.py ・依存ライブラリ導入 # yum -y install mysql-devel py…

cx_Oracleのインストール

Python用Oracleコネクタのインストール方法です。いまんとこ最新の5.1で確認しました。Oracleがインストールされているのと同じサーバーに入れることを前提とします。そうでない場合はOracle instantclientとか入れればいいみたい。その場合の手順は必要にな…

mysqldumpで大量のダンプデータを読み込む場合

前回、MySQLのload dataでCSVを読み込ませる場合にPKが付いてる(=インデックスがある)かどうかで、大量データの場合に死ぬほど速度差が出てくることがわかりましたが、じゃあsqldumpの場合はどうなんでしょうか。ご存知の通り、一発のINSERTで大量のデー…

load dataで読み込むCSVはソートされてる方が断然速い?

なんかそうらしいとかいう資料を見つける。 http://h50146.www5.hp.com/products/software/oe/linux/summary/mwtech/files/mysql-loaddata-v02.pdf400万件のレコードを持つデータを作ってやってみた。使ったのはSuperSmackで生成した適当なデータ。 テーブル…

SuperSmackを64bit版OSに入れる(CentOS5.5 x86)

64bit版に入れるのにはちょっとしたパッチが必要。 $ yum -y install mysql mysql-devel $ yum -y install gcc gcc-c++ flex bison $ wget http://vegan.net/tony/supersmack/super-smack-1.3.tar.gz $ tar xzvf super-smack-1.3.tar.gz $ cd super-smack-1.…

SQLでテーブル定義情報とかストアドプロシージャ情報とかを取得

SELECT object_name, object_type FROM user_objects WHERE object_type = 'PROCEDURE' OR object_type = 'FUNCTION' OR object_type = 'PACKAGE' OR object_type = 'LIBRARY' ORDER BY object_type, object_name ;object_typeで指定するスキーマの種類とか…

yumで適当にJenkinsを入れる

JDKない場合は入れておいてあげる # yum install -y java-1.6.0-openjdk java-1.6.0-openjdk-devel あとはさっくりと。 # wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo # rpm --import http://pkg.jenkins-ci.org/…