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)
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
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 列を超えています。