0

新しいテーブルを追加するときに、間違いを犯しました。フィールドはvarchar(255)でしたが、結合クエリを作成する必要があります。したがって、テーブルを変更してchar(6)を作成します。

私の質問は:この場合のMySQLは何ですか?正しくトリミングしますか?

4

3 に答える 3

3

MySQLが何をするか、何をしないかを心配するのではなく、変更前に自分でデータを変換しないのはなぜですか。

例えば

UPDATE YourTable
SET YourField = LEFT(YourField,6);

ALTER TABLE YourTable MODIFY COLUMN YourField Char(6)

列データが長すぎる場合、厳密なSQLモードを有効にすると仮定して変更を行うことができないことに注意してください。Shefの完全な回答を参照してください。

于 2011-07-21T15:23:14.393 に答える
1

フォーマットを変換しようとします。あなたの場合、列は文字列型であるため、厳密なSQLモードが有効になっていない場合は、値が切り捨てられます。

CHANGEまたはMODIFYを使用してデータ型を変更すると、MySQLは既存の列の値を可能な限り新しい型に変換しようとします。

警告この変換により、データが変更される可能性があります。たとえば、文字列列を短くすると、値が切り捨てられる場合があります。新しいデータ型への変換によってデータが失われる場合に操作が成功しないようにするには、ALTER TABLEを使用する前に厳密なSQLモードを有効にします(5.1.6項「サーバーSQLモード」を参照)。

ページの5分の2にある細かい警告を読んでください。

于 2011-07-21T15:28:33.183 に答える
0

MySQLでは、データが失われる場合(たとえば、フィールドのテキストが6文字より長いエントリがある行がある場合)にテーブルを変更することさえできないため、データを適切と思われる方法で変換することをお勧めします。 。

于 2011-07-21T15:27:25.723 に答える