| Termin | Definicja |
|---|---|
| NTEXT | NTEXT to przestarzały typ danych SQL Server dla długich tekstów Unicode, zastąpiony przez NVARCHAR(MAX). Czym jest typ NTEXT w SQL ServerNTEXT jest przestarzałym, zmiennopozycyjnym typem danych programu Microsoft SQL Server, przeznaczonym do przechowywania długich ciągów znaków Unicode. Litera „N” wskazuje na obsługę znaków Unicode, dzięki czemu kolumna może przechowywać między innymi polskie znaki, takie jak ą, ć, ę, ł, ń, ó, ś, ź i ż, a także znaki alfabetów używanych poza Europą. Typ ten był odpowiednikiem typu TEXT dla danych znakowych niewymagających Unicode. NTEXT nie określa konkretnego limitu długości podawanego przy definicji kolumny. SQL Server pozwala w nim przechowywać bardzo długie wartości, do 1 073 741 823 znaków. Każdy znak Unicode zajmuje zasadniczo dwa bajty, dlatego maksymalna objętość danych przechowywanych przez ten typ jest ograniczona również rozmiarem obsługiwanym przez SQL Server. Wartość może być znacznie większa niż typowy opis, komentarz, dokument tekstowy albo pojedynczy wpis w aplikacji. Dlaczego NTEXT zostało wycofane z nowych projektówNTEXT należy w SQL Server do typów oznaczonych jako przestarzałe. Microsoft zaleca używanie zamiast niego typu NVARCHAR(MAX), który również przechowuje dane Unicode o dużej długości, ale jest lepiej zintegrowany ze współczesnym językiem Transact-SQL. W nowej tabeli nie powinno się więc projektować kolumn NTEXT tylko dlatego, że mają przechowywać długi tekst. Wybór NVARCHAR(MAX) ogranicza problemy z obsługą zapytań i ułatwia dalszy rozwój aplikacji. Różnica nie polega wyłącznie na nazwie typu. NTEXT ma ograniczoną obsługę części operatorów, funkcji i operacji typowych dla zwykłych typów znakowych. Nie można traktować go jak pełnoprawnego odpowiednika NVARCHAR przy porównywaniu, sortowaniu, grupowaniu czy przekazywaniu wartości do funkcji. W praktyce często trzeba jawnie przekonwertować dane, na przykład za pomocą wyrażenia Obsługa kolumn NTEXT w zapytaniach i migracjiPrzy odczycie danych NTEXT można używać ich w zapytaniach, lecz wiele operacji wymaga wcześniejszej konwersji do NVARCHAR(MAX). Dotyczy to zwłaszcza funkcji tekstowych, które oczekują typu znakowego obsługiwanego przez bieżące mechanizmy SQL Server. Do wyszukiwania fragmentu tekstu można wykorzystać operator LIKE, jednak przy bardziej złożonych operacjach bezpieczniej jest jawnie określić typ wyniku. Przykładowo zapytanie Konwersja całej kolumny jest zmianą schematu, a nie tylko poprawieniem pojedynczego SELECT-a. Przed migracją należy sprawdzić zależności: procedury składowane, widoki, wyzwalacze, indeksy, ograniczenia, kod aplikacji oraz mechanizmy eksportu i importu. Typ NVARCHAR(MAX) jest zmiennopozycyjny i może przechowywać do 2^31-1 bajtów (ok. 1 073 741 823 znaków przy 2 bajtach na znak), czyli 2 147 483 647 znaków, ale w praktyce działanie ograniczają rozmiar wiersza, dostępna pamięć, sposób zapisu oraz limity innych elementów zapytania. Zmiana typu nie powinna automatycznie oznaczać skracania danych, dlatego warto wcześniej porównać długości wartości i wykonać kopię bazy zgodnie z procedurą przyjętą dla danego środowiska. Podczas migracji trzeba też zachować prefiks Co sprawdzić przy awarii aplikacji korzystającej z NTEXTJeżeli aplikacja zapisuje lub odczytuje kolumnę NTEXT, diagnostykę należy rozpocząć od identyfikacji konkretnego komunikatu SQL Server oraz instrukcji, która go wywołuje. Błąd może wynikać z próby użycia niedozwolonego operatora, przekazania wartości NTEXT do funkcji nieobsługującej tego typu, niejawnej konwersji albo niezgodności typu parametru sterownika z definicją kolumny. Pomocne jest sprawdzenie schematu za pomocą widoków katalogowych, między innymi W komputerze użytkownika problem może objawiać się jako brak treści, błąd zapisu formularza, niepełne wyszukiwanie albo wyjątek podczas wyświetlania dokumentu. Nie oznacza to automatycznie uszkodzenia dysku, pamięci RAM czy systemu operacyjnego. Jeżeli inne dane aplikacji działają poprawnie, a błąd pojawia się wyłącznie przy długich polach tekstowych, należy porównać długość wartości, typ parametru wysyłanego przez sterownik oraz sposób konwersji po stronie zapytania. Przy modernizacji aplikacji właściwym kierunkiem jest zastąpienie NTEXT przez NVARCHAR(MAX), poprzedzone testem odczytu, zapisu, wyszukiwania i zachowania polskich znaków na kopii bazy. |