|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Nouveau Membre du Club
![]() Développeur Web Inscription : novembre 2006 Messages : 68 ![]() |
Bonjour,
J'ai une table dont les champs sont essentiellement des VARCHAR(255). Lorsque j'éssais de créer un index unique composé de plusieurs champs, j'obtiens l'erreur: 1071 Specified key was too long; max key length is 1000 bytes. J'ai lu quelque part que cela est du au charset utf-8 qui occupe plus d'espace que le latin. Quelle est la différence entre les 2 charset latin et utf-8 ? Lequel dois-je utiliser ? Merci pour vos réponses. |
|
|
00
|
|
|
#2 |
![]() ![]() |
Commence déjà par te demander si tu as vraiment besoin de 255 caractères dans toutes ces colonnes !
On peut voir la structure de la table ?
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
00
|
|
|
#3 | |
|
Nouveau Membre du Club
![]() Développeur Web Inscription : novembre 2006 Messages : 68 ![]() |
C'est justement difficile à savoir si j'ai besoin de 255 caractères par collone car je ne controle pas le contenu. Et pour etre sûr que toutes les données passeront, je prends 255.
Je développe en fait une application qui créé dynamiquement les tables qui doivent contenir des données qui peuvent etre des adresses IP, des dates, du texte très long, etc. Mais comme les tables sont créé dynamiquement, il est impossible de savoir que tel champ contiendra tel type de donnée. Je prend donc tout en VARCHAR(255). Après, j'ai besoin de faire en sorte que une ligne déja enregistrée ne soit pas de nouveau enregistrée. C'est pour cela que je voudrais faire un index unique de tous les champs. La structure de l'une des tables: Citation:
|
|
|
|
00
|
|
|
#4 | |
![]() ![]() |
Les colonnes date et time ne devraient pas s'appeler comme ça parce que ce sont des mots du langage SQL.
Il existe les types DATE 'aaaa-mm-jj' TIME 'hh:mm:ss' et DATETIME 'aaaa-mm-jj hh:mm:ss' s_ip : À moins que tu aies des IP V6, le format sera toujours au maximum '255.255.255.255' donc pas besoin de 255 caractères ! s_port : si c'est un port d'ordinateur, ça m'étonnerait qu'il y en ait à 255 caractères ! c_ip : idem s_ip Et pour les autres, un username à 255 caractères, c'est potentiellement possible mais ça fait quand même beaucoup ! Citation:
![]() On définit la structure des données et on n'y touche plus qu'en cas de modification importante des besoins de l'application utilisatrice ou plus généralement du système d'informations. Bref, grosses erreurs de conception dès le départ entraînent le problème auquel tu es confronté et pour lequel tu as lancé cette discussion !
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
|
10
|
|
|
#5 | |
|
Nouveau Membre du Club
![]() Développeur Web Inscription : novembre 2006 Messages : 68 ![]() |
Citation:
|
|
|
|
00
|
|
|
#6 |
|
Candidat au titre de Membre du Club
![]() Inscription : octobre 2010 Messages : 31 ![]() |
Pour corriger ce problème, il suffit de passer tes tables /de les créer en innodb non pas MyISAM
|
|
|
00
|
|
|
#7 |
|
Membre extrêmement actif
![]() ![]() Mathieu Administrateur systèmes et réseaux Inscription : juillet 2005 Messages : 1 476 ![]() |
D'ailleurs pour les IP il faut pas les stocker comme ça, mais utiliser les fonctions pour : http://dev.mysql.com/doc/refman/5.0/...tion_inet-aton
Et si, il y a bien erreur de conception |
|
00
|
|
|
#8 |
|
Nouveau Membre du Club
![]() Développeur Web Inscription : novembre 2006 Messages : 68 ![]() |
OK, en supposant qu'il y ait erreur de conception, que proposez vous pour y remédier, ou qu'auriez vous fait ?
Car il faut bien comprendre qu'on ne connait pas d'avance le type des champs des tables. Je vous explique ce que fait cette application. Elle permet de mieux 'reporter' les fichiers logs. Au lieu d'avoir des fichiers textes difficiles à lire et exploiter, cette application permet d'importer un fichier log, et enregistre automatiquement dans MySQL le contenu du fichier, et créant automatiquement la table et les champs du log. Après, l'exploitation est plus aisée en faisant des éditions par critères, de la recherche et de l'exportation Excel. Merci encore pour vos contributions. |
|
|
00
|
|
|
#9 |
|
Membre extrêmement actif
![]() ![]() Mathieu Administrateur systèmes et réseaux Inscription : juillet 2005 Messages : 1 476 ![]() |
Tu peux pas faire un mapping selon le type de logs en utilisant les bon champs ?
Pour ce scénario, je suis pas sure qu'une base de données relationnelle soit très adapté, tu a regardé du coté des bases de données clé-valeurs type Cassandra ou MongoDB ? |
|
00
|
|
|
#10 |
![]() ![]() |
Si j'en juges par la structure de la table que tu nous présentes, l'application sait quand même nommer correctement les colonnes, probablement parce que c'est l'entête du fichier de log.
Tu pourrais donc importer le fichier dans une table temporaire et ensuite transférer les données dans une structure normalisée. Si l'entête du fichier, donc les colonnes des tables, sont toujours du type quelquechose_ip ou quelquechose_uri, date, time, il est assez facile de reconnaître par programme de quel type d'info il s'agit et de transférer les données dans des colonnes de type approprié.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
00
|
Copyright © 2000-2012 - www.developpez.com