0

整数値を見る。Unsigned 属性を設定すると、フィールドの長さが上書きされるようです。

従来、MYSQL は BOOLEAN エイリアスを TINYINT(1) に変換します。inter-webs によると、MySQL 8.0.17 の時点で、整数データ型の表示幅の仕様は廃止されました。これには次の 2 つの例外があります。 TINYINT(1) ただし、TINYINT 値に UNSIGNED を設定すると、表示の長さが失われるというバグ (既知または未知の IDK) があります。

再現する手順:

  1. BOOLEAN として使用することを意図したフィールドを持つテーブルを作成します。

    CREATE TABLE users( idint unsigned NOT NULL AUTO_INCREMENT , user_namevarchar(50) NOT NULL, passwordvarchar(255) NOT NULL, is_activetinyint(1) NOT NULL DEFAULT '1', PRIMARY KEY ( id), ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

  2. TINYINT(1) の表示長が実際に設定されていることを確認します。

  3. テーブルを変更して is_active を UNSIGNED 値にします。

    ALTER TABLE users CHANGE COLUMN is_active is_activeTINYINT(1) UNSIGNED NOT NULL DEFAULT '1' ;

  4. TINYINT に表示長がなくなっていることに注意してください。

  5. リスト項目

期待される結果:

オプションが0または1になるため、「BOOLEAN」の正しいフィールド属性は符号なしであると主張します。負ではありません。したがって、TINYINT(1) の UNSIGNED 動作は符号付き動作と同じであり、フィールドの表示長が設定/保持されることを期待します。

質問:

他の誰かがこの動作に遭遇しましたか? 回避策に関するアイデアはありますか?現在、署名されたtinyintに固執しています...

4

0 に答える 0