30

TEXT有没有办法VARCHAR(X)轻松转换包含数据的列?列中没有任何现有记录的长度超过X

4

4 回答 4

54

是肯定的

ALTER TABLE table_name MODIFY column_name VARCHAR(X)

于 2012-11-23T14:41:06.397 回答
7

对于 MS SQL:

ALTER TABLE table_name
ALTER COLUMN column_name datatype(value)

对于 MySQL

ALTER TABLE table_name
MODIFY column_name datatype(value)
于 2012-11-23T14:41:43.470 回答
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";
于 2017-12-20T09:18:16.357 回答
0

对于 postgres

ALTER TABLE "table_name" ALTER COLUMN "column_name" TYPE VARCHAR(x);
于 2021-05-17T07:22:08.310 回答