最大カラム数

 

MySQL 1017
Oracle 1000  or 4096
PostgreSQL 1600
SQL Server 1024

(8.0.32)
https://dev.mysql.com/doc/refman/8.0/en/column-count-limit.html
https://dev.mysql.com/doc/refman/8.0/en/innodb-limits.html


1017

※ 65,535 バイトの MySQL 最大行サイズ制限あり

: > a.sql

echo "drop table tab1;" >> a.sql

echo "create table tab1(" >> a.sql
echo " col1 int" >> a.sql
for i in $(seq 2 1018); do
  echo ",col${i} int" >> a.sql
done >> a.sql

echo ");" >> a.sql


source a.sql

ERROR 1117 (HY000): Too many columns

 

(19c)

https://docs.oracle.com/cd/F19136_01/refrn/logical-database-limits.html#GUID-685230CF-63F5-4C5A-B8B0-037C566BDA76

1000

 

: > a.sql

echo "drop table tab1 purge;" >> a.sql

echo "create table tab1(" >> a.sql
echo " col1 int" >> a.sql
for i in $(seq 2 1001); do
  echo ",col${i} int" >> a.sql
done >> a.sql

echo ");" >> a.sql


@a.sql

ORA-01792: 表またはビューに指定できる最大列数は1000です。

 

(23c)

下記のようにmax_columns パラメータにEXTENDEDと設定により4096列まで可能

sqlplus test/test@localhost:1521/freepdb1

show parameter max_columns;
alter system set max_columns=EXTENDED scope=spfile;


conn / as sysdba
alter pluggable database FREEPDB1 close immediate;
alter pluggable database FREEPDB1 open;

conn test/test@localhost:1521/freepdb1

: > a.sql

echo "drop table tab1 purge;" >> a.sql

echo "create table tab1(" >> a.sql
echo " col1 int" >> a.sql
for i in $(seq 2 4097); do
  echo ",col${i} int" >> a.sql
done >> a.sql

echo ");" >> a.sql


@a.sql

ORA-01792: 表またはビューに指定できる最大列数は1000です。
ORA-01792: maximum number of columns in a table or view is 4096

※日本語のエラーメッセージは1000のまま

 

(15)
https://www.postgresql.jp/document/14/html/limits.html

1600

※ 1ページに収まるタプルの大きさ(8192バイト)によりさらに制限されます。

: > a.sql

echo "drop table tab1;" >> a.sql

echo "create table tab1(" >> a.sql
echo " col1 int" >> a.sql
for i in $(seq 2 1601); do
  echo ",col${i} int" >> a.sql
done >> a.sql

echo ");" >> a.sql


\i a.sql

psql:a.sql:1604: ERROR:  tables can have at most 1600 columns

 

(2022)
https://learn.microsoft.com/ja-jp/sql/sql-server/maximum-capacity-specifications-for-sql-server?view=sql-server-ver16

1024

※ 行ごとのバイト数8,060の制限あり

: > a.sql

echo "drop table tab1;" >> a.sql

echo "create table tab1(" >> a.sql
echo " col1 int" >> a.sql
for i in $(seq 2 1025); do
  echo ",col${i} int" >> a.sql
done >> a.sql

echo ");" >> a.sql


sqlcmd -U sa -S 192.168.137.62 -d test -b -i a.sql

Msg 1702, Level 16, State 1, Server mmm062, Line 2
CREATE TABLE が失敗しました。テーブル 'tab1' の列 'col1025' が、列の最大数 1024 列を超えています。