96432


データベース名の先頭に意図せず半角空白が含まれてしまうことが稀にあるのですが、設定等で、MySQLデータベース名先頭空白を禁止する方法はありますか？


CC BY-SA 4.0
2023-10-04T10:50:00.333
96421
2023-10-06T01:59:11.003
7886
question
mysql
MySQLデータベース名の先頭に空白を禁止するには？


禁止する、のではなく、データベース名には無条件に先頭の空白を削除するようにすればいいのでは。


CC BY-SA 4.0
2023-10-05T23:24:18.197
96431
2023-10-05T23:24:18.197
27481
96421
answer


設定等で先頭の空白文字を禁止する制限は公式リファレンスや本家SOをざっと調べても見つかりませんでした。

データベース名、テーブル名、カラム名など各種オブジェクトの識別子は同一の命名規則が適用されています。  
識別子の命名規則は変更不能な仕様の可能性が高いと個人的に感じています。  
先頭の空白文字はデータベース作成時のプログラムで抑制するか、作成後にチェックを行って監視および変更するなど、クライアント側での対応が現実的ではないでしょうか。

MySQL 8.0 Refelence Manualの[9.2 Schema Object
Names](https://dev.mysql.com/doc/refman/8.0/en/identifiers.html)によると、下記の各種オブジェクト識別子は後述の命名規則が設定されています。  
`database, table, index, column, alias, view, stored procedure, partition,
tablespace, resource group and other object names`

  * Create時などに'引用符'でくくらない場合に許可される文字: 
    * ASCII: [0-9,a-z,A-Z$_] (basic Latin letters, digits 0-9, dollar, underscore)
    * Extended: U+0080 .. U+FFFF
  * Create時などに'引用符'でくくった場合に許可される文字(U+0000を除く基本多言語面(BMP)をすべて含む): 
    * ASCII: U+0001 .. U+007F # スペース(U+0020)を含む
    * Extended: U+0080 .. U+FFFF
  * ASCII NUL (U+0000)とUnicode 4.0 の補助文字(U+10000以上)は許可しない
  * 引用符でくくらない場合は数字のみの識別子を許可しない
  * データベース、テーブル、カラムは末尾のスペースを許可しない 
    * ※(編集コメント)なぜか冒頭のスペースについては記述がない
  * MySQL 8.0.32 以降、以下について最初の文字としてドル記号を使用することは非推奨となり、警告が生成される 
    * データベース、テーブル、ビュー、カラム、ストアド プログラム、またはエイリアスの引用符で囲まれていない名前
  * データベース名の長さは64bitまで 
    * cf: [9.2.1 Identifier Length Limits](https://dev.mysql.com/doc/refman/8.0/en/identifier-length.html)

**参考資料**

  * [Mysql Database Name Restrictions](https://stackoverflow.com/q/9537771)
    * 2012年の質問です。制限する文字(Cannot contain / \ or . characters.)は緩和されたように見えます。


CC BY-SA 4.0
2023-10-06T01:59:11.003
96432
2023-10-06T01:59:11.003
9820
96421
answer