sql >> Databáze >  >> Database Tools >> phpMyAdmin

V databázi nelze rozpoznat datový typ nvarchar

Nemusíte se starat o zprávu nvarchar, kterou vygeneroval phpmyadmin, nikoli MySQL. MySQL umožňuje datový typ nvarchar, viz manuál MySQL o národních datech znaková sada :

Standardní SQL definuje NCHAR nebo NATIONAL CHAR jako způsob, jak označit, že sloupec CHAR by měl používat nějakou předdefinovanou znakovou sadu. MySQL používá jako tuto předdefinovanou znakovou sadu sutf8. Například tyto deklarace datových typů jsou ekvivalentní:

CHAR(10), CHARACTER SET utf8 NÁRODNÍ CHARACTER(10), NCHAR(10)

Stejně jako tyto:

VARCHAR(10), CHARACTER SET utf8 NATIONAL VARCHAR(10), NVARCHAR(10),NCHAR VARCHAR(10), NATIONAL CHARACTER VARYING(10), NATIONAL CHARVARYING(10)

Skutečný problém je ve spodní části chybové zprávy:velikost řádku je příliš velká. Tato chybová zpráva pochází z MySQL a je to ta, kterou potřebujete vyřešit.

mysql používá znakovou sadu utf8 pro datový typ nvarchar. Znak utf8 v mysql používá až 3 bajty. Vaše config_data pole je definováno jako nvarchar(21844) , proto vyžaduje až 21844*3+2=65534 bajtů.

Jak říká chybová zpráva, řádek může být dlouhý až 65535 bajtů, takže vám zbývá 1 bajt, ale ostatní pole posunou velikost řádku nad limit.

Co můžete udělat:

  1. Snižte config_data délka pole, aby se celková délka řádku vešla do limitu.
  2. Změňte config_data datový typ na varchar a použijte znakovou sadu, která vyžaduje méně bajtů – jen se ujistěte, že znaková sada podporuje všechny znaky, které potřebujete.
  3. Změňte config_data datový typ na text protože pouze malá část hodnoty textového pole je ve skutečnosti uložena v samotném řádku. To je ve skutečnosti navrženo v samotné chybové zprávě.



  1. Visual Studio 2010 nemůže najít databázi vytvořenou v SQL Server Management Studios

  2. DBeaver 6.0 je nový velký krok vpřed

  3. Generovat skripty SQL serveru z příkazového řádku?

  4. Jak mohu vytvořit sloupec, který ukládá čas vytvoření tohoto řádku v mysql?