如何将TEXT类型的列转换为VARCHAR?

时间:2012-11-23 14:39:30

标签: mysql

有没有办法轻松地将包含数据的列TEXT转换为VARCHAR(X)?列中没有现有记录长于X

4 个答案:

答案 0 :(得分:39)

肯定是

ALTER TABLE table_name MODIFY column_name VARCHAR(X)

答案 1 :(得分:4)

对于MS SQL:

ALTER TABLE table_name
ALTER COLUMN column_name datatype(value)

对于MySQL

ALTER TABLE table_name
MODIFY column_name datatype(value)

答案 2 :(得分:1)

我用这个来改变我的数据库。执行它,然后复制所有行,粘贴到查询字段,删除标题并运行。

更改DB = itsd:

中所有表的ENGINE,CHARSET和COLLATION
SELECT CONCAT("ALTER TABLE ", TABLE_SCHEMA, '.', TABLE_NAME," ENGINE=INNODB, 
 CHARSET=utf8, COLLATE=utf8_general_ci;") AS ExecuteTheString
 FROM INFORMATION_SCHEMA.TABLES 
 WHERE TABLE_SCHEMA="itsd"
    AND TABLE_TYPE="BASE TABLE";

转换DB = itsd:

中所有表的CHARSET和COLLATION
SELECT CONCAT("ALTER TABLE ", TABLE_SCHEMA, '.', TABLE_NAME," CONVERT TO 
 CHARACTER SET utf8;") AS ExecuteTheString
 FROM INFORMATION_SCHEMA.TABLES
 WHERE TABLE_SCHEMA="itsd"
    AND TABLE_TYPE="BASE TABLE";

将DB = itsd:

中所有表的所有TEXT字段更改为VARCHAR(255)
 SELECT CONCAT('ALTER TABLE ', table_schema, '.', table_name, ' MODIFY COLUMN ', 
 column_name, ' VARCHAR(255);')
 FROM information_schema.columns
 WHERE TABLE_SCHEMA = 'itsd'
    AND DATA_TYPE = 'text' 
    AND TABLE_TYPE="BASE TABLE";

答案 3 :(得分:0)

对于 postgres

ALTER TABLE "table_name" ALTER COLUMN "column_name" TYPE VARCHAR(x);