Du behøver ikke bekymre dig om nvarchar-meddelelsen, der blev genereret af phpmyadmin, ikke af MySQL. MySQL tillader nvarchar-datatype, se MySQL-manualen om nationale data tegnsæt :
Standard SQL definerer NCHAR eller NATIONAL CHAR som en måde at angive, at en CHAR-kolonne skal bruge et foruddefineret tegnsæt. MySQL brugersutf8 som dette foruddefinerede tegnsæt. For eksempel er disse datatypedeklarationer ækvivalente:
CHAR(10), CHARACTER SET utf8 NATIONAL CHARACTER(10), NCHAR(10)
Som er disse:
VARCHAR(10), CHARACTER SET utf8 NATIONAL VARCHAR(10), NVARCHAR(10),NCHAR VARCHAR(10), NATIONAL CHARACTER VARIING(10), NATIONAL CHARVARYING(10)
Det virkelige problem er nederst i fejlmeddelelsen:rækkestørrelsen er for stor. Denne fejlmeddelelse kommer fra MySQL, og det er den, du skal løse.
mysql bruger utf8 tegnsæt til nvarchar datatype. Et utf8-tegn i mysql bruger op til 3 bytes. Dine config_data
felt er defineret som nvarchar(21844)
, derfor kræver det op til 21844*3+2=65534 bytes.
Som fejlmeddelelsen siger, kan en række være op til 65535 byte lang, så du har 1 byte tilbage, men de andre felter skubber rækkestørrelsen over grænsen.
Hvad du kan gøre:
- Reducer
config_data
feltlængde, så den samlede rækkelængde passer ind i grænsen. - Skift
config_data
datatype til varchar og brug et tegnsæt, der kræver færre bytes - bare sørg for, at tegnsættet understøtter alle de tegn, du har brug for. - Skift
config_data
datatype tiltext
fordi kun en lille del af et tekstfelts værdi er faktisk gemt i selve rækken. Dette er faktisk foreslået i selve fejlmeddelelsen.