sql >> Database >  >> RDS >> Mysql

wat zijn de veranderingen in mysql 8 resultaat rowset case?

MySQL 8.0 heeft de implementatie van sommige views in de INFORMATION_SCHEMA gewijzigd:

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

Het wordt dus om goede redenen gedaan, maar ik begrijp dat het sommige van uw zoekopdrachten heeft verstoord wanneer u resultaten ophaalt in associatieve arrays op basis van kolomnaam.

U kunt zien dat de definitie van de weergave de kolomnaam expliciet in hoofdletters declareert:

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

U kunt de wijziging op een aantal manieren omzeilen:

U kunt uw eigen kolomaliassen declareren wanneer u een weergave opvraagt:

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

U kunt er een gewoonte van maken om kolommen in hoofdletters op te vragen vóór 8.0. Hier is een test met resultaten in mijn 5.7-sandbox:

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

Of u kunt de resultaten ophalen in een niet-associatieve array en naar kolommen verwijzen op kolomnummer in plaats van op naam.



  1. Datum volgende gebeurtenis weergeven

  2. Kan ik WHERE col LIKE '%' ook NULL-waarden laten selecteren?

  3. Hoe het huidige transactieniveau te vinden?

  4. MySQL Query om items op te halen, maar altijd een bepaalde bovenaan te tonen