2009-05-29 99 views

回答

26

我強烈建議您不要使用這些名稱創建數據庫。但是,如果你絕對必須,這裏有restrictions

  • 沒有標識符可以包含ASCII NUL(0x00),或是用255
  • 數據庫,表和列名的值不應與空間結束字節字符。
  • 數據庫和表名不能包含「/」,「\」,「。」或文件名中不允許的字符。

要創建一個數據庫,你可以做到以下幾點:

mysql> create database `[email protected]*database$name`; 
+0

我想動態創建它,我可以這樣做嗎?例如 - 我想給一個變量的數據庫名稱 set @a = name.surname; create database @a; – 2009-05-29 12:45:29

+0

非常感謝安德烈。這是一個很大的幫助,因爲我需要它,儘管這是不可取的。謝謝:) – 2009-05-29 13:17:54

3

簡單:不要。

可以使用反引號在mysql中逃脫異國情調的表名,但我不知道是否可以使用任何反引號包圍。在軟件生命週期的其餘部分,它會帶來很大的痛苦。

我寧願建議創建另一個表來保存這些奇異的名字。

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

簡短的回答:

  • 不要。我強烈建議保留所有由A-Z,a-z,0-9和_字符組成的標識符。您可以將您的「異國情調」名稱存儲在一列或評論中。

龍答:

  • 您可以命名您的列,表鍵,外鍵,視圖,甚至數據庫利用外來字符,但機會是你會在將來後悔。
  • 如果你堅持這樣做,你需要在反引號(`)中引用你的標識符。
  • 如果你的標識必須包含另一個`內,您可以逃避它,說明它的兩倍(如外來`名稱 - > `異國` `名`)
  • 對於事情並非如此簡單,如果你在你的數據庫名稱中使用外來的(甚至是非常規的)字符(包括簡單的空格),那些字符(據我所知,除az,AZ,0-9和_之外的所有內容)都會被轉換成4位十六進制四字節通過@逃脫,例如`我的數據庫`成爲我的@ 0020數據庫。該表格被用作存儲你的數據庫/表格的目錄/文件的名稱,例如information_schema.INNODB_SYS_FOREIGN中的項目還可能非常依賴操作系統(也就是說,理論上,您可能想要運行SHOW VARIABLES LIKE 'version_compile_os'以適應它)。你看 - 用奇特的名字,它會變得更加複雜,最終它並不值得。