mysql select concat(charfield, format(doublefield,8)) выдает ошибку 1267
Что иронично по двум причинам: 1) потому что concat(charfield, doublefield) работает (это не имеет значения, когда одно из полей, которое должно быть объединено, является числовым) и 2) потому что ссылка mysql показывает это: CONCAT(str1,str2,...) в качестве прототипа для CONCAT и FORMAT это: "FORMAT(X,D) форматирует число X в такой формат, как '#,###,###.##', с округлением до десятичных знаков D, и возвращает результат в виде строки".
В отчаянии я пытался select concat(symbol, cast(format(closeprice,8) as char))
, который работал. Так что вы можете подумать: "Почему этот парень тратит наше время, он нашел что-то, что работает", и это правда. Но это не имеет смысла для меня, и поэтому мне было интересно, если кто-нибудь может это прояснить?
3 ответа
1267 - это незаконная смесь сопоставлений. Сортировка (алфавитная сортировка) поля char и сортировка строки, возвращаемой из FORMAT (вероятно, сортировка по умолчанию вашего сервера БД), отличаются.
Измените параметры сортировки столбца или сервера по умолчанию или выполните приведение.
У меня была такая же проблема сегодня, и вот что сработало для меня:
Часть запроса:
CONCAT(payment_currency," ", CONVERT(FORMAT(payment_amount, 2) using utf8)) AS payment_gross_amount
Результат:
PHP 1,250.00
На всякий случай, если кто-то сталкивается с той же проблемой.:)
Пытаться:
select concat(symbol, CONVERT(cast(format(closeprice,8) as char) USING utf8) COLLATE utf8_bin))
Поскольку вы не можете смешивать кодировку кодировки в функции CONCAT, такой как CONCAT(utf8_general_ci, utf8_bin).