Какое максимальное количество столбцов может иметь таблица SQL? - PullRequest
0 голосов
/ 11 октября 2019

Я использую Laravel для своего веб-приложения. Я выполняю миграцию таблицы, используя php artisan migrate.

. В таблице 316 столбцов с 150 столбцами с плавающей запятой и 150+ строковыми столбцами

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class Createtable_nameTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('table_name', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('column2');
            $table->foreign('column2')->references('column1')->on('table1')->onDelete('cascade')->onUpdate('cascade');
            $table->string('column3');
            $table->string('column4');
            $table->string('column5');
            $table->string('column6');
            $table->integer('column7')->unsigned();
            $table->integer('column8')->unsigned();
            $table->integer('column9')->unsigned();
            $table->integer('column10')->unsigned();
            $table->integer('column11')->unsigned();
            $table->integer('column12')->unsigned();
            $table->integer('column13')->unsigned();
            $table->integer('column14')->unsigned();
            $table->integer('column15')->unsigned();
            $table->float('column16');
            $table->float('column17');
            .
            .
            .
            .


            $table->float('column166');
            $table->string('column167');
           .
           .
           .
            $table->string('column316');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('table_name');
    }
}

Я получаю следующую ошибку:

SQLSTATE [42000]: синтаксическая ошибка или нарушение прав доступа: 1118 Слишком большой размер строки. - Максимальный размер строки для используемого типа таблицы, не считая BLOB-объектов, составляет 65535. Сюда входят накладные расходы на хранение, см. ManualSQLSTATE [42000]: Синтаксическая ошибка или нарушение прав доступа: 1118 Слишком большой размер строки. Максимальный размер строки для используемого типа таблицы, не считая больших двоичных объектов, составляет 65535. Сюда входят накладные расходы на хранение, см. Руководство

Ответы [ 2 ]

3 голосов
/ 11 октября 2019

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

MySQL имеет жесткий предел в 4096 столбцов на таблицу, но эффективный максимум может быть меньше для данной таблицы. Точный предел столбца зависит от нескольких факторов:

Максимальный размер строки для таблицы ограничивает количество (и, возможно, размер) столбцов, поскольку общая длина всех столбцов не может превышать этот размер. См. Ограничения размера строки.

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

Механизмы хранения могут накладывать дополнительные ограничения, ограничивающие количество столбцов таблицы. Например, InnoDB имеет ограничение в 1017 столбцов на таблицу. Смотрите ограничения на таблицы InnoDB. Для получения информации о других механизмах хранения см. Альтернативные механизмы хранения.

Каждая таблица имеет файл .frm, который содержит определение таблицы. Определение влияет на содержимое этого файла способами, которые могут повлиять на количество столбцов, разрешенных в таблице. См. Раздел 12.6, «Ограничения, налагаемые структурой файла .frm».

Таким образом, в основном это зависит от механизма хранения, формата хранения и набора символов

0 голосов
/ 11 октября 2019

это количество байтов в строке, а не количество столбцов. Максимальное количество столбцов зависит от типа столбца, поскольку каждый тип занимает определенное количество байтов.

Я предлагаю вам изменить модель базы данных и сделать эти столбцы строками в чужой таблице. У вас будет table_name и table_name_columns, которые ссылаются на table_name.

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