首页  >  问答  >  正文

在这里使用Alter与使用Cast相比,是否是不正确的选择?

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

P粉176203781P粉176203781402 天前504

全部回复(1)我来回复

  • P粉004287665

    P粉0042876652023-09-14 14:35:15

    CAST只会改变查询中表达式的结果。如果您只想有时将其更改为无符号整数,而不更改数据存储方式,可以使用CAST。

    如果要更改数据存储方式,则需要使用ALTER TABLE。

    假设您的MatchID仅对某些比赛表示为数字。在其他比赛中,比赛通过字母字符串进行标识。在这种情况下,列必须是varchar,因为在给定表中的所有行上,列必须以相同的数据类型存储。不要修改表格,因为这将导致所有非数字字符串被更改为它们的数字等效值0。

    回复
    0
  • 取消回复