Не е нужно да се притеснявате за съобщението nvarchar, което е генерирано от phpmyadmin, а не от MySQL. MySQL позволява nvarchar тип данни, вижте ръководството за MySQL за национални данни набор от символи :
Стандартният SQL дефинира NCHAR или NATIONAL CHAR като начин да се посочи, че колона CHAR трябва да използва някакъв предварително дефиниран набор от знаци. MySQL използва sutf8 като този предварително дефиниран набор от знаци. Например, тези декларации за тип данни са еквивалентни:
CHAR(10), НАБОР ОТ СИМВОВЕ utf8 НАЦИОНАЛЕН ЗНАК (10), NCHAR(10)
Както и тези:
VARCHAR(10), НАБОР НА СИМВОЛОВ utf8 НАЦИОНАЛЕН VARCHAR(10), NVARCHAR(10),NCHAR VARCHAR(10), НАЦИОНАЛЕН НАБОР НА ХАРАКТЕРИ (10), НАЦИОНАЛЕН CHARVARYING(10)
Истинският проблем е в долната част на съобщението за грешка:размерът на реда е твърде голям. Това съобщение за грешка идва от MySQL и това е, което трябва да разрешите.
mysql използва набор от символи utf8 за тип данни nvarchar. Един utf8 символ в mysql използва до 3 байта. Вашите config_data
полето се дефинира като nvarchar(21844)
, следователно изисква до 21844*3+2=65534 байта.
Както се казва в съобщението за грешка, редът може да бъде с дължина до 65535 байта, така че оставате ви 1 байт, но другите полета избутват размера на реда над ограничението.
Какво можете да направите:
- Намалете
config_data
дължина на полето, така че общата дължина на реда да се вмести в ограничението. - Променете
config_data
тип данни за varchar и използвайте набор от знаци, който изисква по-малко байтове – просто се уверете, че наборът от знаци поддържа всички знаци, от които се нуждаете. - Променете
config_data
тип данни къмtext
защото само малка част от стойността на текстово поле всъщност се съхранява в самия ред. Това всъщност е предложено в самото съобщение за грешка.