Erreur requete SQL

poipoipo
Erreur requete SQL

Bonjour à toutes et à tous, j'ai un gros souci sur mon site, à la place de la page d'accueil j'ai une page blanche avec ce message:
Can't find file: 'utilisateur.MYI' (errno: 2)
J'ai donc voulu aller voir dans la table utilisateur dans MYSQL et impossible:
Voila l'erreur que j'ai:
SHOW INDEX FROM `utilisateur` ;

MySQL a réponduocumentation
#1017 - Can't find file: 'utilisateur.MYI' (errno: 2)

Si quelqu'un pouvait m'aider, j'ai eu beau chercher partout je ne trouve rien à ce sujet, le site etant un site commercial je suis bien évidemment dans la mer** la plus profonde

Par avance merci.

fredericmazue

Quote:
Si quelqu'un pouvait m'aider, j'ai eu beau chercher partout je ne trouve rien à ce sujet, le site etant un site commercial je suis bien évidemment dans la mer** la plus profonde

Vu la situation je vais essayer de t'aider. De mon mieux, sachant que je ne suis pas un crack de MySQL. Je préfère largement PostgreSQL à ce joujou comme je préfère largement C++ au joujou Java. :) Si tu as parcouru un peu ce forum, tu sais ce que je veux dire :)

Bon commençons par la mauvaise nouvelle:
- Le message d'erreur peut vouloir dire purement et simplement que la table utilisateur n'existe pas (ou plus) et que tu vas devoir la re-créer éventuellement à partir d'une sauvegarde.

MAIS

La bonne nouvelle maintenant:
La table existe peut être quand même. Ce que tu peux normalement vérifier avec SHOW TABLES.
Si elle existe, c'est peut être simplement un problème de casse. Notamment si tu es sur un système sensible à la casse comme Linux ou autre Unix.
Si tu es sous Windows et si dans ta requête tu nommes plusieurs fois la table dans ta requête, faut que ça soit toujours dans la même casse je crois.

Exemple pas bon
SELECT utilisateur.nom, Utilisateur.prenom FROM UTILISATEUR

Exemple ok
SELECT utilisateur.nom, utilisateur.prenom FROM utilisateur

En espérant que ça te sorte de ta .... ¤¤¤¤ ... heu situation :D

slim0110

Bonjour,

fredericmazue wrote:
Exemple pas bon
SELECT utilisateur.nom, Utilisateur.prenom FROM UTILISATEUR

Exemple ok
SELECT utilisateur.nom, utilisateur.prenom FROM utilisateur


Je ne vois pas la différence entre les deux....
jrebillat

slim0110 wrote:

Je ne vois pas la différence entre les deux....

Le nom de la table est `utilisateur` ou `UTILISATEUR` (en minuscules ou en MAJUSCULES... )

fredericmazue

Ce que j'ai voulu dire c'est que la table doit être nommée de la même façon dans toute la requête, que ce soit utilisateur, Utilisateur ou UTILISATEUR

slim0110

fredericmazue wrote:
Ce que j'ai voulu dire c'est que la table doit être nommée de la même façon dans toute la requête, que ce soit utilisateur, Utilisateur ou UTILISATEUR

Oui, là je suis d'accord.

Mais MySQL n'est pas sensible à la casse, si ?

En tous cas, je ne pense pas que son probleme vienne de là...

fredericmazue

Quote:
Mais MySQL n'est pas sensible à la casse, si ?

Et bien si il peut l'être.
C'est d'ailleurs mentionné quelque part dans la doc. Je ne sais plus où, mais je me rappelle bien l'avoir vu.

Quote:
En tous cas, je ne pense pas que son probleme vienne de là...

Et bien peut être que si.
Toujours en référence à la doc sus-mentionnée, le message d'erreur du posteur initial est émis quand une table est carrément absente, où bien quand il y a de sombres histoires de casse. J'en suis sûr, sinon je ne me serai pas permis de répondre n'importe quoi. :)
fredericmazue

Voilà j'ai retrouvé où c'était:

http://dev.mysql.com/doc/refman/5.0/en/cannot-find-table.html

J'en cite un bout:

Quote:
Even for filesystems that are not case sensitive, such as on Windows, all references to a given table within a query must use the same lettercase.

M'enfin :!:

slim0110

oups...

Comme j'ai toujours ecris en miniscule sur MySql (nom des tables et des champs) je le savais pas. Merci pour l'info :wink:

K-lo

La prochaine fois tiens toujours compte de la case. ça t'évitera certains problème que tu metteras longtemps a remarquer par rapport à sa complexité... Et puis tu prendras moins de risque :
sous certains OS comme sous Linux voir MAC OSX (puisque basé sur FreeBSD) la case est plus qu'importante...
Sous certains environnements ou outils de programmation aussi, la preuve est faites.

Et puis ça reste logique : regarde le code ASCII de "A" et le code ASCII de "a" c'est pas les même :lol: :lol:

:wink:

fredericmazue

Quote:
Comme j'ai toujours ecris en miniscule sur MySql (nom des tables et des champs)

Ce qui est une bonne pratique. En tous cas, je fais comme toi :)
Enfin, quand j'en ai la possibilité, parce que quand il arrive de devoir travailler sur des bases de données existantes, alors là, on voit de tout :(