Який еквівалент varchar (max) в MySQL?
Який еквівалент varchar (max) в MySQL?
Відповіді:
Максимальна довжина вархара залежить від максимального розміру рядка в MySQL, який становить 64 КБ (без урахування BLOB):
VARCHAR(65535)
Однак зауважте, що обмеження є нижчим, якщо ви використовуєте багатобайтовий набір символів:
VARCHAR(21844) CHARACTER SET utf8
Ось кілька прикладів:
Максимальний розмір рядка - 65535, але варчар також включає байт або два для кодування довжини заданого рядка. Таким чином, ви фактично не можете оголосити варшар максимального розміру рядків, навіть якщо це єдиний стовпець у таблиці.
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)
DEFAULT
значення для стовпця. Не можна цього робити з типами TEXT або BLOB.
TEXT
обмеження довжини - 64K. MEDIUMTEXT
обмеження довжини - 16М. LONGTEXT
обмеження довжини - 4G.
varchar(max)
типу стовпців сервера Sql .
TLDR; MySql не має еквівалентної концепції varchar(max)
, це функція MS SQL Server.
varchar(max)
є особливістю Microsoft SQL Server.
Обсяг даних, який стовпець міг зберігати у версіях сервера Microsoft SQL до версії 2005 року, був обмежений 8 кБ. Для того , щоб зберігати більше , ніж 8KB ви повинні використовувати 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)
.
Для того, щоб отримати той самий обсяг пам’яті, що і varchar(max)
в MySql, вам все одно доведеться вдатися до BLOB
типу стовпців. У цій статті розглядається дуже ефективний метод ефективного зберігання великої кількості даних у MySql.
varchar(max)
насправді означає.
Максимальна довжина варшара становить
65535
ділиться на максимальну довжину байта символу в наборі символів стовпцю встановлюють (наприклад, utf8 = 3 байти, ucs2 = 2, latin1 = 1).
мінус 2 байти для збереження довжини
мінус довжина всіх інших стовпців
мінус 1 байт на кожні 8 стовпців, які є нульовими. Якщо ваш стовпець є null / not null, він зберігається як один біт у байтах / байтах, званих нульовою маскою, 1 біт на стовпчик, який є нульовим.
змінити таблицю prg_ar_report_colors додати Text_Color_Code VARCHAR (макс.);
змінити таблицю prg_ar_report_colors додати довгий текст Text_Color_Code;
змінити таблицю prg_ar_report_colors додати Text_Color_Code CLOB;
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>