Mysql
 sql >> Base de données >  >> RDS >> Mysql

quels sont les changements dans le cas de l'ensemble de lignes de résultats mysql 8 ?

MySQL 8.0 a modifié l'implémentation de certaines vues dans le INFORMATION_SCHEMA :

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

Donc, cela se fait pour de bonnes raisons, mais je comprends que cela a perturbé certaines de vos requêtes lorsque vous récupérez des résultats dans des tableaux associatifs basés sur le nom de la colonne.

Vous pouvez voir que la définition de la vue déclare explicitement le nom de la colonne en majuscule :

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

Vous pouvez contourner le changement de plusieurs manières :

Vous pouvez déclarer vos propres alias de colonne dans la casse que vous souhaitez lorsque vous interrogez une vue :

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

Vous pouviez prendre l'habitude d'interroger les colonnes en majuscules avant la version 8.0. Voici un test montrant les résultats dans mon bac à sable 5.7 :

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

Vous pouvez également récupérer les résultats dans un tableau non associatif et référencer les colonnes par numéro de colonne plutôt que par nom.