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

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

2011-08-01から1ヶ月間の記事一覧

SELECT ... INTO で指定する変数名をカラム名と同じにすると強制的にNULLが入る

SELECT MAX_POINT INTO max_point FROM TEST WHERE id = 1; 以上のような何の変哲もないSQLだが、max_pointの値が強制的にNULLになる。 MySQLのテーブル名やカラム名は大文字小文字区別するが、 ストアドプロシージャに関しては別らしい。大はまりしました。…

パッケージ内のファンクション(OUT引数付き)を呼び出す

TESTパッケージ内のファンクションを呼び出すには以下のようにしとくのが無難。 set serveroutput on declare arg1 VARCHAR2(200); arg2 VARCHAR2(200); result NUMBER; begin result := TEST.TESTFUNC(arg1, arg2); DBMS_OUTPUT.PUT_LINE(arg1); DBMS_OUTPU…

InnoDB関係のパフォーマンス設定

自分用メモ。 innodb_buffer_pool_size = 120000M //適当 innodb_data_file_path = ibdata1:1G:autoextend:max:200G innodb_autoextend_increment=64 innodb_flush_method = O_DIRECT innodb_log_buffer_size = 20M innodb_flush_log_at_trx_commit = 1 // d…

指定カラムに重複があるかどうか調べる

SQL

select COL_NAME from TABLE_NAME where COL_NAME in (select COL_NAME from TABLE_NAME group by COL_NAME having count(*) > 1); お好みでdistinctをつけたりしても風流。

ユーザにSUPER権限を与える

トリガとか設定したいときに。rootユーザで入って($mysql -u root) UPDATE mysql.user SET Super_priv='Y' WHERE user='test_user'; 確認は SELECT user, Super_priv FROM mysql.user WHERE user='test_user'; こんなかんじで。

ストアドプロシージャはsqldumpに含まれない

まあなんとなくそんな気はしてた。 別途貼りつけてやんないとダメ。

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…