在mysql中创建表时更改列数据类型

在mysql中创建表时更改列数据类型,mysql,select,mysql-workbench,create-table,sqldatatypes,Mysql,Select,Mysql Workbench,Create Table,Sqldatatypes,我正在使用select查询从现有表创建新表。数据类型为varchar(255)的现有表列,因此在新创建的表中,该列默认包含varchar数据类型 现在,如何将新表列更改为其他数据类型文本。下面是mysql查询。尝试了cast()和convert(),但对文本数据类型无效 CREATE TABLE topper AS SELECT studentname as `Name`, rollno as `Roll_No`, description as `Information` FROM stude

我正在使用select查询从现有表创建新表。数据类型为varchar(255)的现有表列,因此在新创建的表中,该列默认包含varchar数据类型

现在,如何将新表列更改为其他数据类型文本。下面是mysql查询。尝试了cast()和convert(),但对文本数据类型无效

CREATE TABLE topper  AS
SELECT studentname as `Name`, rollno as `Roll_No`, description as `Information`
FROM student

我需要文本数据类型中的“信息”列


谢谢您的帮助。

先创建表格,然后再创建表格。像这样的

CREATE OR REPLACE TABLE topper (
    Name        VARCHAR(255),
    Roll_No     INT,
    Information TEXT
);

INSERT INTO topper (Name, Roll_No, Information)
     SELECT studentname as `Name`, rollno as `Roll_No`, description as `Information`
       FROM student;

这是一个很好的实践,因为它允许您按照自己的要求明确新表的数据类型。它也很好,因为它允许您在新表中指定索引、主键和排序规则等内容。

TEXT
本质上是
VARCHAR(…)
的一个变体

请注意,您可以在
CREATE
中指定列、索引等。处理过程将按名称匹配列,然后填充其余列

或者

当您有一个
x VARCHAR(255)不为空的表之后,您可以通过

ALTER TABLE t
    MODIFY COLUMN x TEXT NOT NULL;
您可以从
VARCHAR
转到
TEXT
,反之亦然;请注意,因为它们的“最大大小”不同,所以可能会被截断。不显示警告
;运行
ALTER

另外,确保包含所有额外的子句(NULL、CHARSET等)


考虑这些和类似问题的另一种方式是,从逻辑上讲,数据作为字符串转储,然后插入。也就是说,将应用与字符串之间的任何转换。实际上,不需要强制转换/转换,至少不需要在TEXT和VARCHAR之间转换。

为什么不在以后使用
ALTER TABLE
?更改列类型,或者使用@NicoHaase链接的手册页面中记录的步骤,“选择列的数据类型也可以通过在“创建表”部分中指定列来覆盖。”我不同意这个问题不够清晰。问题不必太复杂就可以清楚。
ALTER TABLE t
    MODIFY COLUMN x TEXT NOT NULL;