所以我创建了一个包含所有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。