ぼちぼち

Zabbix中心の技術ブログ

PRIMARY制約に引っかかったのにINSERT出来てしまった話(未解決)

 

ーーーPRIMARY KEYに引っかかったけど、INSERTできてしまったーーー

 

そんなこと起こるわけないと誰もが思うだろうし、実際に起こってはいけない。

しかし、何故か起こってしまった。しかも、登録されていないデータに対して制約が発生し、更にNULL値で引っかかっているわけでもなかった。

 

Googleに聞きまくったけど「そんなことありえない」以外の回答が見つからなかったので、原因はこれかなー?ぐらいの曖昧な状態だけれども残しておく。

 

 

« 経緯 »

DBにデータをINSERTしたら、PRIMARY KEY制約に違反しますという内容のエラーが出まくった。全件分出た。

しかし、INSERT実行前に対象データが存在しないことを確認しているため、制約違反が起こるわけがない。先に書いたようにググッても何も出てこない。しかも引っかかった値がNULLなら手掛かりはあるが、色々確認しても制約違反になりそうなところ(スペースやNULL制約)は一切ない。

 

そして、INSERTされるはずのないデータが全て正常に登録されている。これが一番の問題であった。

 

この現象は起きる日と起きない日があり、エラーが起きたとしても正常に動作してる(既に登録されているデータに対してINSERTをかけるとちゃんと弾いてくれていた)のでエラー文に恐怖する以外は何の実害もなかった。

 

 

« とりあえずの結論 »

キーボードの配列をUS配列にすると起きるので、JIS配列を使用する。

 

これだけ。

因果関係が全く分からないが、JIS配列を徹底したら制約違反が出なくなった。関係性が分からないので、まだ未解決とさせていただきたく.....。