Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00783 010443 11035511 na godz. na dobę w sumie
MySQL. Opis języka - książka
MySQL. Opis języka - książka
Autor: Liczba stron: 472
Wydawca: Helion Język publikacji: polski
ISBN: 83-7361-688-8 Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> bazy danych >> mysql - programowanie
Porównaj ceny (książka, ebook, audiobook).

to najpopularniejsza na świecie baza danych dostępna na licencji open source. Dzięki swojej wydajności, szybkości działania, stabilności i rozbudowanym mechanizmom zabezpieczeń jest wykorzystywana niemal do wszystkich zadań, do jakich może być potrzebna baza danych. Stanowi zaplecze dla wielu aplikacji korporacyjnych, witryn WWW i sklepów internetowych. Bogactwo funkcji i możliwości to ogromna zaleta środowiska MySQL, jednakże zapamiętanie składni, parametrów i sposobów stosowania wszystkich poleceń i rozszerzeń jest praktycznie niemożliwe. Każdy, kto chce biegle posługiwać się tą bazą, powinien mieć pod ręką materiały opisujące stosowany w niej język SQL.

Książka 'MySQL. Opis języka' to najlepsze źródło takich informacji. Stworzona, zredagowana i sprawdzona przez pracowników działów pomocy i produkcji firmy MySQL AB publikacja zawiera wszystko, co może być potrzebne użytkownikowi bazy danych MySQL. Przedstawia zarówno zagadnienia podstawowe, takie jak: struktura języka, typy danych i zasady konstruowania zapytań, jak i tematy zaawansowane: transakcje, replikację oraz administrowanie bazą. Szczegółowo opisane są również wszystkie zagadnienia związane z zaimplementowanym w niej językiem SQL.

Jeśli szukasz pewnego źródła wiedzy o MySQL, nie mogłeś lepiej trafić.

Znajdź podobne książki Ostatnio czytane w tej kategorii

Darmowy fragment publikacji:

