解决方法以允许mysql MEMORY / HEAP表中的TEXT列

时间:2009-10-26 06:16:05

标签: mysql memory casting

我想使用临时MEMORY表来存储一些中间数据,但我需要/希望它支持TEXT列。我找到了一个解决方法,涉及将TEXT转换为VARCHAR或其他东西,但就像一个白痴我没有写下现在我能找到的任何地址的URL。

有没有人知道如何将表x复制到内存表y中,其中x可能有TEXT列?如果有人知道如何在“CREATE TABLE y SELECT * FROM x”sorta格式中构建列,那肯定会有所帮助。

或者,如果我可以创建一个默认使用MEMORY引擎的表,并且如果它不能使用MEMORY表,则可以“升级”到不同的引擎(默认情况下)会有所帮助(因为文本列可以太大或者其他什么。)

3 个答案:

答案 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将自动投射它。