Ligne de la taille trop importante erreur de mysql créer des requêtes sur les tables
Je suis en train de créer un tableau avec la requête ci-dessous
Create Table PerformaceReport
(
campaignID int,
keywordID bigint,
keyword varchar(8000),
avgPosition decimal(18,6),
cost int,
clicks int,
conv1PerClick int,
impressions int,
day datetime,
currency varchar(8000),
account varchar(8000),
timeZone varchar(8000),
adGroup varchar(8000),
adGroupState varchar(8000),
approvalStatus varchar(8000),
lowestPosition varchar(8000),
campaign varchar(8000),
campaignState varchar(8000),
convManyPerClick int,
totalConvValue decimal(18,6),
maxCPCSource varchar(8000),
clientName varchar(8000),
destinationURL varchar(8000),
device varchar(8000),
firstPageCPC int,
isNegative bit,
matchType varchar(8000),
maxCPC varchar(8000),
maxCPM varchar(8000),
highestPosition varchar(8000),
qualityScore int,
keywordState varchar(8000),
viewThroughConv int)
Et j'obtiens l'erreur ci-dessous
#1118 - Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. You have to change some columns to TEXT or BLOBs
Quelqu'un peut s'il vous plaît laissez-moi savoir comment faire pour éviter cette erreur et de faire le travail de requête pour créer une table.
Vous devez vous connecter pour publier un commentaire.
La taille totale de tous les champs dans la table est plus que la limite, 65535, c'est pourquoi vous obtenez cette erreur.
Vous devez utiliser
text
type, au lieu devarchar
pour de longues cordes. Remplacer tous lesvarchar(8000)
avectext
, et cela devrait fonctionner.Ou, mieux encore, utiliser des types de données au lieu de "trop grands" ceux. Vous n'avez pas vraiment besoin de 8000 caractères pour stocker
currency
, pensez-vous?total size of *all* fields in the table
- et appris encore quelque chose de nouveau. Merci!Utilisation
TEXT
au lieu deVARCHAR
.Parce que vous êtes le dépassement de la taille maximale des lignes.
si vous utilisez
TEXT
,il est prévu pour les grandes colonnes de texte.Taille Max de
varchar
est de 65535.créer une colonne avec
varchar(65535)
mais cela devrait être la seule colonne dans la table.ou
problème est la ligne de limite de taille pour les tables innodb, belowlinks vous pouvez trouver des approches pour résoudre ce problème:
http://www.mysqlperformanceblog.com/2011/04/07/innodb-row-size-limitation/
https://dba.stackexchange.com/questions/6598/innodb-create-table-error-row-size-too-large
Je suis d'accord avec la réponse sur l'utilisation appropriée de la taille des colonnes et des TEXTE VARCHAR que la première étape, mais si vous avez encore frappé limites que vous souhaitez peut-être modifier vos paramètres de classement pour cette table si vous utilisez UTF-8 ou un autre jeu de caractères avec plus d'un octet par caractère et n'ont pas besoin (uniquement le stockage de texte en anglais par exemple). Je l'ai fait pour contourner la limite de vous frapper pour une très grande table. Plus de détails ici.
Les différences entre utf8 et latin1
65535 octets, c'est le maximum de la taille de ligne pour mysql.
Avec utf8mb4 jeu de caractères, de type varchar(255) signifie cette colonne, à la plupart des utilisations
255 * 4 + 1
octets. Donc cela dépend de ce jeu de caractères de la table.65 535 octets. Moteurs de stockage peuvent placer des contraintes sur
cette limite, la réduction de l'effectif maximum de la ligne de taille.
les colonnes de compter de un à quatre et de huit octets chacun vers l'
de la ligne de limite de taille parce que leurs contenus sont stockés séparément de la
reste de la ligne.
Limites sur la Table nombre de Colonnes et la Taille de la Ligne
Essayez de changer le moteur de stockage au format CSV.