Du behöver inte oroa dig för nvarchar-meddelandet, som genererades av phpmyadmin, inte av MySQL. MySQL tillåter nvarchar-datatyp, se MySQL-manualen om nationell data teckenuppsättning :
Standard SQL definierar NCHAR eller NATIONAL CHAR som ett sätt att indikera att en CHAR-kolumn ska använda någon fördefinierad teckenuppsättning. MySQL använder utf8 som denna fördefinierade teckenuppsättning. Till exempel är dessa datatypdeklarationer likvärdiga:
CHAR(10), CHARACTER SET utf8 NATIONELL CHARACTER(10), NCHAR(10)
Som är dessa:
VARCHAR(10), CHARACTER SET utf8 NATIONAL VARCHAR(10), NVARCHAR(10),NCHAR VARCHAR(10), NATIONELL KARAKTÄR VARIERANDE(10), NATIONAL CHARVARYING(10)
Det verkliga problemet är längst ner i felmeddelandet:radstorleken är för stor. Det här felmeddelandet kommer från MySQL och det är det du behöver lösa.
mysql använder utf8 teckenuppsättning för nvarchar datatyp. Ett utf8-tecken i mysql använder upp till 3 byte. Dina config_data
fältet definieras som nvarchar(21844)
, därför kräver den upp till 21844*3+2=65534 byte.
Som felmeddelandet säger kan en rad vara upp till 65535 byte lång, så du har 1 byte kvar, men de andra fälten skjuter upp radstorleken över gränsen.
Vad du kan göra:
- Minska
config_data
fältets längd så att den totala radlängden passar in i gränsen. - Ändra
config_data
datatyp till varchar och använd en teckenuppsättning som kräver mindre byte - se bara till att teckenuppsättningen stöder alla tecken du behöver. - Ändra
config_data
datatyp tilltext
eftersom endast en liten del av ett textfälts värde faktiskt lagras i själva raden. Detta föreslås faktiskt i själva felmeddelandet.