sql >> データベース >  >> RDS >> MariaDB

MariaDBで照合を表示する

    MariaDBでは、照合はさまざまなレベルで適用できます。照合は、サーバーレベル、接続レベル、データベースレベル、テーブルレベル、さらには列レベルでも適用できます。

    クエリレベルで照合を指定して、データベース、テーブル、または列レベルで適用された照合を上書きすることもできます。

    MariaDBには、さまざまなレベルで照合を返すためのオプションがいくつか用意されています。

    接続、サーバー、およびデータベースの照合を表示する

    SHOW VARIABLESを使用できます LIKEを含む管理ステートメント 名前に特定の文字列を含む変数を返す句。

    例:

    SHOW VARIABLES LIKE 'collation%';

    結果の例:

    +----------------------+--------------------+
    | Variable_name        | Value              |
    +----------------------+--------------------+
    | collation_connection | utf8_general_ci    |
    | collation_database   | utf8mb4_general_ci |
    | collation_server     | utf8mb4_general_ci |
    +----------------------+--------------------+
    >

    これらは、テスト環境で得られた結果です。得られる結果は、設定によって異なります。

    これらの個別の変数はそれぞれ、必要に応じて個別に返すことができます(以下を参照)。

    デフォルトでは、SHOW VARIABLESSESSIONを示しています 変数。この場合、現在の接続に対して有効な値を返します。

    したがって、前の例は次のように書き直すことができます。

    SHOW SESSION VARIABLES LIKE 'collation%';

    結果の例:

    +----------------------+--------------------+
    | Variable_name        | Value              |
    +----------------------+--------------------+
    | collation_connection | utf8_general_ci    |
    | collation_database   | utf8mb4_general_ci |
    | collation_server     | utf8mb4_general_ci |
    +----------------------+--------------------+
    >

    または、SESSIONを置き換えることもできます LOCALを使用 (これはSESSIONの同義語です ):

    SHOW LOCAL VARIABLES LIKE 'collation%';

    GLOBALを使用することもできます MariaDBへの新しい接続に使用される値を表示する修飾子。

    例:

    SHOW GLOBAL VARIABLES LIKE 'collation%';

    結果の例:

    +----------------------+--------------------+
    | Variable_name        | Value              |
    +----------------------+--------------------+
    | collation_connection | utf8mb4_general_ci |
    | collation_database   | utf8mb4_general_ci |
    | collation_server     | utf8mb4_general_ci |
    +----------------------+--------------------+
    >

    サーバー照合

    次のコマンドは、サーバーのデフォルトの照合を返します。

    SELECT @@collation_server;

    結果の例:

    +--------------------+
    | @@collation_server |
    +--------------------+
    | utf8mb4_general_ci |
    +--------------------+

    接続レベルの照合

    MariaDBデータベースに対してクエリを実行すると、MariaDBは一連のシステム変数を使用して、クエリが実行されるたびに使用する文字セットと照合を決定します。クライアントがサーバーに対して別の文字セットを使用している場合、MariaDBはそれを適切な文字セットと照合に変換できます。

    クエリ結果をクライアントに送り返すときに、MariaDBは、必要に応じて、これらの結果を別の文字セットに完全に変換して戻すことができます。 MariaDBは、システム変数を使用して、これらの各ステップで使用する文字セットと照合を決定します。

    以下は、接続の照合を選択します(どのシステム変数にも同じ構文を使用できます):

    SELECT @@collation_connection;

    結果の例:

    +------------------------+
    | @@collation_connection |
    +------------------------+
    | utf8_general_ci        |
    +------------------------+

    次のクエリを使用して、すべての文字セットシステム変数を返すこともできます。

    SHOW VARIABLES LIKE 'character_set%';

    結果:

    +--------------------------+--------------------------------------------------------+
    | Variable_name            | Value                                                  |
    +--------------------------+--------------------------------------------------------+
    | character_set_client     | utf8                                                   |
    | character_set_connection | utf8                                                   |
    | character_set_database   | utf8mb4                                                |
    | character_set_filesystem | binary                                                 |
    | character_set_results    | utf8                                                   |
    | character_set_server     | utf8mb4                                                |
    | character_set_system     | utf8                                                   |
    | character_sets_dir       | /usr/local/Cellar/mariadb/10.5.9/share/mysql/charsets/ |
    +--------------------------+--------------------------------------------------------+

    データベースレベルの照合

    次のステートメントを使用して、特定のデータベースの照合を確認できます。

    USE PetHouse;
    SELECT @@character_set_database, @@collation_database;

    結果の例:

    +--------------------------+----------------------+
    | @@character_set_database | @@collation_database |
    +--------------------------+----------------------+
    | utf8mb4                  | utf8mb4_general_ci   |
    +--------------------------+----------------------+

    別の方法は、次のようなステートメントを使用することです。

    SELECT 
        default_character_set_name, 
        default_collation_name 
    FROM information_schema.schemata 
    WHERE schema_name = 'PetHouse';

    結果の例:

    +----------------------------+------------------------+
    | default_character_set_name | default_collation_name |
    +----------------------------+------------------------+
    | utf8mb4                    | utf8mb4_general_ci     |
    +----------------------------+------------------------+

    この2番目の方法を使用すると、データベースを切り替えることなく結果を取得できます。

    ここでは別のデータベースを使用しています:

    SELECT 
        default_character_set_name, 
        default_collation_name 
    FROM information_schema.schemata 
    WHERE schema_name = 'test';

    結果の例:

    +----------------------------+------------------------+
    | default_character_set_name | default_collation_name |
    +----------------------------+------------------------+
    | latin1                     | latin1_swedish_ci      |
    +----------------------------+------------------------+

    これは、MariaDBを最初にインストールしたときに作成されたテストデータベースです。

    テーブルレベルの照合

    次のステートメントは、一致するテーブルに関する情報を提供するいくつかの列を返します。これらの列の1つは Collat​​ion と呼ばれます 、および一致するすべてのテーブルの照合を提供します。

    SHOW TABLE STATUS LIKE '%Pets%';

    結果の例(垂直出力を使用):

    *************************** 1. row ***************************
                Name: Pets
              Engine: InnoDB
             Version: 10
          Row_format: Dynamic
                Rows: 8
      Avg_row_length: 2048
         Data_length: 16384
     Max_data_length: 0
        Index_length: 32768
           Data_free: 0
      Auto_increment: NULL
         Create_time: 2021-03-30 09:10:38
         Update_time: 2021-03-30 09:16:39
          Check_time: NULL
           Collation: utf8mb4_general_ci
            Checksum: NULL
      Create_options: 
             Comment: 
    Max_index_length: 0
           Temporary: N

    この場合、Petsというテーブルに関する情報を取得しました 。 Collation 列にutf8mb4_general_ciが含まれています 、これはテーブルの照合です。

    このステートメントは、FROMなどの他の句も受け入れます。 、WHERE 、およびIN 、したがって、これにより、ステートメントを作成するときにいくつかのオプションが提供されます。

    テーブルに関する照合情報を取得する別の方法は、information_schema.tablesに対してクエリを実行することです。 :

    SELECT 
        table_schema, 
        table_name, 
        table_collation 
    FROM information_schema.tables 
    WHERE table_schema = 'PetHouse';

    結果の例:

    +--------------+---------------+--------------------+
    | table_schema | table_name    | table_collation    |
    +--------------+---------------+--------------------+
    | pethouse     | vpettypecount | NULL               |
    | pethouse     | Pets          | utf8mb4_general_ci |
    | pethouse     | Owners        | utf8mb4_general_ci |
    | pethouse     | PetTypes      | utf8mb4_general_ci |
    +--------------+---------------+--------------------+

    列レベルの照合

    次のクエリを実行すると、Petsの各列に関する情報が返されます。 テーブル。これには照合情報が含まれます。

    SHOW FULL COLUMNS FROM Pets;

    結果の例:

    +-----------+-------------+--------------------+------+-----+---------+-------+---------------------------------+---------+
    | Field     | Type        | Collation          | Null | Key | Default | Extra | Privileges                      | Comment |
    +-----------+-------------+--------------------+------+-----+---------+-------+---------------------------------+---------+
    | PetId     | int(11)     | NULL               | NO   | PRI | NULL    |       | select,insert,update,references |         |
    | PetTypeId | int(11)     | NULL               | NO   | MUL | NULL    |       | select,insert,update,references |         |
    | OwnerId   | int(11)     | NULL               | NO   | MUL | NULL    |       | select,insert,update,references |         |
    | PetName   | varchar(60) | utf8mb4_general_ci | NO   |     | NULL    |       | select,insert,update,references |         |
    | DOB       | date        | NULL               | YES  |     | NULL    |       | select,insert,update,references |         |
    +-----------+-------------+--------------------+------+-----+---------+-------+---------------------------------+---------+

    または、information_schema.columnsをクエリすることもできます 。この場合、関心のある列だけを選択できます:

    SELECT 
        column_name, 
        character_set_name, 
        collation_name 
    FROM information_schema.columns
    WHERE table_name = 'Pets';

    結果の例:

    +-------------+--------------------+--------------------+
    | column_name | character_set_name | collation_name     |
    +-------------+--------------------+--------------------+
    | PetId       | NULL               | NULL               |
    | PetTypeId   | NULL               | NULL               |
    | OwnerId     | NULL               | NULL               |
    | PetName     | utf8mb4            | utf8mb4_general_ci |
    | DOB         | NULL               | NULL               |
    +-------------+--------------------+--------------------+

    ツールキットにあるもう1つのオプションは、CREATE TABLEをチェックアウトすることです。 私たちのテーブルのステートメント。

    このように:

    SHOW CREATE TABLE Pets;

    結果:

    +-------+------------------------------+
    | Table | Create Table                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
    +-------+------------------------------+
    | Pets  | CREATE TABLE `Pets` (
      `PetId` int(11) NOT NULL,
      `PetTypeId` int(11) NOT NULL,
      `OwnerId` int(11) NOT NULL,
      `PetName` varchar(60) NOT NULL,
      `DOB` date DEFAULT NULL,
      PRIMARY KEY (`PetId`),
      KEY `PetTypeId` (`PetTypeId`),
      KEY `OwnerId` (`OwnerId`),
      CONSTRAINT `pets_ibfk_1` FOREIGN KEY (`PetTypeId`) REFERENCES `PetTypes` (`PetTypeId`),
      CONSTRAINT `pets_ibfk_2` FOREIGN KEY (`OwnerId`) REFERENCES `Owners` (`OwnerId`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 |
    +-------+-------------------------------+

    ただし、文字セットと照合情報は、テーブルのデフォルトの照合と異なる場合にのみ返されます。この例では、照合情報はしませんでした 異なるため、照合情報は返されませんでした。

    照合を変更しましょう:

    ALTER TABLE Pets 
    MODIFY PetName VARCHAR(255) 
        CHARACTER SET utf8 COLLATE utf8_spanish_ci NOT NULL;

    そして、SHOW CREATE TABLEを実行します もう一度:

    SHOW CREATE TABLE Pets;

    結果:

    +-------+------------------------------+
    | Table | Create Table                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
    +-------+------------------------------+
    | Pets  | CREATE TABLE `Pets` (
      `PetId` int(11) NOT NULL,
      `PetTypeId` int(11) NOT NULL,
      `OwnerId` int(11) NOT NULL,
      `PetName` varchar(255) CHARACTER SET utf8 COLLATE utf8_spanish_ci NOT NULL,
      `DOB` date DEFAULT NULL,
      PRIMARY KEY (`PetId`),
      KEY `PetTypeId` (`PetTypeId`),
      KEY `OwnerId` (`OwnerId`),
      CONSTRAINT `pets_ibfk_1` FOREIGN KEY (`PetTypeId`) REFERENCES `PetTypes` (`PetTypeId`),
      CONSTRAINT `pets_ibfk_2` FOREIGN KEY (`OwnerId`) REFERENCES `Owners` (`OwnerId`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 |
    +-------+-------------------------------+

    今回は、PetNameに対する新しい文字セットと照合設定を確認できます。 列。


    1. OracleからMySQLに移行する

    2. Entity Frameworkを使用して、読み取り時にテーブルをロックするにはどうすればよいですか?

    3. SQLServer結果セットの行を制限する方法

    4. PostgreSQLの日付から世紀を取得する