對於oracle來說,只有資料庫字符集這個說法,不存在什麼表字符集和欄位字符集。你說的這個是mysql的字符集,資料庫字符集可以和表字符集不同,也可以和列字符集不同,也就是說,你的資料庫字符集為utf8的話,表字符集可以是latin,列字符集可以是gb2312。統一修改表字段字符集沒有直接的sql,可以在建表的時候:
create table t (id int primary key,name varchar(100) character set gbk,name1 varchar(100)) ENGINE=InnoDB DEFAULT CHARSET=latin1;
這樣的話:
可以看到,name(指定)用了gbk而name1(預設)用了Latin1字符集。
如果你想修改整體的欄位字符集,可以考慮這麼做:
1、重建,匯出後修改匯入的指令碼的字符集部分實現,這個方法可能不適合資料量很大的資料庫。
2、寫指令碼或者儲存過程實現,具體方法為利用information_schema的COLUMNS表的表名和列名建立遊標,拼湊出類似:
alter table 表名 modify column "欄位名" varchar(30) character set gbk not null;
產生後的語句批次執行即可。
請注意,這種做法會鎖表,可能會對生產環境產生不可預料的影響,請斟酌執行。
對於oracle來說,只有資料庫字符集這個說法,不存在什麼表字符集和欄位字符集。你說的這個是mysql的字符集,資料庫字符集可以和表字符集不同,也可以和列字符集不同,也就是說,你的資料庫字符集為utf8的話,表字符集可以是latin,列字符集可以是gb2312。統一修改表字段字符集沒有直接的sql,可以在建表的時候:
create table t (id int primary key,name varchar(100) character set gbk,name1 varchar(100)) ENGINE=InnoDB DEFAULT CHARSET=latin1;
這樣的話:
可以看到,name(指定)用了gbk而name1(預設)用了Latin1字符集。
如果你想修改整體的欄位字符集,可以考慮這麼做:
1、重建,匯出後修改匯入的指令碼的字符集部分實現,這個方法可能不適合資料量很大的資料庫。
2、寫指令碼或者儲存過程實現,具體方法為利用information_schema的COLUMNS表的表名和列名建立遊標,拼湊出類似:
alter table 表名 modify column "欄位名" varchar(30) character set gbk not null;
產生後的語句批次執行即可。
請注意,這種做法會鎖表,可能會對生產環境產生不可預料的影響,請斟酌執行。