Подход Speigg очень аккуратен и чист, хотя я нашел этот ответ при поиске решения для доступа к свойствам области AngularJS $ по строковому пути и с небольшой модификацией выполняет задание:
$scope.resolve = function( path, obj ) {
return path.split('.').reduce( function( prev, curr ) {
return prev[curr];
}, obj || this );
}
Просто поместите эту функцию в свой корневой контроллер и используйте для нее любую дочернюю область следующим образом:
$scope.resolve( 'path.to.any.object.in.scope')
Максимальная длина 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)
Максимальная длина varchar в MySQL 5.6.12 равна 4294967295.
alter table prg_ar_report_colors добавьте Text_Color_Code VARCHAR (max);
alter table prg_ar_report_colors добавить Text_Color_Code longtext;
alter table prg_ar_report_colors добавить Text_Color_Code CLOB;
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)
.
Чтобы получить тот же объема хранения в качестве varchar(max)
в MySql, вам все равно придется обращаться к типу столбца BLOB
. В этой статье обсуждается очень эффективный метод эффективного хранения больших объемов данных в MySql.
varchar(max)
на самом деле .
– joshperry
8 February 2013 в 20:56
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>
Максимальная длина varchar равна
65535
, деленная на максимальную длину байта символа в наборе символов, в котором установлен столбец (например, utf8 = 3 байта, ucs2 = 2, latin1 = 1).
минус 2 байта для хранения длины
минус длина всех остальных столбцов
минус 1 байт для каждого 8 столбцов с нулевым значением. Если ваш столбец имеет значение null / not null, он сохраняется в виде одного бита в байтах / байтах с нулевой маской, 1 бит на столбец, который может быть нулевым.
DEFAULT
для столбца. Невозможно сделать это с помощью TEXT или BLOB. – Bill Karwin 4 June 2012 в 17:53TEXT
ограничение по длине 64K.MEDIUMTEXT
ограничение длины 16M.LONGTEXT
длина ограничение 4G. – Bill Karwin 18 January 2013 в 18:36varchar(max)
сервера Sql Server. – joshperry 8 February 2013 в 21:01