2009-10-26 51 views
4

我想使用臨時MEMORY表來存儲一些中間數據,但我需要/希望它支持TEXT列。我發現了一個解決方法,包括將TEXT轉換爲VARCHAR或其他東西,但是就像一個白癡,我沒有在現在可以找到的任何地方寫下URL。解決方法,以允許mysql中的TEXT列MEMORY/HEAP表

有誰知道如何將表x複製到內存表y中,其中x可能有TEXT列?如果有人知道如何在「CREATE TABLE y SELECT * FROM x」格式中轉換列,那肯定會有所幫助。

或者,如果我可以創建一個默認使用MEMORY引擎的表,並且如果它不能使用MEMORY表時由於「升級」到不同的引擎(默認也許)太大或者其他)。

回答

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 
+0

@LukášLalinský:感謝您的評論,我在考慮SQL Server時,我發佈了答案 – Andomar

+0

謝謝,這肯定有幫助。當你說並非所有的文本字段都適合varchar(我認爲你的意思是CHAR),是否有標準的限制,或者它是否依賴於實現? 在剛纔的測試中,我發現它看起來像512是極限。哪個很爛.. –

0

你的意思是CAST(text_column AS CHAR)?請注意,你不需要它,如果目標列是VARCHAR(n),MySQL會自動投它。

1

您可以使用varChar(5000)。無需投射。如果您有示例數據,則可以將其用作度量。有64Kb的空間。

長度可以在MySQL 5.0.3之前指定爲0到255之間的值,並且在5.0.3和更高版本中可以指定0到65,535之間的值。 MySQL 5.0.3及更高版本中VARCHAR的有效最大長度取決於最大行大小(65,535字節,在所有列中共享)和使用的字符集。

相關問題