IDZ DO IDZ DO PRZYK£ADOWY ROZDZIA£ PRZYK£ADOWY ROZDZIA£ SPIS TREĎCI SPIS TREĎCI MySQL. Opis jêzyka KATALOG KSI¥¯EK KATALOG KSI¥¯EK KATALOG ONLINE KATALOG ONLINE ZAMÓW DRUKOWANY KATALOG ZAMÓW DRUKOWANY KATALOG Autor: Paul Dubois T³umaczenie: Pawe³ Gonera, Anna Zawadzka ISBN: 83-7361-688-8 Tytu³ orygina³u: MySQL Language Reference Format: B5, stron: 472 TWÓJ KOSZYK TWÓJ KOSZYK DODAJ DO KOSZYKA DODAJ DO KOSZYKA CENNIK I INFORMACJE CENNIK I INFORMACJE ZAMÓW INFORMACJE ZAMÓW INFORMACJE O NOWOĎCIACH O NOWOĎCIACH ZAMÓW CENNIK ZAMÓW CENNIK CZYTELNIA CZYTELNIA FRAGMENTY KSI¥¯EK ONLINE FRAGMENTY KSI¥¯EK ONLINE Wydawnictwo Helion ul. Chopina 6 44-100 Gliwice tel. (32)230-98-63 e-mail: helion@helion.pl MySQL to najpopularniejsza na ġwiecie baza danych dostêpna na licencji open source. Dziêki swojej wydajnoġci, szybkoġci dzia³ania, stabilnoġci i rozbudowanym mechanizmom zabezpieczeñ jest wykorzystywana niemal do wszystkich zadañ, do jakich mo¿e byæ potrzebna baza danych. Stanowi zaplecze dla wielu aplikacji korporacyjnych, witryn WWW i sklepów internetowych. Bogactwo funkcji i mo¿liwoġci to ogromna zaleta ġrodowiska MySQL, jednak¿e zapamiêtanie sk³adni, parametrów i sposobów stosowania wszystkich poleceñ i rozszerzeñ jest praktycznie niemo¿liwe. Ka¿dy, kto chce biegle pos³ugiwaæ siê t¹ baz¹, powinien mieæ pod rêk¹ materia³y opisuj¹ce stosowany w niej jêzyk SQL. Ksi¹¿ka „MySQL. Opis jêzyka” to najlepsze ĥród³o takich informacji. Stworzona, zredagowana i sprawdzona przez pracowników dzia³ów pomocy i produkcji firmy MySQL AB publikacja zawiera wszystko, co mo¿e byæ potrzebne u¿ytkownikowi bazy danych MySQL. Przedstawia zarówno zagadnienia podstawowe, takie jak: struktura jêzyka, typy danych i zasady konstruowania zapytañ, jak i tematy zaawansowane: transakcje, replikacjê oraz administrowanie baz¹. Szczegó³owo opisane s¹ równie¿ wszystkie zagadnienia zwi¹zane z zaimplementowanym w niej jêzykiem SQL. • Podstawowe informacje o MySQL • Jêzyk SQL — instrukcje, typy danych, funkcje i operatory • Zapytania • Definiowanie danych • Obs³uga transakcji • Zarz¹dzanie kontami u¿ytkowników • Konserwacja tabel • Replikacja baz danych • Rozszerzenia MySQL dla systemów GIS • Procedury sk³adowane • Obs³uga b³êdów Spis treści Rozdział 1. Informacje ogólne ............................................................................... 9 1.1. Na temat tego podręcznika...................................................o.................................... 9 1.1.1. Zasady przyjęte w tym podręczniku ...................................................o....... 10 1.2. Omówienie systemu zarządzania bazą danych MySQL......................................... 12 1.2.1. Historia MySQL ...................................................o..................................... 13 1.2.2. Główne cechy MySQL ...................................................o........................... 14 1.2.3. Stabilność MySQL ...................................................o................................. 17 1.2.4. Jak duże mogą być tabele MySQL ...................................................o......... 18 1.2.5. Zgodność z rokiem 2000 ...................................................o........................ 19 1.3. Omówienie MySQL AB ...................................................o..................................... 21 1.3.1. Model biznesowy i usługi MySQL AB...................................................o... 22 1.3.2. Informacje o kontakcie ...................................................o........................... 25 1.4. Obsługa techniczna oraz wydawanie licencji MySQL ........................................... 26 1.4.1. Obsługa techniczna oferowana przez MySQL AB........................................ 26 1.4.2. Prawa autorskie i licencje ...................................................o....................... 27 1.4.3. Licencje MySQL ...................................................o.................................... 28 1.4.4. Logo i znaki towarowe MySQL ...................................................o............. 30 1.5. Plany rozwoju MySQL ...................................................o....................................... 32 1.5.1. MySQL 4.0 w skrócie...................................................o............................. 33 1.5.2. MySQL 4.1 w skrócie...................................................o............................. 35 1.5.3. MySQL 5.0: następna wersja rozwojowa .................................................. 37 1.6. MySQL i przyszłość (TODO) ...................................................o............................. 37 1.6.1. Nowe mechanizmy planowane dla wersji 4.1............................................ 38 1.6.2. Nowe funkcje planowane dla wersji 5.0 ...................................................o. 38 1.6.3. Nowe funkcje planowane dla 5.1...................................................o............ 39 1.6.4. Nowe funkcje planowane w bliskiej przyszłości ......................................... 40 1.6.5. Nowe funkcje planowane w niezbyt odległej przyszłości.......................... 43 1.6.6. Nowe funkcje, których wdrożenia nie planujemy.......................................... 44 1.7. Źródła informacji o MySQL ...................................................o............................... 45 1.7.1. Listy dyskusyjne poświęcone MySQL ...................................................o... 45 1.7.2. Wspomaganie środowiska MySQL na IRC (Internet Relay Chat)............. 54 1.8. Zgodność MySQL ze standardami ...................................................o...................... 55 1.8.1. Standardy spełniane przez MySQL..................................................o.......... 56 1.8.2. Wybieranie trybów MySQL ...................................................o................... 56 1.8.3. Uruchamianie MySQL w trybie ANSI ...................................................o... 56 1.8.4. Rozszerzenia MySQL do standardu SQL .................................................. 57 4 Spis treści 1.8.5. Rozbieżności między MySQL a standardem SQL ........................................ 60 1.8.6. Jak MySQL radzi sobie z ograniczeniami ................................................. 67 1.8.7. Znane błędy i projektowe braki w MySQL................................................ 69 Rozdział 2. Struktura języka ............................................................................... 77 2.1. Literały...................................................o...................................................o.............77 2.1.1. Łańcuchy ...................................................o................................................ 77 2.1.2. Liczby...................................................o...................................................o.. 80 2.1.3. Wartości szesnastkowe ...................................................o........................... 80 2.1.4. Wartości logiczne ...................................................o................................... 81 2.1.5. Wartości NULL ...................................................o...................................... 81 2.2. Nazwy baz danych, tabel, indeksów, kolumn i aliasów ......................................... 81 2.2.1. Kwalifikatory identyfikatorów ...................................................o............... 83 2.2.2. Znaczenie wielkości liter w nazwach identyfikatorów .............................. 83 2.3. Zmienne definiowane przez użytkownika...................................................o........... 85 2.4. Zmienne systemowe...................................................o............................................ 87 2.4.1. Strukturalne zmienne systemowe ...................................................o........... 89 2.5. Składnia komentarza ...................................................o........................................... 91 2.6. Traktowanie słów zastrzeżonych w MySQL...................................................o....... 92 Rozdział 3. Obsługa zestawów znaków ................................................................ 95 3.1. Ogólne informacje o zestawach znaków i sortowaniu ........................................... 95 3.2. Zestawy znaków i porządki sortowania w MySQL................................................ 96 3.3. Określanie domyślnego zestawu znaków i sortowania........................................... 98 3.3.1. Zestaw znaków i sortowanie dla serwera...................................................o 98 3.3.2. Zestaw znaków i sortowanie dla bazy danych ........................................... 99 3.3.3. Zestaw znaków i sortowanie dla tabeli ...................................................o. 100 3.3.4. Zestaw znaków i sortowanie dla kolumny............................................... 100 3.3.5. Przykłady przypisywania zestawu znaków i sortowania ......................... 101 3.3.6. Zestawy znaków i sortowanie dla połączenia .......................................... 102 3.3.7. Zestaw znaków i sortowanie dla łańcucha znaków.................................. 104 3.3.8. Wykorzystywanie COLLATE w instrukcjach SQL .................................... 105 3.3.9. Priorytet klauzuli COLLATE ...................................................o............... 106 3.3.10. Operator BINARY...................................................o................................ 106 3.3.11. Niektóre przypadki specjalne, w których trudno określić sortowanie...... 106 3.3.12. Sortowania muszą być odpowiednie dla danego zestawu znaków........... 107 3.3.13. Przykład wpływu porządku sortowania ...................................................o 108 3.4. Operacje, na które ma wpływ obsługa zestawów znaków.................................... 109 3.4.1. Łańcuchy wyjściowe ...................................................o............................ 109 3.4.2. CONVERT()...................................................o......................................... 110 3.4.3. CAST() ...................................................o................................................. 110 3.4.4. Instrukcje SHOW ...................................................o................................. 111 3.5. Obsługa Unicode...................................................o............................................... 112 3.6. UTF8 dla metadanych...................................................o....................................... 113 3.7. Kompatybilność z innymi systemami zarządzania bazą danych .......................... 115 3.8. Nowy format pliku konfiguracji zestawu znaków................................................ 115 3.9. Narodowe zestawy znaków...................................................o............................... 115 3.10. Aktualizacja zestawów znaków z MySQL 4.0...................................................o.. 116 3.10.1. Zestawy znaków w wersji 4.0 i odpowiadające im w wersji 4.1 pary składające się z zestawu znaków i sortowania......................................... 117 3.10.2. Przekształcanie kolumn znakowych wersji 4.0 na format 4.1 ................. 118 3.11. Zestawy znaków i sortowania obsługiwane przez MySQL.................................. 118 3.11.1. Zestawy znaków standardu Unicode ...................................................o.... 119 3.11.2. Zestawy znaków zachodnioeuropejskich................................................. 120 3.11.3. Zestawy znaków dla Europy Centralnej .................................................. 121 Spis treści 5 3.11.4. Zestawy znaków południowoeuropejskich i środkowowschodnich......... 122 3.11.5. Zestawy znaków regionu bałtyckiego...................................................o... 123 3.11.6. Zestawy znaków dla cyrylicy...................................................o................ 123 3.11.7. Azjatyckie zestawy znaków...................................................o.................. 124 Rozdział 4. Typy kolumn ................................................................................... 125 4.1. Przegląd typów dla kolumny...................................................o............................. 126 4.1.1. Omówienie typów liczbowych ...................................................o............. 126 4.1.2. Przegląd typów związanych z datą i czasem............................................ 129 4.1.3. Przegląd typów łańcuchowych ...................................................o............. 130 4.2. Typy liczbowe...................................................o...................................................o 132 4.3. Typy związane z datą i czasem ...................................................o......................... 135 4.3.1. Typy DATETIME, DATE i TIMESTAMP............................................. 137 4.3.2. Typ TIME...................................................o............................................. 142 4.3.3. Typ YEAR...................................................o............................................ 143 4.3.4. Problem roku 2000 a typy związane z datą.............................................. 144 4.4. Typy łańcuchowe ...................................................o.............................................. 144 4.4.1. Typy CHAR i VARCHAR ...................................................o................... 144 4.4.2. Typy BLOB i TEXT...................................................o............................. 146 4.4.3. Typ Enum ...................................................o............................................. 147 4.4.4. Typ SET ...................................................o............................................... 149 4.5. Rozmiar pamięci potrzebnej dla typów kolumn...................................................o 151 4.6. Wybieranie odpowiedniego typu dla kolumny...................................................o.. 152 4.7. Wykorzystywanie typów kolumn z innych mechanizmów baz danych ............... 153 Rozdział 5. Funkcje i operatory ......................................................................... 155 5.1. Operatory ...................................................o...................................................o....... 156 5.1.1. Nawiasy ...................................................o................................................ 156 5.1.2. Operatory porównania ...................................................o.......................... 156 5.1.3. Operatory logiczne ...................................................o............................... 161 5.1.4. Operatory rozróżniania wielkości liter...................................................o.. 163 5.2. Funkcje kontroli przepływu ...................................................o.............................. 163 5.3. Funkcje łańcuchowe...................................................o.......................................... 166 5.3.1. Funkcje porównywania łańcuchów...................................................o....... 176 5.4. Funkcje liczbowe ...................................................o.............................................. 178 5.4.1. Operatory arytmetyczne...................................................o........................ 178 5.4.2. Funkcje matematyczne ...................................................o......................... 180 5.5. Funkcje daty i godziny...................................................o...................................... 186 5.6. Funkcje obsługi wyszukiwania pełnotekstowego................................................. 202 5.6.1. Boolowskie wyszukiwania pełnotekstowe............................................... 205 5.6.2. Wyszukiwania pełnotekstowe z rozwijaniem zapytania .......................... 207 5.6.3. Ograniczenia dla wyszukiwania pełnotekstowego................................... 208 5.6.4. Modyfikowanie wyszukiwania pełnotekstowego MySQL ...................... 209 5.6.5. Lista rzeczy do zrobienia dla wyszukiwania pełnotekstowego................ 211 5.7. Funkcje konwersji typów ...................................................o.................................. 211 5.8. Inne funkcje ...................................................o...................................................o... 214 5.8.1. Funkcje bitowe ...................................................o..................................... 214 5.8.2. Funkcje szyfrujące...................................................o................................ 215 5.8.3. Funkcje informacyjne ...................................................o........................... 219 5.8.4. Funkcje różne ...................................................o....................................... 223 5.9. Funkcje i modyfikatory do zastosowania z klauzulami GROUP BY................... 226 5.9.1. Funkcje GROUP BY (agregujące)...................................................o........ 226 5.9.2. Modyfikatory GROUP BY ...................................................o................... 229 5.9.3. GROUP BY z ukrytymi polami...................................................o............ 232 6 Spis treści Rozdział 6. Składnia instrukcji SQL ................................................................... 235 6.1. Instrukcje operujące na danych ...................................................o......................... 235 6.1.1. Składnia instrukcji DELETE ...................................................o................ 235 6.1.2. Składnia instrukcji DO ...................................................o......................... 238 6.1.3. Składnia instrukcji HANDLER ...................................................o............ 238 6.1.4. Składnia instrukcji INSERT ...................................................o................. 240 6.1.5. Składnia instrukcji LOAD DATA INFILE.............................................. 246 6.1.6. Składnia instrukcji REPLACE...................................................o.............. 255 6.1.7. Składnia instrukcji SELECT...................................................o................. 256 6.1.8. Składnia podzapytań...................................................o............................. 265 6.1.9. Składnia instrukcji TRUNCATE ...................................................o.......... 276 6.1.10. Składnia instrukcji UPDATE...................................................o................ 276 6.2. Instrukcje definiowania danych ...................................................o........................ 278 6.2.1. Składnia instrukcji ALTER DATABASE ............................................... 278 6.2.2. Składnia instrukcji ALTER TABLE...................................................o..... 279 6.2.3. Składnia instrukcji CREATE DATABASE............................................. 285 6.2.4. Składnia instrukcji CREATE INDEX ...................................................o.. 285 6.2.5. Składnia instrukcji CREATE TABLE ...................................................o.. 287 6.2.6. Składnia instrukcji DROP DATABASE.................................................. 301 6.2.7. Składnia instrukcji DROP INDEX ...................................................o....... 302 6.2.8. Składnia instrukcji DROP TABLE...................................................o....... 302 6.2.9. Składnia instrukcji RENAME TABLE...................................................o. 303 6.3. Instrukcje programu MySQL ...................................................o............................ 304 6.3.1. Składnia instrukcji DESCRIBE (odczytywanie informacji na temat kolumn) ........................................... 304 6.3.2. Składnia instrukcji USE...................................................o........................ 304 6.4. Instrukcje obsługi transakcji i blokowania ...................................................o........ 305 6.4.1. Składnia instrukcji START TRANSACTION, COMMIT oraz ROLLBACK...................................................o................................. 305 6.4.2. Instrukcje niemożliwe do wycofania ...................................................o.... 306 6.4.3. Instrukcje wykonujące niejawne zatwierdzenie......................................... 306 6.4.4. Składnia instrukcji SAVEPOINT i ROLLBACK TO SAVEPOINT....... 307 6.4.5. Składnia instrukcji LOCK TABLES oraz UNLOCK TABLES .............. 307 6.4.6. Składnia instrukcji SET TRANSACTION .............................................. 310 6.5. Administracja bazą danych ...................................................o............................... 311 6.5.1. Instrukcje zarządzające kontami użytkowników ....................................... 311 6.5.2. Instrukcje do konserwacji tabel ...................................................o............ 319 6.5.3. Składnia instrukcji SET i SHOW ...................................................o......... 326 6.5.4. Inne instrukcje administracyjne ...................................................o............ 347 6.6. Instrukcje replikacji...................................................o........................................... 352 6.6.1. Instrukcje SQL sterujące serwerem głównym ......................................... 352 6.6.2. Instrukcje SQL sterujące serwerami podrzędnymi .................................. 354 Rozdział 7. Rozszerzenia przestrzenne w MySQL ............................................... 365 7.1. Wstęp ...................................................o...................................................o............. 365 7.2. Model geometryczny OpenGIS...................................................o......................... 366 7.2.1. Hierarchia klas geometrycznych...................................................o........... 366 7.2.2. Klasa Geometry ...................................................o.................................... 368 7.2.3. Klasa Point ...................................................o........................................... 369 7.2.4. Klasa Curve ...................................................o.......................................... 369 7.2.5. Klasa LineString...................................................o................................... 370 7.2.6. Klasa Surface...................................................o........................................ 370 7.2.7. Klasa Polygon...................................................o....................................... 370 7.2.8. Klasa GeometryCollection...................................................o.................... 371 Spis treści 7 7.2.9. Klasa MultiPoint...................................................o................................... 371 7.2.10. Klasa MultiCurve ...................................................o................................. 372 7.2.11. Klasa MultiLineString ...................................................o.......................... 372 7.2.12. Klasa MultiSurface ...................................................o............................... 372 7.2.13. Klasa MultiPolygon...................................................o.............................. 373 7.3. Obsługiwane formaty danych przestrzennych...................................................o... 373 7.3.1. Format tekstowy WKT ...................................................o......................... 374 7.3.2. Format binarny WKB ...................................................o........................... 374 7.4. Tworzenie bazy danych z rozszerzeniami przestrzennymi................................... 375 7.4.1. Typy danych przestrzennych w MySQL ................................................. 375 7.4.2. Tworzenie wartości przestrzennych...................................................o...... 376 7.4.3. Tworzenie kolumn przestrzennych ...................................................o....... 379 7.4.4. Wypełnianie kolumn przestrzennych...................................................o.... 379 7.4.5. Pobieranie danych przestrzennych...................................................o........ 381 7.5. Analiza informacji przestrzennych...................................................o.................... 381 7.5.1. Funkcje konwersji formatów geometrycznych ........................................ 382 7.5.2. Funkcje klasy Geometry ...................................................o....................... 382 7.5.3. Funkcje tworzące nowe geometrie na podstawie istniejących ................. 388 7.5.4. Funkcje testujące relacje przestrzenne między obiektami geometrycznymi...................................................o...... 389 7.5.5. Relacje między minimalnymi prostokątami otaczającymi dla poszczególnych geometrii...................................................o............... 390 7.5.6. Funkcje sprawdzające relacje przestrzenne pomiędzy geometriami........ 391 7.6. Optymalizacja analizy przestrzennej...................................................o................. 392 7.6.1. Tworzenie indeksów przestrzennych...................................................o.... 392 7.6.2. Wykorzystanie indeksu przestrzennego...................................................o 393 7.7. Zgodność MySQL ze standardem ...................................................o..................... 395 7.7.1. Niezaimplementowane funkcje GIS ...................................................o..... 395 Rozdział 8. Procedury i funkcje składowane ...................................................... 397 8.1. Składnia procedur składowanych...................................................o...................... 398 8.1.1. Utrzymanie procedur składowanych...................................................o..... 398 8.1.2. SHOW PROCEDURE STATUS oraz SHOW FUNCTION STATUS.... 401 8.1.3. Instrukcja CALL...................................................o................................... 402 8.1.4. Instrukcja złożona BEGIN ... END...................................................o....... 402 8.1.5. Instrukcja DECLARE...................................................o........................... 402 8.1.6. Zmienne w procedurach składowanych...................................................o 402 8.1.7. Warunki i podprogramy obsługi ...................................................o........... 403 8.1.8. Kursory...................................................o................................................. 405 8.1.9. Konstrukcje sterowania przepływem sterowania..................................... 406 Rozdział 9. Obsługa błędów w MySQL ............................................................... 409 9.1. Zwracane błędy...................................................o................................................. 409 9.2. Komunikaty błędów...................................................o.......................................... 419 Dodatek A Rozwiązywanie problemów z zapytaniami ........................................435 A.1. Zagadnienia związane z zapytaniami ...................................................o................ 435 A.1.1. Wielkość liter przy wyszukiwaniu...................................................o........ 435 A.1.2. Problemy z kolumnami typu DATE ...................................................o..... 436 A.1.3. Problemy z wartościami NULL...................................................o............ 437 A.1.4. Problemy z synonimami kolumn ...................................................o.......... 438 A.1.5. Błąd wycofania dla tabel nietransakcyjnych............................................ 439 A.1.6. Usuwanie wierszy ze związanych tabel...................................................o 439 A.1.7. Rozwiązywanie problemów z brakującymi wierszami ............................ 440 A.1.8. Problemy z porównaniami zmiennoprzecinkowymi................................ 441 8 Spis treści A.2. Problemy związane z optymalizatorem...................................................o............. 443 A.3. Problemy z definicją tabel...................................................o................................. 444 A.3.1. Problemy z instrukcją ALTER TABLE...................................................o 444 A.3.2. Jak zmienić porządek kolumn w tabeli...................................................o. 445 A.3.3. Problemy z tabelami tymczasowymi ...................................................o.... 445 Dodatek B Wyrażenia regularne w MySQL......................................................... 447 Skorowidz....................................................................................... 451 Rozdział 4. Typy kolumn W MySQL dostępnych jest wiele typów danych, które można pogrupować w kilku pod- stawowych kategoriach, takich jak typy liczbowe, typy związane z datą i czasem oraz typy łańcuchowe. Na początku tego rozdziału przedstawiony zostanie przegląd wspo- mnianych przed chwilą typów kolumn, po czym nastąpi bardziej szczegółowy opis ich właściwości z podziałem na poszczególne kategorie i wreszcie zamieszczone zostanie podsumowanie informacji dotyczących wymagań co do rozmiaru pamięci potrzebnej do przechowania danej kolumny. Sam przegląd jest z zamierzenia krótki. Dodatkowe informacje o poszczególnych typach kolumn, na przykład dopuszczalny format, w któ- rym można deklarować wartości, zostały uwzględnione w szczegółowych omówieniach. Od wersji 4.1 MySQL rozpoznaje rozszerzenia do obsługi danych przestrzennych. Informacje o typach przestrzennych znajdują się w rozdziale 7. tego podręcznika. W części opisu typów kolumn zastosowane zostały następujące reguły:  / Wskazuje maksymalny rozmiar wyświetlania liczby lub łańcucha. Maksymalnym dopuszczalnym rozmiarem wyświetlania jest 255.  Dotyczy typów zmiennoprzecinkowych i stałoprzecinkowych. Określa liczbę cyfr po kropce dziesiętnej. Maksymalna dopuszczalna wartość wynosi 30, ale nie powinna przekraczać /.  Nawiasy kwadratowe (= ?) identyfikują opcjonalne fragmenty deklaracji typu. 126 Rozdział 4. ♦ Typy kolumn 4.1. Przegląd typów dla kolumny 4.1.1. Omówienie typów liczbowych Poniżej znajduje się przegląd liczbowych typów dla kolumn. Bardziej szczegółowe informacje można znaleźć w podrozdziale 4.2. Wymogi dotyczące rozmiaru pamięci potrzebnej do przechowywania kolumn znajdują się w podrozdziale 4.5. Jeśli dla kolumny liczbowej zostanie określony atrybut 41(+.., MySQL automatycznie doda do kolumny atrybut 70+5+)0 . Należy uważać podczas odejmowania dwóch wartości liczbowych, z których jedna ma typ 70+5+)0 . Uzyskany wynik będzie również tego typu! — patrz podrozdział 5.7.  6+0;+06= / ?=705+)0 ?= 41(+..? Bardzo mała liczba całkowita. Dla liczb ze znakiem zakres wynosi od  do . W przypadku liczb bez znaku zakres obejmuje wartości od  do .  $+6, $11., $11. #0 To są synonimy 6+0;+06  . Synonim $11. #0 został dodany w MySQL 4.1.0. Wartość zerowa to inaczej fałsz. Wartości niezerowe traktowane są jako prawda. W przyszłości wprowadzona zostanie pełna, zgodna ze standardem SQL obsługa typu boolowskiego.  5/#..+06= / ?=705+)0 ?= 41(+..? Mała liczba całkowita. Dla liczb ze znakiem zakres wynosi od  do . W przypadku liczb bez znaku zakres obejmuje wartości od  do .  / +7/+06= / ?=705+)0 ?= 41(+..? Średnia liczba całkowita. Dla liczb ze znakiem zakres wynosi od  do . W przypadku liczb bez znaku zakres obejmuje wartości od  do .  +06= / ?=705+)0 ?= 41(+..? Standardowa liczba całkowita. Dla liczb ze znakiem zakres wynosi od  do . W przypadku liczb bez znaku zakres obejmuje wartości od  do .  +06 ) 4= / ?=705+)0 ?= 41(+..? Jest to synonim dla typu +06.  $+)+06= / ?=705+)0 ?= 41(+..? Duża liczba całkowita. Dla liczb ze znakiem zakres wynosi od do . W przypadku liczb bez znaku zakres obejmuje wartości od  do . 4.1. Przegląd typów dla kolumny 127 Oto kilka spraw, o których należy wiedzieć odnośnie kolumn typu $+)+06:  Wszystkie obliczenia wykonywane są przy użyciu wartości typu $+)+06 lub 17$. ze znakiem. Oznacza to, że dużych liczb całkowitych bez znaku, większych niż  (63 bity), można używać tylko z funkcjami bitowymi! Niezastosowanie się do tej zasady może doprowadzić do uzyskania w wyniku liczby, której kilka ostatnich cyfr jest błędnych z powodu błędów w zaokrąglaniu podczas konwersji wartości $+)+06 na 17$. .  MySQL 4.0 potrafi obsługiwać $+)+06 w następujących przypadkach:  Podczas wykorzystywania liczb całkowitych do przechowywania dużych wartości bez znaku w kolumnie typu $+)+06.  W /+0 PCYCAMQN lub /#: PCYCAMQN , gdzie PCYCAMQN odnosi się do kolumny $+)+06.  Podczas korzystania z operatorów (między innymi , , ), gdy oba argumenty są liczbami całkowitymi.  Zawsze istnieje możliwość zapisania w kolumnie $+)+06 dokładnej wartości liczby całkowitej. Wystarczy zapisać ją przy użyciu łańcucha. W takim przypadku zostanie dokonana konwersja łańcucha na liczbę; konwersja nie będzie wymagać pośredniego etapu przekształcającego liczbę na jej odpowiednik o podwójnej precyzji.  Podczas korzystania z operatorów ,  i stosowana jest arytmetyka $+)+06, jeśli oba argumenty mają wartość liczby całkowitej! To oznacza, że pomnożenie dwóch dużych liczb całkowitych (lub wyników funkcji, która zwraca liczby całkowite) może spowodować nieoczekiwane rezultaty, jeśli wynik przekroczy liczbę .  (.1#6 R =705+)0 ?= 41(+..? Liczba zmiennoprzecinkowa. Parametr R oznacza precyzję i może przyjmować wartość od 0 do 14 dla liczb zmiennoprzecinkowych o dokładności do jednego znaku i od 25 do 53 dla liczb zmiennoprzecinkowych o dokładności do dwóch znaków. To przypomina opisane poniżej typy (.1#6 i 17$. . Typ (.1#6 R ma ten sam zakres, jaki posiadają odpowiadające mu typy (.1#6 i 17$. , ale w jego przypadku niezdefiniowany jest maksymalny rozmiar wyświetlania i liczba miejsc po przecinku. Od wersji 3.23 MySQL jest to prawdziwa wartość zmiennoprzecinkowa. W wersjach wcześniejszych liczba typu (.1#6 R była zawsze liczbą o dwóch miejscach po przecinku. Ta składnia została dodana w celu zachowania zgodności ze standardem ODBC. Stosowanie typu (.1#6 może spowodować wystąpienie pewnych nieoczekiwanych problemów, ponieważ wszystkie obliczenia w MySQL są wykonywane z podwójną precyzją patrz punkt A.1.7).  (.1#6= / ?=705+)0 ?= 41(+..? 128 Rozdział 4. ♦ Typy kolumn Mała liczba zmiennoprzecinkowa (o dokładności do jednego znaku). Liczba ta może przyjąć wartości: od   do  , , i od   do  . Jeśli podany jest atrybut 70+5+)0 , niedozwolone są wartości ujemne. Parametr /definiuje maksymalną szerokość wyświetlanej liczby, a liczbę miejsc po przecinku. Typ (.1#6 bez argumentów lub typ (.1#6 R (gdzie Rjest liczbą z zakresu od 0 do 24) oznacza liczbę zmiennoprzecinkową o pojedynczej precyzji.  17$. = / ?=705+)0 ?= 41(+..? Standardowa liczba zmiennoprzecinkowa (o dokładności do dwóch znaków). Liczba ta może przyjąć wartości: od   do  , , i od   do  . Jeśli podany jest atrybut 70+5+)0 , wartości ujemne są niedozwolone. Parametr /definiuje maksymalną szerokość wyświetlanej liczby, a — liczbę miejsc po przecinku. Typ 17$. bez argumentów lub (.1#6 R (gdzie R jest liczbą z zakresu od 25 do 53) oznacza liczbę zmiennoprzecinkową o podwójnej precyzji.  17$. 24 +5+10= / ?=705+)0 ?= 41(+..? 4 #.= / ?=705+)0 ?= 41(+..? Są to synonimy 17$. . Wyjątek: Jeśli dla parametru USNAOQFG serwera włączono opcję 4 #.A#5A(.1#6, synonimem (.1#6 jest 4 #., a nie 17$. .  +/#.= /= ? ?=705+)0 ?= 41(+..? Niezapakowana liczba stałoprzecinkowa. Zachowanie kolumny tego typu przypomina kolumnę typu *#4. „Niezapakowana” oznacza, że liczba jest przechowywana w postaci łańcucha przy użyciu jednego znaku na każdą cyfrę wartości. Parametr / definiuje maksymalną liczbę cyfr, a — liczbę miejsc po przecinku. W parametrze / nie są brane pod uwagę: kropka dziesiętna (odpowiadająca w naszej notacji przecinkowi) i (dla liczb ujemnych) znak , choć jest dla nich zarezerwowane miejsce. Wartości nie mają miejsc po przecinku lub części ułamkowych, jeśli jest równe 0. Maksymalny zakres wartości typu +/#. jest taki sam, jak dla typu 17$. , ale rzeczywisty zakres danej kolumny +/#. może być ograniczony przez wybór argumentów / i . Jeśli podany jest atrybut 70+5+)0 , wartości ujemne są niedozwolone. W przypadku braku argumentu , domyślną wartością jest 0. Jeśli pominięty jest parametr /, domyślną wartością jest 10. W wersjach poprzedzających MySQL 3.23 argument / musi być wystarczająco duży, by zawierał obszar potrzebny dla znaku i kropki dziesiętnej.  = /= ? ?=705+)0 ?= 41(+..? 07/ 4+ = /= ? ?=705+)0 ?= 41(+..? (+: = /= ? ?=705+)0 ?= 41(+..? Są to synonimy typu +/#.. W MySQL 4.1.0 dodano synonim (+: w celu osiągnięcia kompatybilności z innymi serwerami. 4.1. Przegląd typów dla kolumny 129 4.1.2. Przegląd typów związanych z datą i czasem Poniżej znajduje się podsumowanie typów kolumn przeznaczonych dla czasu i daty. Dodatkowe informacje na ten temat można znaleźć w podrozdziale 4.3. Wymogi do- tyczące pamięci potrzebnej do przechowywania danych w kolumnach zostały podane w podrozdziale 4.5.  #6 Data. Obsługiwany zakres obejmuje daty od  do  . W MySQL wartości #6 wyświetlane są w formacie 4444// , ale można przypisywać wartości do kolumn #6 przy użyciu łańcuchów lub liczb. #6 6+/ Kombinacja daty i czasu. Obsługiwany zakres obejmuje wartości od  do  . W MySQL wartości #6 6+/ wyświetlane są w formacie 4444// ))//55 , ale można przypisywać wartości do kolumn #6 6+/ przy użyciu łańcuchów lub liczb. 6+/ 56#/2= / ? Znacznik czasu. Obsługiwany zakres rozpoczyna się od daty  i sięga roku . Kolumna typu 6+/ 56#/2 przydaje się do rejestracji daty i godziny operacji wstawiania lub aktualizacji. Pierwszej kolumnie 6+/ 56#/2 w tabeli automatycznie przypisywana jest data i czas ostatniej operacji, jeśli tylko tych wartości nie wprowadzi ręcznie użytkownik. Dowolnej kolumnie 6+/ 56#/2 można również przypisać bieżącą datę i godzinę, wpisując do niej wartość 07... Od MySQL 4.1 wartości 6+/ 56#/2 są zwracane w postaci łańcuchów w formacie 4444// ))//55 . Aby uzyskać wartość w postaci liczby, należy dodać do kolumn tego typu . Inne szerokości wyświetlania znacznika czasu nie są obsługiwane. W wersjach poprzedzających MySQL 4.1 wartości 6+/ 56#/2 są wyświetlane w formacie 4444// ))//55, 44// ))//55, 4444// lub 44// w zależności od tego, czy parametr / jest równy 14 (albo go brak), 12, 8 lub 6. Można jednak przypisywać wartości do kolumn 6+/ 56#/2 przy użyciu łańcuchów lub liczb. Argument / wpływa tylko na sposób wyświetlania kolumny 6+/ 56#/2, a nie na jej przechowywanie. Wartości kolumny są zawsze zapisywane w czterech bajtach. W MySQL od wersji 4.0.12 pojawiła się opcja PGY, dzięki której można zmienić działanie serwera, upodabniając je do MySQL 4.1. Należy odnotować, że kolumny 6+/ 56#/2 / , gdzie /jest równe 8 lub 14, są traktowane jako liczby, natomiast reszta kolumn 6+/ 56#/2 / jest traktowana jako łańcuchy. Jest to rodzaj gwarancji, że użytkownik będzie mógł wiarygodnie usuwać i przywracać tabele tego typu. 6+/    Godzina. Obsługiwany zakres obejmuje wartości od  do  . W MySQL wartości 6+/ wyświetlane są w formacie ))//55 , ale można przypisać wartości do kolumn 6+/ przy użyciu zarówno łańcuchów, jak i liczb. 130 Rozdział 4. ♦ Typy kolumn  ; #4= ^ ? Rok w formacie dwu- lub czterocyfrowym. Domyślnym formatem jest rok zapisany za pomocą czterech cyfr. W tym formacie dostępne wartości należą do przedziału od  do  oraz . W formacie dwucyfrowym wartości dopuszczalne to liczby z zakresu od  do , które reprezentują daty od roku 1970 do 2069. W MySQL wartości ; #4 wyświetlane są w formacie 4444, ale można przypisać wartości do kolumn ; #4 przy użyciu tak łańcuchów, jak i liczb. Typ ; #4 jest niedostępny dla wersji wcześniejszych niż MySQL 3.22. 4.1.3. Przegląd typów łańcuchowych Poniżej znajduje się przegląd typów łańcuchowych. Dodatkowe informacje można znaleźć w podrozdziale 4.4. Wymogi dotyczące pamięci potrzebnej do przechowywa- nia danych w kolumnach zostały podane w podrozdziale 4.5. W niektórych przypadkach MySQL może zmienić kolumnę typu łańcuchowego na typ, który będzie się różnił od zadeklarowanego w instrukcji 4 #6 6#$. lub #.6 46#$. . Więcej informacji na ten temat znajduje się w podpunkcie 6.2.5.2. Od wersji 4.1 w MySQL pojawiła się zmiana, która wpływa na wiele typów kolumn typu łańcuchowego. Definicja kolumn typu znakowego może zawierać atrybut *#4# 6 4 5 6, który określa zestaw znaków i opcjonalnie porządek sortowania. Dotyczy to typów *#4, 8#4 *#4, różnych typów 6 :6 oraz 07/ i 5 6, na przykład: 4 #6 6#$. V M *#4   *#4# 6 45 6WVH M *#4   *#4# 6 45 6NCVKP 1..#6 NCVKPADKP  Ta definicja tabeli tworzy kolumnę o nazwie M z zestawem znaków WVH i z domyśl- nym sortowaniem dla tego zestawu znaków oraz kolumnę M z zestawem znaków NCVKP i jego binarnym sortowaniem. Podczas sortowania binarnego nie jest brana pod uwagę wielkość liter. Sortowanie i porównywanie kolumn typu znakowego jest wykonywane na podstawie zestawu znaków, który jest przypisany do kolumny. W wersjach poprzedzających MySQL 4.1 wspomniane operacje bazują na porządku sortowania zestawu znaków serwera. Dla kolumn *#4 i 8#4 *#4 można zadeklarować kolumnę z atrybutem $+0#4;, aby spowodować sortowanie i porównywanie rozróżniające wielkość liter przy użyciu wartości liczbowych kodu, a nie porządkowania leksykograficznego. Więcej szczegółów na ten temat można znaleźć w rozdziale 3. Dodatkowo, od wersji 4.1 MySQL interpretuje deklaracje długości przechowywanych danych w definicjach kolumn typu znakowego w znakach (w wersjach wcześniejszych interpretowanie wykonywane było w bajtach). Oto dostępne w MySQL typy łańcuchowe: 4.1. Przegląd typów dla kolumny 131  =0#6+10#.? *#4 / =$+0#4;^#5 ++^70+ 1 ? Łańcuch o stałej długości, który jest zawsze w celu przechowania dopełniany po prawej stronie odpowiednią liczbą spacji. Parametr / reprezentuje długość kolumny. Zakres / wynosi od 0 do 255 znaków (w wersjach poprzedzających MySQL 3.23 był to przedział od 1 do 255). Końcowe spacje zostają usunięte w czasie pobierania wartości *#4. Od MySQL 4.1.0 kolumna *#4 o specyfikacji długości przekraczającej 255 zostanie przekształcona na najmniejszy typ 6 :6, który może przechowywać wartości takiej długości. Wartość *#4  zostanie na przykład przekształcona na typ 6 :6, zaś *#4  na typ / +7/6 :6. Jest to spowodowane wymogami kompatybilności. Jednak taka konwersja wpływa na kolumny, które stają się kolumnami zmiennej długości, a także powoduje usuwanie końcowych spacji. Słowo kluczowe *#4 to skrót od *#4# 6 4. Typ 0#6+10#. *#4 (lub odpowiadająca mu forma skrócona 0 *#4) to należąca do standardu SQL metoda definiowania, opierająca się na założeniu, że kolumna *#4 powinna użyć domyślnego zestawu znaków. W MYSQL to ustawienie jest domyślne. Atrybut $+0#4; powoduje rozróżnianie wielkości liter podczas operacji sortowania i porównywania. Od MySQL 4.1.0 można określać atrybut #5 ++. Powoduje on przypisanie do kolumny typu *#4 zestawu znaków NCVKP. Od wersji 4.1.1 MySQL można także podawać atrybut 70+ 1 . Powoduje on przypisanie do kolumny *#4 zestawu znaków WEU. MySQL pozwala tworzyć kolumnę typu *#4  . Jest to szczególnie przydatne, w sytuacjach gdy zachodzi potrzeba osiągnięcia zgodności z jakimiś starymi aplikacjami, które zależą od istnienia kolumny, choć samej wartości w rzeczywistości nie używają. Jest to również praktyczne, gdy potrzebna jest kolumna, która może przyjąć tylko dwie wartości: kolumna *#4  , jeśli nie zostanie zdeklarowana jako 01607.., zajmuje tylko jeden bit i może przybierać tylko wartości 07.. i (pusty łańcuch).  *#4 Jest to synonim typu *#4  .  =0#6+10#.?8#4 *#4 / =$+0#4;? Łańcuch o zmiennej długości. Parametr / reprezentuje maksymalną długość kolumny. Zakres / wynosi od 0 do 255 znaków (w wersjach wcześniejszych od MySQL 4.0.2 wynosił od 1 do 255). Końcowe spacje zostają usunięte w momencie zapisywania wartości 8#4 *#4, co nie jest zgodne ze specyfikacją standardu SQL. 132 Rozdział 4. ♦ Typy kolumn Od MySQL 4.1.0 kolumna 8#4 *#4 o specyfikacji długości przekraczającej 255 zostanie przekształcona na najmniejszy typ 6 :6, który może przechowywać wartości takiej długości. Wartość 8#4 *#4  zostanie na przykład przekształcona na typ 6 :6, natomiast 8#4 *#4  na typ / +7/6 :6. Jest to spowodowane wymogami kompatybilności. Taka konwersja wpływa jednak na usuwanie końcowych spacji. Słowo kluczowe 8#4 *#4 jest skrótem od słów *#4# 6 48#4;+0). Atrybut $+0#4; powoduje rozróżnianie wielkości liter podczas operacji sortowania i porównywania. 6+0;$.1$, 6+0;6 :6 Kolumna $.1$ lub 6 :6 z maksymalną długością wynoszącą 255 (28 $.1$, 6 :6 −1) znaków. Kolumna $.1$ lub 6 :6 z maksymalną długością wynoszącą 65 535 (216 znaków. / +7/$.1$, / +7/6 :6 −1) −1) Kolumna $.1$ lub 6 :6 z maksymalną długością wynoszącą 16 777 215 (224 znaków. .10)$.1$, .10)6 :6 Kolumna $.1$ lub 6 :6 z maksymalną długością wynoszącą 4 294 967 295 lub 4 GB (232 i tabele /[+5#/ miały nałożone ograniczenie do 16 MB na pakiet komunikacyjny i wiersz tabeli. Od MySQL 4.0 maksymalna dopuszczalna długość kolumn .10)$.1$ lub .10)6 :6 zależy od skonfigurowanego maksymalnego rozmiaru pakietu w protokole klient-serwer i dostępnej pamięci. 07/ YCTVQħè  YCTVQħè  −1) znaków. Do wersji 3.23 MySQL protokół klient-serwer Wyliczenie. Obiekt łańcuchowy, który może składać się tylko z jednej, wybranej z listy, wartości: YCTVQħè , YCTVQħè , , 07.. lub specjalnej wartości błędu . Kolumna 07/ może zawierać maksymalnie do 65 535 różnych wartości. Elementy 07/ są reprezentowane wewnętrznie jako liczby całkowite. 5 6 YCTVQħè  YCTVQħè  Zbiór. Obiekt łańcuchowy, który może składać się dowolnej liczby wartości, z których każda musi pochodzić z listy wartości YCTVQħè , YCTVQħè , . Kolumna 5 6 może liczyć maksymalnie 64 elementy. Wartości 5 6 są reprezentowane wewnętrznie jako liczby całkowite.       4.2. Typy liczbowe MySQL obsługuje wszystkie liczbowe typy danych standardu SQL. Są to dokładne typy liczbowe danych (+06 ) 4, 5/#..+06, +/#. i 07/ 4+ ), jak również przybliżone ((.1#6, 4 #. i 17$. 24 +5+10). Słowo kluczowe +06 jest synonimem dla typu +06 ) 4, natomiast słowo kluczowe jest synonimem typu +/#.. 4.2. Typy liczbowe 133 Jako rozszerzenie do standardu SQL, MySQL obsługuje również między innymi takie typy dla liczb całkowitych jak 6+0;+06, / +7/+06 i $+)+06. Zostało to przedstawione w poniższym zestawieniu. Typ Bajty Wartość minimalna (ze znakiem) Wartość maksymalna (ze znakiem) 6+0;+06 5/#..+06 / +7/+06 +06 $+)+06                MySQL posiada także rozszerzenie służące do opcjonalnego określania dla liczby całko- witej maksymalnej szerokości wyświetlania, której wartość podawana jest w nawiasach po słowie kluczowym nazwy typu (na przykład +06  ). Pozwala to z lewej strony uzu- pełniać spacjami wyświetlane wartości o szerokości mniejszej niż szerokość określona dla kolumny. Szerokość wyświetlania nie ogranicza zakresu wartości, które można przechowywać w kolumnie, ani też liczby wyświetlanych cyfr tych wartości, których szerokość prze- kroczy maksimum określone dla kolumny. Jeśli wraz z opcjonalnym rozszerzeniem użyty zostanie atrybut 41(+.., domyślne do- pełnianie spacjami zostanie zastąpione zerami. Dla kolumny zadeklarowanej na przykład jako +06   41(+.., wartość  po pobraniu będzie miała postać . Należy zauwa- żyć, że w przypadku przechowywania w kolumnie typu liczby całkowitej wartości, któ- ra przekracza szerokość wyświetlania, może wystąpić problem podczas generowania przez MySQL tymczasowej tabeli dla pewnych skomplikowanych złączeń. W takich wypadkach zakłada się, że dane zmieściły się w oryginalnej szerokości kolumny. Wszystkie typy dla liczb całkowitych mogą opcjonalnie korzystać z (niestandardowe- go) atrybutu 705+)0 . Wartość bez znaku można stosować w sytuacjach, gdy chcemy dopuścić w kolumnie tylko liczby nieujemne, ale potrzebujemy wyższej górnej granicy zakresu liczbowego. Od MySQL 4.0.2 atrybut 705+)0 można także określać dla typów zmiennoprzecin- kowych i stałoprzecinkowych. Podobnie jak w przypadku typów dla liczb całkowitych, atrybut ten zapobiega przechowywaniu w kolumnie wartości ujemnych. Jednak w prze- ciwieństwie do typów dla liczb całkowitych górna granica zakresu wartości kolumny pozostaje bez zmian. Jeśli dla kolumny liczbowej określony zostanie atrybut 41(+.., MySQL automatycznie doda do kolumny atrybut 705+)0 . Typy +/#. i 07/ 4+ implementowane są w MySQL jako ten sam typ. Służą do przechowywania wartości, dla których ważne jest zachowanie dokładności, takich jak dane walutowe. Podczas deklarowania kolumny jednego z tych typów można określić (i zazwyczaj się to robi) dokładność oraz skalę, na przykład: RGPULC +/#.  134 Rozdział 4. ♦ Typy kolumn W tym przykładzie 5 jest dokładnością, a 2 skalą. Dokładność oznacza tutaj precyzyjne określenie liczby przechowywanych dla wartości znaczących cyfr dziesiętnych, a skala — liczby przechowywanych cyfr po kropce dziesiętnej. MySQL przechowuje wartości +/#. i 07/ 4+ w postaci łańcuchów, a nie binarnych liczb zmiennoprzecinkowych. Pozwala to zachować ich dokładność dziesiętną. Każda cyfra wartości, kropka dziesiętna (jeśli skala jest większa niż zero) i znak minusa (dla liczb ujemnych) jest reprezentowany przez jeden znak. Jeśli skala ma wartość 0, warto- ści +/#. i 07/ 4+ nie zawierają kropki dziesiętnej lub części ułamkowej. Standard SQL wymaga, by kolumna RGPULC mogła przechowywać wszystkie wartości składające się z pięciu cyfr i dwóch miejsc po przecinku. Dlatego w tym przypadku zakres wartości, które mogą być przechowywane w tej kolumnie, to przedział od  do . Trzeba jednak pamiętać o dwóch sprawach:  Na dodatniej granicy zakresu kolumna może w rzeczywistości przechowywać liczby do . Dla liczb dodatnich MySQL rozszerza górną granicę zakresu, ponieważ używa bajta zarezerwowanego dla znaku.  W wersjach poprzedzających MySQL 3.23 kolumny typu +/#. są przechowywane inaczej i nie mogą reprezentować wszystkich wartości wymaganych przez standard SQL. To dlatego, że dla typu +/#. / wartość / obejmuje bajty dla znaku i kropki dziesiętnej. W ten sposób do zakresu kolumny RGPULC przed MySQL 3.23 należałyby liczby od  do . W standardzie SQL składnia +/#. / jest równoważna składni +/#. / . Podob- nie składnia +/#. jest odpowiednikiem +/#. / , jeśli dozwolone jest definio- wanie wartości /. Od MySQL 3.23.6 obsługiwane są obie formy typów danych +/#. i 07/ 4+ . Wartość domyślna parametru / wynosi 10. W wersjach poprzedzających 3.23.6 konieczne jest wyraźne określenie obu parametrów / i . Maksymalny zakres wartości +/#. i 07/ 4+ jest taki sam jak dla typu 17$. , jednak na rzeczywisty zakres tych kolumn może wpływać zadeklarowana dla danej kolumny dokładność lub skala. Jeśli kolumna takiego typu ma przypisaną wartość o liczbie miejsc po przecinku przekraczającej zezwalaną skalę, wartość zostaje przekształcona do tej skali (zależy to od systemu operacyjnego, ale zazwyczaj jest to przekształcenie do do- zwolonej liczby cyfr). Gdy kolumnie +/#. lub 07/ 4+ przypisana jest wartość, która przekracza zakres wskazany przez określoną w definicji (lub domyślną) dokładność i skalę, MySQL przechowuje wartość reprezentującą koniec tego zakresu. W przypadku typów dla kolumn z liczbami zmiennoprzecinkowymi MySQL przechowuje wartości o pojedynczej precyzji przy użyciu czterech bajtów, a wartości o podwójnej precyzji, wykorzystując osiem bajtów. Typ (.1#6 służy do reprezentowania przybliżonych liczbowych typów danych. Standard SQL pozwala na opcjonalne deklarowanie dokładności (ale nie zakresu wykładnika) w nawiasach w bitach po słowie kluczowym (.1#6. Implementacja MySQL obsługuje również tę opcjonalną specyfikację dokładności, ale jej wartość służy jedynie do okre- ślenia rozmiaru pamięci. Dokładność od 0 do 23 powoduje uzyskanie czterobajtowej kolumny (.1#6 o pojedynczej precyzji. Dokładność od 24 do 53 daje w rezultacie ośmio- bajtową kolumnę 17$. o podwójnej precyzji. 4.3. Typy związane z datą i czasem 135 Jeśli słowo kluczowe (.1#6 zostaje użyte do zadeklarowania typu kolumny bez specy- fikacji dokładności, wówczas wartości przechowywane są przy wykorzystaniu czterech bajtów. MySQL obsługuje również odmianę tej składni, w której po słowie kluczowym (.1#6 znajdują się dwie umieszczone w nawiasach liczby. Pierwsza reprezentuje szero- kość wyświetlania, a druga liczbę przechowywanych i wyświetlanych cyfr po kropce dziesiętnej (podobnie jak w przypadku typów +/#. i 07/ 4+ ). Kiedy zachodzi po- trzeba przechowania w takiej kolumnie liczby, której ilość cyfr po kropce dziesiętnej przekracza określony dla kolumny limit, to przechowywana wartość zostanie zaokrą- glona, aby usunąć dodatkowe cyfry. W standardzie SQL typy 4 #. i 17$. 24 +5+10 nie zezwalają na określanie dokład- ności. Przez MySQL obsługiwany jest wariant składni, w którym po nazwie typu można podać w nawiasie dwie liczby. Pierwsza reprezentuje maksymalną szerokość wyświe- tlania, a druga — liczbę przechowywanych i wyświetlanych cyfr po kropce dziesiętnej. Jako rozszerzenie standardu SQL, 17$. rozpoznawane jest przez MySQL jako syno- nim typu 17$. 24 +5+10. W odróżnieniu od nakładanego przez standard wymogu, by dokładność dla typu 4 #. była mniejsza od określonej dla 17$. 24 +5+10, oba typy implementowane są przez MySQL jako ośmiobajtowe wartości zmiennoprzecin- kowe o podwójnej precyzji (chyba że dla parametru USNOQFG serwera włączono opcję 4 #.A#5A(.1#6). Dla uzyskania maksymalnej przenośności, w kodzie, który wymaga przechowywania przybliżonych wartości danych liczbowych, powinien być używany typ (.1#6 lub 17$. 24 +5+10 bez określania dokładności lub liczby miejsc po kropce dziesiętnej. Jeśli w kolumnie typu liczbowego ma być przechowywana wartość spoza dopuszczalnego zakresu dla danego typu, wartość zostanie przycięta do odpowiedniej granicy zakresu i dopiero w ten sposób uzyskana liczba będzie przechowana. Kolumna +06 ma na przykład zakres od  do . Gdyby spróbować wstawić do niej liczbę , wartość ta zostałaby przycięta do dolnego krańca zakresu i w zamian zachowana liczba . Podobnie, gdyby spróbować wstawić liczbę , wartość ta zostałaby przycięta do górnego krańca zakresu i w zamian zachowana liczba . Jeśli kolumna +06 ma atrybut 705+)0 , wielkość zakresu kolumny pozostaje bez zmian, ale jego krańce przesuwają się, tworząc przedział od  do . Gdyby spró- bować przechować liczby  i , w kolumnach zostałyby zapisane wartości  i . Konwersje, spowodowane odcinaniem, są dla instrukcji #.6 46#$. , .1#  #6#+0(+. , 72 #6 i wielowierszowych +05 46 poprzedzane ostrzeżeniami. 4.3. Typy związane z datą i czasem Typami, które służą do reprezentowania wartości związanych z datą i czasem, są #6 å6+/ , #6 , 6+/ 56#/2, 6+/ i ; #4. Wszystkie mają zakres dopuszczalnych wartości oraz wartość zerową, wykorzystywaną w razie podania wartości niedozwolonej, której 136 Rozdział 4. ♦ Typy kolumn MySQL nie może reprezentować. Typ 6+/ 56#/2 posiada także opisaną w dalszej części rozdziału specjalną możliwość automatycznej aktualizacji. MySQL pozwala przechowywać pewne „niekoniecznie poprawne” wartości dat, takie jak  . To dlatego, że sprawdzanie daty należy do czynności wykonywanych przez aplikację, a nie serwer MySQL. Aby przyspieszyć sprawdzanie dat, przez MySQL weryfikowane jest tylko, czy podany miesiąc należy do przedziału od 0 do 12, a dzień do przedziału od 0 do 31. Zakresy te zawierają zero, ponieważ MySQL pozwala na przechowywanie w kolumnie #6 i #6 6+/ danych, w których dzień lub miesiąc jest zerem. Jest to szczególnie praktyczne dla aplikacji, za pomocą których zapisywana jest data urodzin, chociaż data taka nie jest dokładnie znana. W takim przypadku wystarczy zapisać datę w postaci  lub  . Przechowując datę zapisaną w ten sposób, nie należy oczekiwać uzyskania poprawnych wyników z takimi funkcja- mi, jak #6 A57$ lub #6 A# , które wymagają podania pełnych dat. Oto ogólne warunki, o których warto pamiętać, pracując z typami daty i czasu:  Wartości dla danego typu daty lub czasu pobierane są przez MySQL w standardowym formacie wyjściowym, ale podejmowana jest próba interpretacji różnych formatów dla wartości wejściowych, dostarczanych przez użytkownika (na przykład gdy użytkownik poda wartość do przypisania do typu związanego z datą lub godziną lub do porównania z nim). Obsługiwane są tylko formaty opisane w poniższych podrozdziałach. Oczekuje się od użytkownika dostarczania poprawnych wartości. Użycie wartości w innych formatach może spowodować pojawienie się nieoczekiwanych wyników.  Daty zawierające dwucyfrowe wartości dla roku są niejednoznaczne, ponieważ nie jest znany wiek. Takie dwucyfrowe wartości interpretowane są przez MySQL za pomocą następujących zasad:  Wartości roku w zakresie od  są przekształcane na lata .  Wartości roku w zakresie  są przekształcane na lata .  Choć wartości mogą być interpretowane przez MySQL w wielu formatach, daty muszą być zawsze podawane w kolejności rok-miesiąc-dzień (na przykład  ), a nie w powszechnie używanej postaci miesiąc-dzień-rok lub dzień-miesiąc-rok (na przykład  ,  ).  MySQL powoduje automatyczne przekształcenie wartości typu daty lub czasu na liczbę, jeśli są one używane w kontekście liczbowym i na odwrót.  Kiedy MySQL napotka wartość dla typu związanego z datą lub czasem, która wychodzi poza zakres lub jest w inny sposób niedopuszczalna (w sposób opisany na początku tego punktu), przekształca tę wartość na wartość „zero” danego typu. Wyjątkiem są wychodzące poza zakres wartości 6+/ , które są przycinane do odpowiedniej wartości stanowiącej granicę zakresu tego typu. Poniższe zestawienie przedstawia formaty wartości „zerowej” dla każdego typu: 4.3. Typy związane z datą i czasem 137 Typ kolumny Wartość „zerowa” #6 6+/ #6 6+/ 56#/2 6+/ ; #4       Wartości „zerowe” są specjalne, ale można je przechowywać lub odwoływać się do nich w sposób jawny, używając wartości przedstawionych w tabeli. Można również wykonywać to, korzystając z wartości  lub , co jest w sumie łatwiejsze do zapisania.  Zerowe wartości daty lub czasu, stosowane w interfejsie Connector/ODBC, zostają automatycznie przekształcone do wartości 07.. w interfejsie Connector/ ODBC 2.50.12, ponieważ ODBC nie potrafi obsługiwać takich wartości. 4.3.1. Typy DATETIME, DATE i TIMESTAMP Typy #6 6+/ , #6 i 6+/ 56#/2 są ze sobą związane. W tym punkcie opisana zostanie ich charakterystyka, a także omówione będą podobieństwa i różnice między nimi. Typ #6 6+/ stosuje się, gdy potrzebne są wartości składające się z informacji o dacie i czasie. Wartości #6 6+/ pobierane są i wyświetlane przez MySQL w formacie 4444 // ))//55 . Obsługiwany zakres obejmuje wartości od  do  („obsługiwany” oznacza, że choć wartości dla dat wcześniej- szych mogą być prawidłowo zinterpretowane, nie ma gwarancji, że tak będzie). Typ #6 stosuje się, gdy potrzebna jest tylko wartość daty bez części podającej godzinę. Wartości #6 wyświetlane są przez MySQL w formacie 4444// . Obsługiwany zakres obejmuje daty od  do  . Właściwości typu kolumny 6+/ 56#/2 różnią się w zależności od wersji MySQL i trybu SQL, w którym działa serwer. Zostały one podane w dalszej części tego punktu. Wartości #6 6+/ , #6 i 6+/ 56#/2 można deklarować za pomocą dowolnego z popu- larnych zestawów formatów:  Jako łańcuch w formacie 4444// ))//55 lub 44// ))//55 . Dozwolona jest nieco mniej rygorystyczna składnia: znakiem rozdzielającym elementy daty i czasu może być dowolny znak interpunkcyjny. Równoważne będą na przykład zapisy  ,    ,    i   @@ .  Jako łańcuch w formacie 4444// lub 44// . I tu dozwolona jest mniej rygorystyczna składnia, na przykład  ,  ,  i    . 138 Rozdział 4. ♦ Typy kolumn  Jako łańcuch bez znaków rozdzielających elementy daty w formacie 4444// ))//55 lub 44// ))//55 , jeśli tylko dany ciąg odzwierciedla rozsądną datę. Zapisy  i  interpretowane są na przykład jako  , ale  jest wartością niedozwoloną (dziwna liczba w elemencie reprezentującym minuty) i zostanie przekształcona do wartości  .  Jako łańcuch bez znaków rozdzielających elementy daty w formacie 4444// lub 44// , jeśli tylko dany ciąg odzwierciedla rozsądną datę. Na przykład  i  są interpretowane jako  , ale  jest wartością niedozwoloną (dziwny numer miesiąca i dnia) i zostanie przekształcona do wartości  .  Jako liczba w formacie 4444// ))//55lub 44// ))//55, jeśli tylko dany ciąg odzwierciedla rozsądną datę. Na przykład  i  są interpretowane jako  .  Jako liczba w formacie 4444// lub 44// , jeśli tylko dany ciąg odzwierciedla rozsądną datę. Na przykład  i  są interpretowane jako  .  Jako wynik funkcji, która zwraca wartość akceptowaną przez typy #6 6+/ , #6 i 6+/ 56#/2, na przykład 019 lub 744 06A #6 . Niedozwolone wartości #6 6+/ , #6 i 6+/ 56#/2 są przekształcane na wartości zerowe odpowiedniego typu (  ,  lub ). W przypadku wartości określonych jako łańcuchy, które zawierają znaki rozdzielają- ce poszczególne części daty, nie ma konieczności podawania dwóch cyfr dla wartości miesiąca i dnia nie przekraczających 10.  jest tym samym, czym jest   . Podobnie dla wartości określanych jako łańcuchy ze znakami rozdzielającymi części godziny, nie ma konieczności podawania dwóch cyfr dla wartości godziny, minuty i sekundy mniejszych od 10.  jest tym samym, czym jest   . Wartości zadeklarowane jako liczby powinny mieć długość 6, 8, 12 i
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

MySQL. Opis języka
Autor:

Opinie na temat publikacji:


Inne popularne pozycje z tej kategorii:


Czytaj również:


Prowadzisz stronę lub blog? Wstaw link do fragmentu tej książki i współpracuj z Cyfroteką: