Certains ingénieurs ont aplati une structure de base de données normalisée dans une table temporaire afin de générer un rapport. Les colonnes sont spécifiées comme TEXT NOT NULL
(je sais "pourquoi font-ils cela?"; Supposons simplement que nous abordons ce problème).
Nous utilisons MySQL 5.1.48 Community RHEL5 avec le plug-in InnoDB 1.0.9 sous Linux.
Lors de l'utilisation de MyISAM, nous n'avons jamais rencontré de limites de taille de table de colonnes max ou de longueur de ligne max (au cours de l'enquête, nous avons atteint la limite de colonnes max à 2598 (le 2599ème provoque l'erreur 1117). Avec InnoDB, nous atteignons des limites. Ces limites se manifestent lors de la création du table (pas d'insertion de données) comme:
ERREUR 1118 (42000) à la ligne 1: taille de ligne trop grande. La taille de ligne maximale pour le type de table utilisé, sans compter les BLOBs, est 8126. Vous devez modifier certaines colonnes en TEXT ou BLOBs
Je cherche des réponses aux questions suivantes:
Quelle est la formule détaillée pour déterminer la taille des lignes de particules lors de l'utilisation de lots de colonnes v / v / b / t? J'ai essayé quelques formules différentes en utilisant des
varchar(N)
colonnes (où N est compris entre 1 et 512), le jeu de caractères UTF8 (* 3) et autant de colonnes que le tableau prendra jusqu'à l'échec. Aucun des combos que j'ai essayés ne donne des valeurs qui correspondent aux résultats des tests réels.Quels autres «frais généraux» dois-je considérer lors du calcul de la taille de la ligne?
Pourquoi le message d'erreur passe-t-il de 8126 à 65535 lorsque je passe de la création de tables avec des colonnes varchar (109) à des colonnes varchar (110)?