Моят личен и професионален живот

2020-10-20

Излезе MySQL 8.0.22

Вчера, Oracle пусна MySQL 8.0.22, така че се получи като подарък за рожден ден за мен :-) Това разбира се е следващата чиста версия по поддръжката в 8.0 серията, така че няма големи нови възможности, но нормално проверих бележките към версията и официалната публикация. Има много малки промени и поправки, но списъка отдолу са тези, които привлякоха вниманието ми:

  • Оптимизация за придвижване на условието към производна таблица за подходящи заявки - може да подобри производителността на някои заявки чрез пренаписване на следната заявка
    • SELECT * FROM (SELECT i, j FROM t1) as dt WHERE i > 10; в
    • SELECT * FROM (SELECT i, j FROM t1 WHERE i > 10) as dt;
  • Изрази на заявки в скоби ви позволява да пишете изрази така ( query_expression ) [order_by_clause] [limit_clause] [into_clause]. Само няколко примера от наръчника, за да илюстрират идеята:
    • (SELECT 1 AS result UNION SELECT 2);
    • (SELECT 1 AS result UNION SELECT 2) LIMIT 1;
    • (SELECT 1 AS result UNION SELECT 2) LIMIT 1 OFFSET 1;
    • (SELECT 1 AS result UNION SELECT 2) ORDER BY result DESC LIMIT 1;
    • (SELECT * FROM t1 ORDER BY a) UNION (SELECT * FROM t2 ORDER BY b) ORDER BY z;
  • CAST() или CONVERT() към YEAR - напр. SELECT CAST('1945ad' AS YEAR) yr; или SELECT CONVERT('1945ad', YEAR) yr; и двете произвеждат 1945.
  • Получаване на съхранена TIMESTAMP стойност в UTC - моля, обърнете внимание на "съхранена" тук, защото не можете да получите CURRENT_TIMESTAMP в друга часова зона така (т.е. израза SELECT CAST(CURRENT_TIMESTAMP() AT TIME ZONE 'UTC' AS DATETIME) utc_tz; дава като резултат Error Code: 3998. Cannot cast value to TIMESTAMP WITH TIME ZONE). Като се има в предвид, че глават The DATE, DATETIME, and TIMESTAMP Types в наръчника уточнява, че "MySQL converts TIMESTAMP values from the current time zone to UTC for storage, and back from UTC to the current time zone for retrieval." това трябва да значи, че стойността се получава така както е съхранена, което може да е това което искате ако желаете да извадите преобразуването извън MySQL сървъра в случай, че поддръжката на времеви зони не е подходяща за вашите нужди.
  • Избор само за четене за схема предоставя начин за пълно забраняване на писанията по субектите в схема. Прави се с ALTER DATABASE израз (т.е. ALTER DATABASE test READ ONLY = 0) с цел опростяване на онлайн миграции на данни.
  • Поддръжка на SRV DNS записи в клиента (виж Connecting to the Server Using DNS SRV Records).

Имах проблеми с изграждането на новата версия върху Slackware -current с Protobuf библиотека версия 3.2.1, защото явно минималната необходима версия на библиотеката е била променена без известие (виж бъг 101230), а още повече не се установява правилно и докладва от системата за изграждане водейки до компилационни грешки след това (виж бъг 101231).