Обходной путь для разрешения столбца TEXT в таблице mysql MEMORY / HEAP - PullRequest
4 голосов
/ 26 октября 2009

Я хочу использовать временную таблицу MEMORY для хранения некоторых промежуточных данных, но мне нужно / нужно, чтобы она поддерживала столбцы TEXT. Я нашел обходной путь, включающий приведение ТЕКСТА к VARCHAR или что-то в этом роде, но, как идиот, я не записывал URL-адрес, где бы я ни нашел сейчас.

Кто-нибудь знает, как, например, скопировать таблицу x в таблицу памяти y, где x может иметь столбцы TEXT? Если кто-нибудь знает, как приводить столбцы в формате «CREATE TABLE y SELECT * FROM x», это определенно будет полезно.

В качестве альтернативы было бы полезно, если бы я мог создать таблицу, которая использует механизм MEMORY по умолчанию и "обновляет" другой механизм (возможно, по умолчанию), если он не может использовать таблицу MEMORY (из-за текстовых столбцов, которые слишком большие или как угодно).

Ответы [ 3 ]

3 голосов
/ 26 октября 2009

Вы можете указать инструкцию SELECT после CREATE TEMPORARY TABLE :

CREATE TEMPORARY TABLE NewTempTable
SELECT
    a
,   convert(b, char(100)) as b
FROM OtherTable

Комментарий: кажется, что CHAR ограничен 512 байтами, и вы не можете привести к VARCHAR . Если вы используете TEXT во временной таблице , таблица будет храниться на диске, а не в памяти.

Что вы можете попробовать, так это явное определение таблицы:

CREATE TEMPORARY TABLE NewTempTable (
    a int
,   b varchar(1024)
)

insert into NewTempTable
select a, b
from OtherTable
1 голос
/ 24 июня 2014

Вы можете использовать varChar (5000). Не нужно кастовать. Если у вас есть пример данных, вы можете использовать их в качестве меры. Существует 64 КБ места.

Длина может быть указана как значение от 0 до 255 до MySQL 5.0.3 и от 0 до 65 535 в 5.0.3 и более поздних версиях. Максимальная эффективная длина VARCHAR в MySQL 5.0.3 и более поздних версиях зависит от максимального размера строки (65 535 байт, который используется всеми столбцами) и используемого набора символов.

0 голосов
/ 26 октября 2009

Вы имеете в виду CAST(text_column AS CHAR)? Обратите внимание, что вам это не нужно, MySQL автоматически преобразует его, если целевой столбец равен VARCHAR(n).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...