2009-10-07 11 views
2

qui est ironique sur deux points, 1) parce que concat (charfield, doublefield) fonctionne (cela ne dérange pas quand l'un des champs à concaténer est numérique) et 2) parce que la référence mysql montre ceci: CONCAT (str1, str2, ...) comme prototype pour CONCAT et pour FORMAT ceci: "FORMAT (X, D) Formate le nombre X en un format comme '# , ###, ###. ## ', arrondi à D décimales, et renvoie le résultat sous forme de chaîne ".mysql select concat (charfield, format (doublefield, 8)) donne l'erreur 1267

En désespoir de cause, j'ai essayé select concat(symbol, cast(format(closeprice,8) as char)), qui a fonctionné. Alors vous pourriez penser, "pourquoi ce type perd-il notre temps, il a trouvé quelque chose qui fonctionne", ce qui est vrai. Mais cela n'a pas de sens pour moi, alors je me demandais si quelqu'un pouvait l'éclaircir?

Répondre

4

1267 est un mélange illégal de collations. Le classement (tri alphabétique) de charfield et le classement de la chaîne renvoyée par FORMAT (probablement le classement par défaut de votre serveur db) sont différents.

Modifiez le classement de la colonne ou le classement par défaut du serveur ou effectuez le cast.

0

Essayez:

select concat(symbol, CONVERT(cast(format(closeprice,8) as char) USING utf8) COLLATE utf8_bin)) 

Comme vous ne pouvez pas mélanger le codage charset dans une fonction CONCAT comme CONCAT (utf8_general_ci, utf8_bin).

0

J'ai eu le même problème aujourd'hui et c'est ce qui a fonctionné pour moi:

portion de requête:

CONCAT(payment_currency," ", CONVERT(FORMAT(payment_amount, 2) using utf8)) AS payment_gross_amount 

Résultat:

PHP 1,250.00 

Juste au cas où quelqu'un rencontre le même problème aussi. :)