15
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

文字数制限のあるVARCHARへのINSERT/UPDATEをエラーでなく切り詰めに

Last updated at Posted at 2014-06-09

テーブル設計において文字列データのサイズ設定は皆様等しくお悩みでしょうか。

容量ほぼ無制限のTEXTとか使ってしまえばいいんですが、データ量見積もりの都合上上限を設けておいた方が都合が良いこともあり、あまり根拠もなくVARCHAR(64)などとキリの良さ目の数字で文字数制限をかけていることもあるかと思います。

そんなカラムへの値の挿入・代入で忘れがちなこと。
文字数オーバーの文字列の挿入・代入はエラーになります。 切り詰められるだけと思っていた方多いのではないでしょうか。エラーになるのがSQL標準です。

それをアプリケーション側で防止しようとしたときに忘れがちなこと。
文字数の数え方はDB製品とアプリ言語で結構違います。 代表的なのがサロゲートペアを1文字に数えるか2文字に数えるか。まあルールの数は有限なのでがっちり完全な文字数制限処理を書くことも可能なのですが、そうするとDB知識にアプリがべったりですね。結局、設計としてアウトかと思われます。

キャストなら切り詰められる

文字数オーバーでINSERT/UPDATEはエラーになるのですが、TEXTからVARCHAR(n)へのキャストならエラーにならず切り詰めになります。

そこでINSERTならこう書けば安全になります。

INSERT INTO my_table (value) VALUES(CAST(? AS VARCHAR(64)));

無論ですが、挿入した値と取り出した値が切り詰めによって変化している可能性は考慮の上でプログラミングしなければなりません。

15
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?