web-dev-qa-db-ja.com

Mysql名前に特殊文字を含むデータベースを作成する

名前に特殊文字が含まれるデータベースを作成したいと思います。たとえば、(。、-、_、@、#、$、%、&、*)

誰かがこれに関する出力を提供できますか?

15
MySQL DBA

このような名前のデータベースは作成しないことを強くお勧めします。しかし、どうしても必要な場合は、ここに 制限 があります:

  • 識別子にASCII NUL(0x00)または255の値を持つバイトを含めることはできません。
  • データベース、テーブル、および列の名前は、スペース文字で終わらせないでください。
  • データベース名とテーブル名に、「/」、「\」、「。」、またはファイル名で使用できない文字を含めることはできません。

データベースを作成するには、次のようにします。

mysql> create database `really@strange*database$name`;
30
Andre Miller

シンプル:しないでください。

あなたはcan mysqlのバッククォートを使用してエキゾチックなテーブル名をエスケープしますが、バッククォート内でanythingを使用できるかどうかはわかりません。それはあなたのソフトウェアライフサイクルの残りの間に大きな苦痛を与えるでしょう。

そのエキゾチックな名前を保持するために別のテーブルを作成することをお勧めします。

-- Example:
CREATE TABLE _DatabaseMetadata (
    databaseName VARCHAR(255),
    exoticName VARCHAR(255)
) DEFAULT CHARSET=utf8;
3
soulmerge

短い答え:

  • しないでください。 A-Z、a-z、0-9、および_文字で構成されるすべての識別子を保持することを強くお勧めします。 「エキゾチック」な名前を列またはコメントに保存できます。

長い答え:

  • 列、テーブル、キー、外部キー、ビュー、さらにはエキゾチックな文字を使用したデータベースにも名前を付けることができますが、将来的には後悔する可能性があります。
  • あなたがそうすることを主張するならば、あなたはバックティック( `)であなたの識別子を引用する必要があるでしょう。
  • 識別子に別の `が含まれている必要がある場合は、2回記述してエスケープできます(例:exotic`name->` exotic``name`)
  • それほど単純ではないために、データベースの名前にエキゾチックな(または従来とは異なる)文字(単純なスペースを含む)を使用する場合、それらの文字(私の知る限り、az、AZ、0-9を除くすべて)および_)@でエスケープされた4桁の16進数の4つ組にエスケープされます。例: `mydatabase`はmy @ 0020databaseになります。このフォームは、データベース/テーブルが保存されているディレクトリ/ファイルの名前として使用されます。さらに、information_schema.INNODB_SYS_FOREIGNの項目は、OSに依存している可能性があります(つまり、理論的には、SHOW VARIABLES LIKE 'version_compile_os'を実行してそれに適応することができます)。ほら、エキゾチックな名前では、すべてがはるかに複雑になり、最終的にはそれだけの価値はありません。
1
kriplozoik