所以我建立了一個包含所有varchar(255)的表,然後決定使用CAST將其更改為UNSIGNED(因為所有值都是正數)。當我檢查時,它已經更改為unsigned。然而,我注意到當我再次檢查整個表時,列仍然被視為varchar。
我的理解是,CAST只對特定的程式碼起作用,不會永久更改。如果我想永久更改列類型,需要使用下面所示的ALTER嗎?
如果是這樣,為什麼人們使用CAST而不是ALTER?
CREATE table project.worldcup_players ( MatchID varchar (255), Team_Initials varchar (255), Coach_Name varchar (255), Player_Name varchar (255) ); SELECT * FROM project.worldcup_players; SELECT CAST(MatchID AS UNSIGNED) AS MatchID FROM project.worldcup_players; ALTER TABLE project.worldcup_players CHANGE COLUMN `MatchID` `MatchID` INT NULL DEFAULT NULL ;
CAST只會改變查詢中表達式的結果。如果您只想有時將其變更為無符號整數,而不變更資料儲存方式,可以使用CAST。
如果要變更資料儲存方式,則需要使用ALTER TABLE。
假設您的MatchID僅對某些比賽表示為數字。在其他比賽中,比賽透過字母字串進行標識。在這種情況下,列必須是varchar,因為在給定表中的所有行上,列必須以相同的資料類型儲存。不要修改表格,因為這將導致所有非數字字串被更改為它們的數字等效值0。