我想使用临时MEMORY表来存储一些中间数据,但我需要/希望它支持TEXT列。我找到了一个解决方法,涉及将TEXT转换为VARCHAR或其他东西,但就像一个白痴我没有写下现在我能找到的任何地址的URL。
有没有人知道如何将表x复制到内存表y中,其中x可能有TEXT列?如果有人知道如何在“CREATE TABLE y SELECT * FROM x”sorta格式中构建列,那肯定会有所帮助。
或者,如果我可以创建一个默认使用MEMORY引擎的表,并且如果它不能使用MEMORY表,则可以“升级”到不同的引擎(默认情况下)会有所帮助(因为文本列可以太大或者其他什么。)
答案 0 :(得分:3)
您可以在CREATE TEMPORARY TABLE之后指定SELECT语句:
CREATE TEMPORARY TABLE NewTempTable
SELECT
a
, convert(b, char(100)) as b
FROM OtherTable
重新评论:似乎CHAR限制为512字节,you can't cast to VARCHAR。如果使用TEXT in a temporary table,则表存储在磁盘而不是内存中。
您可以尝试明确定义表格:
CREATE TEMPORARY TABLE NewTempTable (
a int
, b varchar(1024)
)
insert into NewTempTable
select a, b
from OtherTable
答案 1 :(得分:1)
您可以使用varChar(5000)。不需要施放。如果您有示例数据,则可以将其用作度量。有64Kb的空间。
长度可以指定为MySQL 5.0.3之前的0到255之间的值,5.0.3及更高版本中的0到65,535之间的值。 MySQL 5.0.3及更高版本中VARCHAR的有效最大长度受最大行大小(65,535字节,在所有列之间共享)和使用的字符集的限制。
答案 2 :(得分:0)
你的意思是CAST(text_column AS CHAR)
?请注意,您不应该需要它,如果目标列为VARCHAR(n)
,MySQL将自动投射它。