您好,登錄后才能下訂單哦!
使用pt-online-schema-change變更數據表某字段長度, 完成后, 查看表結構定義, 卻出現了亂碼...
數據表zzzz的表結構.
mysql> show create table zzzz \G
*************************** 1. row ***************************
Table: zzzz
Create Table: CREATE TABLE `zzzz` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(10) NOT NULL DEFAULT '' COMMENT '物品名稱',
`category` varchar(10) NOT NULL DEFAULT '' COMMENT '物品分類',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Product infomation'
1 row in set (0.00 sec)
變更字段name的長度為20.
$ pt-online-schema-change --alter "modify name varchar(20) not null default '' comment '物品名稱'" --nocheck-replication-filters --recursion-method=processlist h=192.168.4.45,P=3316,u=mha_mgr,p=123456,D=test,t=zzzz --execute
Found 1 slaves:
db02 -> 192.168.4.46:3316
Will check slave lag on:
db02 -> 192.168.4.46:3316
Operation, tries, wait:
analyze_table, 10, 1
copy_rows, 10, 0.25
create_triggers, 10, 1
drop_triggers, 10, 1
swap_tables, 10, 1
update_foreign_keys, 10, 1
Altering `test`.`zzzz`...
Creating new table...
Created new table test._zzzz_new OK.
Waiting forever for new table `test`.`_zzzz_new` to replicate to db02...
Altering new table...
Altered `test`.`_zzzz_new` OK.
2018-01-15T17:31:27 Creating triggers...
2018-01-15T17:31:27 Created triggers OK.
2018-01-15T17:31:27 Copying approximately 1 rows...
2018-01-15T17:31:28 Copied rows OK.
2018-01-15T17:31:28 Analyzing new table...
2018-01-15T17:31:28 Swapping tables...
2018-01-15T17:31:28 Swapped original and new tables OK.
2018-01-15T17:31:28 Dropping old table...
2018-01-15T17:31:28 Dropped old table `test`.`_zzzz_old` OK.
2018-01-15T17:31:28 Dropping triggers...
2018-01-15T17:31:29 Dropped triggers OK.
Successfully altered `test`.`zzzz`.
完成后, 查看表結構, 發現字段的中文注釋都成了亂碼.
mysql> show create table zzzz \G
*************************** 1. row ***************************
Table: zzzz
Create Table: CREATE TABLE `zzzz` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) NOT NULL DEFAULT '' COMMENT '?‰??“??§°',
`category` varchar(10) NOT NULL DEFAULT '' COMMENT '????',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Product infomation'
1 row in set (0.00 sec)
解決方法, 使用選項--charset(其文檔說明: Default character set. If the value is utf8, sets Perl’s binmode on STDOUT to utf8, passes the mysql_enable_utf8 option to DBD::mysql, and runs SET NAMES UTF8 after connecting to MySQL. Any other value sets binmode on STDOUT without the utf8 layer, and runs SET NAMES after connecting to MySQL.), 指明字符集為utf8mb4.
$ pt-online-schema-change --alter "modify name varchar(20) not null default '' comment '物品名稱'" --charset=utf8mb4 --nocheck-replication-filters --recursion-method=processlist h=192.168.4.45,P=3316,u=mha_mgr,p=123456,D=test,t=zzzz --execute
瞧, 正常了.
mysql> show create table zzzz \G
*************************** 1. row ***************************
Table: zzzz
Create Table: CREATE TABLE `zzzz` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) NOT NULL DEFAULT '' COMMENT '物品名稱',
`category` varchar(10) NOT NULL DEFAULT '' COMMENT '????',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Product infomation'
1 row in set (0.00 sec)
關于pt-online-schema-change工具的更多使用細節, 可參考InnoDB Online DDL續.
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。