

**既にレコードが存在しているVARCHAR型カラムに対して、(既存データの最長に合わせ)長さを出来るだけ短くしたい**  
カラムの長さを変更するSQLを実行した場合、既に存在しているレコードの長さ以上の長さを指定すると、エラーで弾かれる(既存レコードには影響がない)と思っていました。

下記は理解できるのですが、

[code]

    ALTER TABLE `テーブル名` CHANGE `旧カラム名` `新カラム名` VARCHAR(5) 
    クエリエラー:
    #1406 - Data too long for column 'カラム名' at row 1
    
[/code]

下記のようなケースになることがある理由が分かりません

[code]

    ALTER TABLE `テーブル名` CHANGE `旧カラム名` `新カラム名` VARCHAR(50) 
    クエリエラー:
    #1265 - 列 'カラム名' の 行 16 でデータが切り捨てられました。
    
[/code]

* * *

**質問**

  * Q1.「ALTER TABLE `テーブル名` CHANGE」を実行した際、カラムの長さ指定が異なるだけで、「1406エラー」となったり「1265エラー」となる理由は何ですか？
  * Q2.「1265エラー」の「データが切り捨てられました」の意味は？  
既存データの一部が削除された？  
それとも「データが切り捨てられました」と表示されても、データ自体はどの部分も削除されるわけではない？

* * *

**その他**

SQLはphpMyAdmin経由で実行しています

MySQL5.7

[code]

    SELECT @@GLOBAL.sql_mode
    ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
    
[/code]


CC BY-SA 4.0
2020-06-06T23:33:26.307
67378
2020-06-06T23:33:26.307
7886
question
mysql
1406クエリエラー と 1265クエリエラー について