国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

mysql 5.7 新特性中在線in-place 更改字段的大小

2024-07-24 12:32:16
字體:
來源:轉載
供稿:網友
        VARCHAR 字段的大小能夠通過 ALTER TABLE,命令,以in-place 的方式修改, 例如 :
        ALTER TABLE t1 ALGORITHM=INPLACE, CHANGE COLUMN c1 c1 VARCHAR(255);
This is true as long as the number of length bytes required by a VARCHAR column remains the same.只要修改字段后字段varchar所占字節數和原先的相同就能實現,例如對于 VARCHAR 值在 0到 255,只需要一個bytes. 對于 VARCHAR 的值是 256 bytes 或者大于256 需要兩個字節.這樣的話,通過 in-place ALTER TABLE 只支持0到255 之間的修改,或者說256 以及大于256之間修改.in-place alter table 不支持小于256的varchar值變更為大于256的值。因為在這種情況下存儲的字節會從1個字節變為兩個字節。只能通algorithm=copy的方式修改,例如將varchar (255)的值修改到256 in-place alter would 會返回一個錯誤
ALTER TABLE t1 ALGORITHM=INPLACE, CHANGE COLUMN c1 c1 VARCHAR(256);
ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: Cannot change
column type INPLACE. Try ALGORITHM=COPY.
 
      這里需要著重說明的一點是需要針對不同的字符集來對應如果是英文 0-255 隨便修改如果是其它字符集那么就需要注意了因為不同字符集占存儲位不同這里拿中文做演示。
 CREATE TABLE `t1` (
  `name` varchar(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
insert into t1 values ('hu')
commit;
mysql>  ALTER TABLE t1 ALGORITHM=INPLACE, CHANGE COLUMN name name  VARCHAR(100);
ERROR 1846 (0A000): ALGORITHM=INPLACE is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY.
 
      修改為100和86 就報錯修改為85就沒問題  官方文檔不是說0-255 只要存儲的比特沒變就可以嗎? 為啥這里不行呢?
      其實官方文檔是對的! 因為英文沒錯,但是換成其他字符集的話 存儲占位不同。
一個中文字符集占位UTF8 是三個bit  
85*3=255 所以修改為85 可以修改為86 就超過了255 了只能通過copy 的方式了。

(編輯:武林網)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 玛纳斯县| 弥勒县| 南宁市| 凯里市| 定襄县| 黄平县| 会理县| 陇西县| 邹平县| 贵州省| 綦江县| 定日县| 吴忠市| 阿图什市| 东乌| 黑水县| 永兴县| 勃利县| 青浦区| 聂荣县| 胶南市| 额尔古纳市| 敦化市| 康保县| 神农架林区| 长岛县| 竹山县| 大关县| 保山市| 城市| 东光县| 涞源县| 尖扎县| 富平县| 田东县| 景东| 天长市| 雷波县| 巴中市| 贵南县| 新丰县|