国产探花免费观看_亚洲丰满少妇自慰呻吟_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 的方式了。

(編輯:武林網)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 新蔡县| 友谊县| 汉川市| 诸暨市| 清苑县| 施甸县| 五大连池市| 海丰县| 灵石县| 连江县| 平遥县| 西青区| 洛扎县| 腾冲县| 通城县| 德清县| 康保县| 古田县| 双桥区| 宁安市| 大关县| 商洛市| 南涧| 新绛县| 偏关县| 化隆| 石泉县| 迭部县| 温宿县| 浦北县| 聂荣县| 洮南市| 新闻| 东港市| 宕昌县| 阿拉善左旗| 南雄市| 信宜市| 通城县| 靖安县| 沛县|