2016-11-23 2 views
0

私は2つのテーブルを持っています。 1つは主キーとしてintを持ち、もう1つはvarchar主キーを持ちます。mysqlのNULLが空の文字列を受け入れることはありません

空の文字列( "")を挿入すると、intのプログラミングエラーが発生しますが、varcharのストアは正常に終了します。 これはどのように機能しますか?

varcharフィールドに空の文字列を受け入れさせない方法はありますか? 私はそれらが私が捕まえることができるいくつかのデータベースエラーを与えることを望みます。

+3

空文字列は整数ではないためです。 – Phylogenesis

+0

空の文字列はvarcharなので? – shadow0359

+1

はい。 'varchar'は** Var ** iable-length ** char ** acterデータを意味します。 – Phylogenesis

答えて

3

空の文字列が挿入された文字列がintないので(「」)私はint型

のためのプログラミングエラーを取得します。また、数字以外の文字列に自動的に変換する方法はありません。intです。

が、成功した文字列varcharあるのでvarchar型

のために保存します。 CHAR and VARCHARのような列は、文字列を格納する文字データを格納するための列です。

これらの値のいずれもNULLではありません。 NULLは値が存在しないことです。空文字列は依然として値です。

1

空の文字列はnullとは異なります。 (これはMySQLと多くのプログラミング言語にも当てはまります)。varcharの主キーにnullを挿入してみてください。それは挿入時に失敗するはずです - ちょうどintのように。

@Davidが上で述べたように、空文字列はintに変換できないため、MySQLは代わりにnullを選択します。

0

ないあなたがやろうとしている、と私たちはこの問題を解決するための最良の方法であるかを知るために、コードを見るために必要なものを確認してください、しかし、あなたはこれを試すことができます。一般的には

CASE WHEN IN_IntValue = '' THEN NULL ELSE IN_IntValue 

、Oracleのみ私が知っている限り空の文字列をNULLとして見ます。 MySQLでは、2つの異なることがあります。

1

ほとんどのデータベースとANSI定義では、空の文字列はNULLではありません。

Oracleは空の文字列をNULLの値として扱いますが、これは一般的には紛らわしいものです。しかし、これはSQL言語の例外です。

関連する問題