2012-04-11 14 views
1

私が見たすべてのSQL方言は、テーブルを定義するときにサポートするいくつかのデータ型の整数引数を指定することを許可するか、または要求するために使用されます。しかし、私は、これらの数値が意味するものと、それらを適切に選択する方法についての包括的な情報(少なくともMySQLとSQLiteの場合)を見つけることはできませんでした...SQL DDL型パラメータの選択方法は?

+0

例を挙げることができますか? –

+0

INTEGER(11)。 Navicat(GUI DBツール)を使用してMySQLからデータベースをコピーしたところ、INTEGER(11)として定義された整数列を持つ新しいSQLiteデータベースが得られました。どうして?なぜINTEGERだけではないのですか? – Ivan

+1

DBMSに依存しない(制御可能な)方法でスキーマ定義を管理するには、Liquibaseを調べるとよいでしょう。 –

答えて

0

INT(11) VARCHAR(255)の場合、通常、テーブルから格納された(または取得された)値の長さです。

http://dev.mysql.com/doc/refman/5.5/en/numeric-type-overview.html http://dev.mysql.com/doc/refman/5.5/en/string-type-overview.html

「M」は、それをサポートするすべてのタイプの名前の後の括弧内にあります。

また、これらの数値は、保存期間と選択期間の両方に影響する可能性があることに注意してください。たとえば、列をVARCHAR(100)として定義すると、各値に予約されている実際の領域は255になります。ただし、SELECTで取得する値は100文字にトリムされます。また、VARCHAR(256)を定義すると、正しく覚えていれば最大65535文字を予約します。

INT(5)と同じです。それでも、2147483647(符号付き整数の最大値)までの値を格納するための領域を予約しますが、入力/出力を5桁にトリムします。

+0

私はそれが値の長さであることを知っていますが、私はそれがいかに驚異的に測定されているかについてはわかりませんでした。私はそれがバイトまたはINTのための特別な単位であると仮定していました。私はそれを制約したくないので、-2147483648から2147483647までの標準整数を格納し、可能な限りテーブル定義(異なるDBMSに同じ型宣言を使用する)を統一するだけです。 MySQL、SQLite3、MS SQL ServerにINTまたはINTEGERを使用することはできますか?それとも長さを指定する必要がありますか? – Ivan

+0

とにかく、クロスDBMS DDLの作成はあまり良い考えではないと思います。あなたは間違いなく間違いに遭遇します。異なるSQL実装に異なるタイプを使用することさえしたい場合もあります。クロスDBMSデータベース配備ツールを作成したい場合は、そのためのユーティリティを作成する必要があります。それぞれのタイプを個別に調べて、現在作業しているDBMSのタイプに使用するコードを決める。 –

+0

しかし、整数についてはどうですか? 'INT'はMySQL、SQLite3、MS SQL Serverで同じことを意味すると思いますが、'(11) 'を省略するとデータが失われることはありませんか? – Ivan

関連する問題