Java JDBC - создание таблицы SQL Error [дубликат]

Подход 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')
143
задан David Basarab 2 December 2008 в 02:49
поделиться

6 ответов

Максимальная длина 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)
159
ответ дан Bill Karwin 26 August 2018 в 13:46
поделиться
  • 1
    Я также предлагаю использовать ТЕКСТ – Adi 4 June 2012 в 10:50
  • 2
    @AdnanShammout: Конечно, если вы не хотите объявить значение DEFAULT для столбца. Невозможно сделать это с помощью TEXT или BLOB. – Bill Karwin 4 June 2012 в 17:53
  • 3
    @DanW, TEXT ограничение по длине 64K. MEDIUMTEXT ограничение длины 16M. LONGTEXT длина ограничение 4G. – Bill Karwin 18 January 2013 в 18:36
  • 4
    Самая большая проблема заключается в том, что если вы создадите столбец этого размера, вы можете иметь только этот столбец one в вашей таблице. Размер строки MAX в MySql равен 64k, поэтому, если у вас есть столбец 64k, это все, что вы получаете. Это же ограничение не применяется к типу столбца varchar(max) сервера Sql Server. – joshperry 8 February 2013 в 21:01
  • 5
    @joshperry, да, но столбцы TEXT / BLOB подсчитывают только небольшое количество (9-12 байтов) по отношению к этому пределу размера строки в 64 КБ, поэтому, если вам нужен большой VARCHAR, а также ряд других столбцов, лучше использовать TEXT. – Bill Karwin 8 February 2013 в 21:21

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

-9
ответ дан ajabep 26 August 2018 в 13:46
поделиться

Для Sql Server

alter table prg_ar_report_colors добавьте Text_Color_Code VARCHAR (max);

Для MySql

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

Для Oracle

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

3
ответ дан Dinanath Parit 26 August 2018 в 13:46
поделиться
  • 1
    обратите внимание, что longtext, text и blob хранятся иначе, чем varchar. varchar хранится с другими полями, а текст хранится в отдельном файле на сервере. у него есть плюсы и минусы, настолько осторожные, что один выбрать – santiago arizti 6 April 2018 в 15:34

Что такое 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.

67
ответ дан joshperry 26 August 2018 в 13:46
поделиться
  • 1
    Хороший ответ! +1 – rotard 21 January 2010 в 02:47
  • 2
    Это больше связано с SQL Server, чем с MySQL. – Kermit 8 February 2013 в 18:01
  • 3
    @njk Да, но для того, чтобы объяснить, что означает "эквивалент" в 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>
0
ответ дан zloctb 26 August 2018 в 13:46
поделиться

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

65535

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

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

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

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

27
ответ дан ʞɔıu 26 August 2018 в 13:46
поделиться
  • 1
    Мне нравится формат вашего ответа, но, похоже, отсутствует какая-то полезная информация, которая содержит верхний ответ, касающийся кодировок и т. Д. – Joe Phillips 17 April 2018 в 20:46
Другие вопросы по тегам:

Похожие вопросы: