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

mysql 8の結果の行セットの場合の変更点は何ですか?

    MySQL 8.0は、INFORMATION_SCHEMAの一部のビューの実装を変更しました:

    https://mysqlserverteam.com/mysql-8-0-improvements- to-information_schema / 言う:

    したがって、これは正当な理由で行われていますが、列名に基づいて連想配列で結果をフェッチすると、クエリの一部が混乱することを理解しています。

    ビューの定義が列名を大文字で明示的に宣言していることがわかります:

    mysql 8.0.14> SHOW CREATE VIEW CHARACTER_SETS\G
    *************************** 1. row ***************************
                    View: CHARACTER_SETS
             Create View: CREATE ALGORITHM=UNDEFINED DEFINER=`mysql.infoschema`@`localhost` SQL SECURITY DEFINER VIEW `CHARACTER_SETS` AS 
      select 
        `cs`.`name` AS `CHARACTER_SET_NAME`,
        `col`.`name` AS `DEFAULT_COLLATE_NAME`,
        `cs`.`comment` AS `DESCRIPTION`,
        `cs`.`mb_max_length` AS `MAXLEN` -- delimited column explicitly uppercase
      from (`mysql`.`character_sets` `cs` 
      join `mysql`.`collations` `col` on((`cs`.`default_collation_id` = `col`.`id`)))
    
    character_set_client: utf8
    collation_connection: utf8_general_ci
    

    いくつかの方法で変更を回避できます。

    ビューをクエリするときに、必要に応じて独自の列エイリアスを宣言できます。

    mysql 8.0.14> SELECT MAXLEN AS `maxlen` 
      FROM `information_schema`.`CHARACTER_SETS` LIMIT 2;
    +--------+
    | maxlen |
    +--------+
    |      2 |
    |      1 |
    +--------+
    

    8.0より前では、列を大文字で照会する習慣を始めることができます。これが私の5.7サンドボックスでの結果を示すテストです:

    mysql 5.7.24> SELECT MAXLEN 
      FROM `information_schema`.`CHARACTER_SETS` LIMIT 2;
    +--------+
    | MAXLEN |
    +--------+
    |      2 |
    |      1 |
    +--------+
    

    または、結果を非連想配列にフェッチし、名前ではなく列番号で列を参照することもできます。



    1. MySQL2Rubygemは10.6をインストールしません

    2. MySQLで大文字を含む行を見つける3つの方法

    3. SQLServerでの常時接続の可用性グループの設定と構成

    4. Green-DAOで双方向1:mを処理する正しい方法