Эквивалент varchar (max) в MySQL?

Что такое эквивалент varchar (max) в MySQL?

Ответ 1

Максимальная длина varchar зависит от максимального размера строки в MySQL, что составляет 64 КБ (не считая BLOB):

VARCHAR(65535)

Однако обратите внимание, что предел ниже, если вы используете многобайтовый набор символов:

VARCHAR(21844) CHARACTER SET utf8

Вот несколько примеров:

Максимальный размер строки - 65535, но varchar также включает в себя байты или два для кодирования длины данной строки. Таким образом, вы фактически не можете объявить varchar максимального размера строки, даже если это единственный столбец в таблице.

mysql> CREATE TABLE foo ( v VARCHAR(65534) );
ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs

Но если мы попытаемся уменьшить длину, мы найдем наибольшую длину, которая работает:

mysql> CREATE TABLE foo ( v VARCHAR(65532) );
Query OK, 0 rows affected (0.01 sec)

Теперь, если мы попытаемся использовать кодировку с несколькими байтами на уровне таблицы, мы обнаружим, что каждый символ имеет несколько байтов. Строки UTF8 не обязательно используют несколько байтов на строку, но MySQL не может предположить, что вы ограничите все ваши будущие вставки однобайтовыми символами.

mysql> CREATE TABLE foo ( v VARCHAR(65532) ) CHARSET=utf8;
ERROR 1074 (42000): Column length too big for column 'v' (max = 21845); use BLOB or TEXT instead

Несмотря на то, что сообщила нам последняя ошибка, InnoDB по-прежнему не любит длину 21845.

mysql> CREATE TABLE foo ( v VARCHAR(21845) ) CHARSET=utf8;
ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs

Это имеет смысл, если вы вычислите, что 21845 * 3 = 65535, который бы не сработал. В то время как 21844 * 3 = 65532, что действительно работает.

mysql> CREATE TABLE foo ( v VARCHAR(21844) ) CHARSET=utf8;
Query OK, 0 rows affected (0.32 sec)

Ответ 2

Что такое VARCHAR (max)?

varchar(max) - это функция Microsoft SQL Server.

Объем данных, которые столбец мог хранить в версиях Microsoft SQL Server до версии 2005, был ограничен 8 КБ. Для хранения более 8 КБ вам пришлось бы использовать типы столбцов TEXT, NTEXT или BLOB, эти типы столбцов сохраняли свои данные в виде коллекции из 8K страниц, отдельно от страниц данных таблицы; они поддерживали сохранение до 2 ГБ на строку.

Большой оговоркой к этим типам столбцов было то, что они обычно требовали специальных функций и инструкций для доступа и изменения данных (например, READTEXT, WRITETEXT и UPDATETEXT)

В SQL Server 2005 был введен varchar(max) для унификации данных и запросов, используемых для извлечения и изменения данных в больших столбцах. Данные для столбцов varchar(max) хранятся в строках со страницами данных таблицы.

Поскольку данные в столбце MAX заполняют страницу данных 8 КБ, выделяется страница переполнения, а предыдущая страница указывает на ее формирование связанного списка. В отличие от TEXT, NTEXT и BLOB тип столбца varchar(max) поддерживает все те же семантики запросов, что и другие типы столбцов.

Итак, varchar(max) действительно означает varchar(AS_MUCH_AS_I_WANT_TO_STUFF_IN_HERE_JUST_KEEP_GROWING), а не varchar(MAX_SIZE_OF_A_COLUMN).

MySql не имеет эквивалентной идиомы.

Чтобы получить тот же объем памяти, что и varchar(max) в MySql, вам все равно придется обращаться к типу столбца BLOB. В этой статье обсуждается очень эффективный способ эффективного хранения больших объемов данных в MySql.

Ответ 3

Максимальная длина varchar

65535

деленная на максимальную длину байта символа в наборе символов, в котором установлен столбец (например, utf8 = 3 байта, ucs2 = 2, latin1 = 1).

минус 2 байта для хранения длины

минус длина всех остальных столбцов

минус 1 байт для каждых 8 столбцов, которые являются нулевыми. Если ваш столбец имеет значение null/not null, он хранится как один бит в байте/байтах с нулевой маской, 1 бит на столбец, который может быть нулевым.

Ответ 4

Для сервера Sql

alter table prg_ar_report_colors добавить Text_Color_Code VARCHAR (макс.);

Для MySql

alter table prg_ar_report_colors добавить текстовый текст Text_Color_Code

Для Oracle

alter table prg_ar_report_colors добавить Text_Color_Code CLOB;

Ответ 5

Mysql Преобразование столбца из VARCHAR в TEXT при ограниченном размере!!!

mysql> CREATE TABLE varchars1(ch3 varchar(6),ch1 varchar(3),ch varchar(4000000))
;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> SHOW WARNINGS;
+-------+------+---------------------------------------------+
| Level | Code | Message                                     |
+-------+------+---------------------------------------------+
| Note  | 1246 | Converting column 'ch' from VARCHAR to TEXT |
+-------+------+---------------------------------------------+
1 row in set (0.00 sec)

mysql>

Ответ 6

Максимальная длина varchar в MySQL 5.6.12 - 4294967295.