Serwisanci dostępni teraz · czynne całą dobę, także w weekendy i świętaWarszawa i okolice · dojazd bezpłatny
Darmowa diagnoza laptopa
Darmowa diagnoza laptopa
Dojazd do klienta bezpłatnie
Dojazd do klienta bezpłatnie
Laptopy zastępcze bezpłatnie
Laptopy zastępcze bezpłatnie
Odbiór i zwrot sprzętu bezpłatnie
Odbiór i zwrot sprzętu bezpłatnie

NTEXT

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 Server

NTEXT 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ów

NTEXT 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 CAST(kolumna AS NVARCHAR(MAX)) albo CONVERT(NVARCHAR(MAX), kolumna). Konwersja powinna uwzględniać rzeczywistą strukturę zapytania, ponieważ rzutowanie w klauzuli WHERE może wpływać na plan wykonania i zużycie zasobów.

Obsługa kolumn NTEXT w zapytaniach i migracji

Przy 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 SELECT CONVERT(NVARCHAR(MAX), opis) FROM dbo.Dokumenty zwróci wartość jako współczesny typ Unicode.

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 N przy literałach Unicode, na przykład N'Zażółć gęślą jaźń'. Bez tego prefiksu SQL Server może potraktować literał jako VARCHAR i doprowadzić do utraty znaków, zanim wartość trafi do kolumny NVARCHAR. Samo użycie NTEXT nie chroni więc przed błędami kodowania wynikającymi z nieprawidłowego typu parametrów lub literałów w aplikacji.

Co sprawdzić przy awarii aplikacji korzystającej z NTEXT

Jeż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 sys.columns i sys.types, oraz przeanalizowanie procedur i zapytań wykonujących operację.

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.

+48 22 100 48 29Zadzwoń teraz · serwisant w 1 godzinę