Related Documentation Download this Manual
PDF (US Ltr) - 37.4Mb
PDF (A4) - 37.5Mb
PDF (RPM) - 33.2Mb
HTML Download (TGZ) - 8.3Mb
HTML Download (Zip) - 8.4Mb
HTML Download (RPM) - 7.3Mb
Man Pages (TGZ) - 130.1Kb
Man Pages (Zip) - 185.6Kb
Info (Gzip) - 3.3Mb
Info (Zip) - 3.3Mb

MySQL 8.0 Reference Manual  /  ...  /  Mapping of Identifiers to File Names

Pre-General Availability Draft: 2018-02-24

9.2.3 Mapping of Identifiers to File Names

There is a correspondence between database and table identifiers and names in the file system. For the basic structure, MySQL represents each database as a directory in the data directory, and depending upon the storage engine, each table may be represented by one or more files in the appropriate database directory.

For the data and index files, the exact representation on disk is storage engine specific. These files may be stored in the database directory, or the information may be stored in a separate file. InnoDB data is stored in the InnoDB data files. If you are using tablespaces with InnoDB, then the specific tablespace files you create are used instead.

Any character is legal in database or table identifiers except ASCII NUL (X'00'). MySQL encodes any characters that are problematic in the corresponding file system objects when it creates database directories or table files:

  • Basic Latin letters (a..zA..Z), digits (0..9) and underscore (_) are encoded as is. Consequently, their case sensitivity directly depends on file system features.

  • All other national letters from alphabets that have uppercase/lowercase mapping are encoded as shown in the following table. Values in the Code Range column are UCS-2 values.

    Code RangePatternNumberUsedUnusedBlocks
    00C0..017F[@][0..4][g..z]5*20= 100973Latin-1 Supplement + Latin Extended-A
    0370..03FF[@][5..9][g..z]5*20= 1008812Greek and Coptic
    0400..052F[@][g..z][0..6]20*7= 1401373Cyrillic + Cyrillic Supplement
    0530..058F[@][g..z][7..8]20*2= 40382Armenian
    2160..217F[@][g..z][9]20*1= 20164Number Forms
    0180..02AF[@][g..z][a..k]20*11=22020317Latin Extended-B + IPA Extensions
    1E00..1EFF[@][g..z][l..r]20*7= 1401364Latin Extended Additional
    1F00..1FFF[@][g..z][s..z]20*8= 16014416Greek Extended
    .... ....[@][a..f][g..z]6*20= 1200120RESERVED
    24B6..24E9[@][@][a..z]26260Enclosed Alphanumerics
    FF21..FF5A[@][a..z][@]26260Halfwidth and Fullwidth forms

    One of the bytes in the sequence encodes lettercase. For example: LATIN CAPITAL LETTER A WITH GRAVE is encoded as @0G, whereas LATIN SMALL LETTER A WITH GRAVE is encoded as @0g. Here the third byte (G or g) indicates lettercase. (On a case-insensitive file system, both letters will be treated as the same.)

    For some blocks, such as Cyrillic, the second byte determines lettercase. For other blocks, such as Latin1 Supplement, the third byte determines lettercase. If two bytes in the sequence are letters (as in Greek Extended), the leftmost letter character stands for lettercase. All other letter bytes must be in lowercase.

  • All nonletter characters except underscore (_), as well as letters from alphabets that do not have uppercase/lowercase mapping (such as Hebrew) are encoded using hexadecimal representation using lowercase letters for hexadecimal digits a..f:

    0x003F -> @003f
    0xFFFF -> @ffff

    The hexadecimal values correspond to character values in the ucs2 double-byte character set.

On Windows, some names such as nul, prn, and aux are encoded by appending @@@ to the name when the server creates the corresponding file or directory. This occurs on all platforms for portability of the corresponding database object between platforms.

User Comments
  Posted by Adrian Chapela Cordeiro on September 25, 2008
Aux isn't reserved in Linux but if you are trying to upgrade 5.0 to 5.1 and the MySQL 5.0 installation has a database name as "Aux", MySQL 5.1 can not use this database, because MySQL Server needs a directory name as "Aux@@@" and the MySQL 5.0 directory name was "Aux".

Sign Up Login You must be logged in to post a comment.