結論から言うと、ストレージエンジンの仕様による制限だと思われます。オペレーティングシステムの制限も関係すると考えられます。
以下を確認しました。
- macOS Ventura 13.6.3 (M2)
- MySQL 8.0.35
- InnoDB
平仮名65文字:
mysql> create table ああああああああああいいいいいいいいいいううううううううううええええええええええおおおおおおおおおおああああああああああいいいいい (a int);
ERROR 1103 (42000): Incorrect table name 'ああああああああああいいいいいいいいいいううううううううううえええ?'
識別子名の長さ制限 (64文字) に引っ掛かります (エラーメッセージのテーブル名が変なところで切り詰められていますが)。
平仮名64文字 - 51文字
mysql> create table `ああああああああああいいいいいいいいいいううううううううううええええええええええおおおおおおおおおおああああああああああいいいい` (a int);
ERROR 1030 (HY000): Got error 168 - 'Unknown (generic) error from engine' from storage engine
...
mysql> create table `ああああああああああいいいいいいいいいいううううううううううええええええええええおおおおおおおおおおあ` (a int);
ERROR 1030 (HY000): Got error 168 - 'Unknown (generic) error from engine' from storage engine
MySQL自身も知らない (なんだそりゃ) ストレージエンジンのエラーで失敗します。
平仮名50文字
mysql> create table `ああああああああああいいいいいいいいいいううううううううううええええええええええおおおおおおおおおお` (a int);
Query OK, 0 rows affected (0.01 sec)
成功します。
平仮名50文字 と 英字
mysql> create table `ああああああああああいいいいいいいいいいううううううううううええええええええええおおおおおおおおおおaa` (a int);
ERROR 1030 (HY000): Got error 168 - 'Unknown (generic) error from engine' from storage engine
mysql> create table `ああああああああああいいいいいいいいいいううううううううううええええええええええおおおおおおおおおおa` (a int);
Query OK, 0 rows affected (0.01 sec)
英字1文字の追加までは成功します。
作成されたテーブルファイルは次のようなものです。
% ls /opt/homebrew/var/mysql/test
@3042@3042@3042@3042@3042@3042@3042@3042@3042@3042@3044@3044@3044@3044@3044@3044@3044@3044@3044@3044@3046@3046@3046@3046@3046@3046@3046@3046@3046@3046@3048@3048@3048@3048@3048@3048@3048@3048@3048@3048@304a@304a@304a@304a@304a@304a@304a@304a@304a@304a.ibd
@3042@3042@3042@3042@3042@3042@3042@3042@3042@3042@3044@3044@3044@3044@3044@3044@3044@3044@3044@3044@3046@3046@3046@3046@3046@3046@3046@3046@3046@3046@3048@3048@3048@3048@3048@3048@3048@3048@3048@3048@304a@304a@304a@304a@304a@304a@304a@304a@304a@304aa.ibd
「Mapping of Identifiers to File Names」で説明されているマッピングにより、平仮名は1文字あたり5バイトになります。これに拡張子4バイトが加わります。
255バイトがストレージエンジンにおけるファイル名の長さの上限だと思われます。
[追記] 今回確認したmacOSの環境では、ファイル名の長さの上限はOSレベルで255文字です。ほかのOSでも、ファイル名の長さの上限が255バイトまたは255文字とするものがほとんどです (なお、OSが扱える パス名 の長さは一般にこれよりも長いです)。そのため、255バイトがストレージエンジンにおけるファイル名の長さの事実上の上限となると考えられます。