Неверное смешение параметров сортировки в MySql - PullRequest
39 голосов
/ 07 августа 2009

Только что получил этот ответ из предыдущего вопроса, и это работает удовольствие!

SELECT username, (SUM(rating)/COUNT(*)) as TheAverage, Count(*) as TheCount 
FROM ratings WHERE month='Aug' GROUP BY username HAVING TheCount > 4
ORDER BY TheAverage DESC, TheCount DESC

Но когда я вставляю этот дополнительный бит, он выдает эту ошибку:

Документация № 1267 - Незаконное сочетание Параметры сортировки (latin1_swedish_ci, IMPLICIT) и (latin1_general_ci, IMPLICIT) для операция '='

SELECT username, (SUM(rating)/COUNT(*)) as TheAverage, Count(*) as TheCount FROM 
ratings WHERE month='Aug' 
**AND username IN (SELECT username FROM users WHERE gender =1)**
GROUP BY username HAVING TheCount > 4 ORDER BY TheAverage DESC, TheCount DESC

Таблица:

id, username, rating, month

Ответы [ 18 ]

77 голосов
/ 21 апреля 2011

Вот как проверить, какие столбцы имеют неправильную сортировку:

SELECT table_schema, table_name, column_name, character_set_name, collation_name

FROM information_schema.columns

WHERE collation_name = 'latin1_general_ci'

ORDER BY table_schema, table_name,ordinal_position; 

И вот запрос, чтобы это исправить:

ALTER TABLE tbl_name CONVERT TO CHARACTER SET latin1 COLLATE 'latin1_swedish_ci';

Ссылка

16 голосов
/ 29 сентября 2009

Проверьте тип сортировки каждой таблицы и убедитесь, что они имеют одинаковое сопоставление.

После этого проверьте также тип сортировки каждого поля таблицы, которое вы используете в работе.

Я столкнулся с той же ошибкой, и эта хитрость работает на меня.

13 голосов
/ 17 мая 2016

[MySQL]

В этих (очень редких) случаях:

  • две таблицы, которые действительно нуждаются в разных типах сопоставления
  • значения не из таблицы, а из явного перечисления, например:

    ВЫБРАТЬ 1 как номера СОЮЗ ВСЕ ВЫБРАТЬ 2 СОЮЗ ВСЕ ВЫБРАТЬ 3

Вы можете сравнить значения между различными таблицами, используя CAST или CONVERT:

CAST('my text' AS CHAR CHARACTER SET utf8)

CONVERT('my text' USING utf8)

См. Документация CONVERT и CAST на веб-сайте MySQL.

5 голосов
/ 22 августа 2012

Я получил ту же ошибку на PhpMyadmin и сделал решение, указанное здесь, который работал для меня

ALTER TABLE table CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci

Неверное сочетание параметров сортировки Ошибка MySQL Кроме того, я бы порекомендовал переходить с General вместо шведского, так как он используется по умолчанию, и не использовать язык, если ваше приложение не использует шведский.

2 голосов
/ 03 марта 2016

Я думаю, вы должны конвертировать в utf8

--set utf8 for connection
SET collation_connection = 'utf8_general_ci'
--change CHARACTER SET of DB to utf8
ALTER DATABASE dbName CHARACTER SET utf8 COLLATE utf8_general_ci
--change CHARACTER SET of table to utf8
ALTER TABLE tableName CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci
1 голос
/ 07 июля 2016

Проблема здесь, в основном, просто приведение поля как это приведение (поле как varchar) или приведение (поля как дата)

1 голос
/ 23 января 2014

Я получил эту же ошибку внутри хранимой процедуры, в предложении where. я обнаружил, что проблема возникла с локальной объявленной переменной, ранее загруженной той же таблицей / столбцом.

Я решил преобразовать данные в один тип символа.

1 голос
/ 25 июля 2012

Вам нужно изменить каждый столбец Collation с latin1_general_ci на latin1_swedish_ci

1 голос
/ 07 августа 2009
  • Убедитесь, что в столбце users.gender указан INTEGER.
  • Попробуйте: alter table users convert to character set latin1 collate latin1_swedish_ci;
1 голос
/ 29 ноября 2018

Я также получил ту же ошибку, но в моем случае основная проблема была в , где условие, что параметр, который я проверяю, имел некоторый неизвестный скрытый символ ( +% A0 )

Когда A0 конвертируются, я получил 160, но 160 был вне диапазона символа, который знает db, поэтому база данных не может распознать его как символ, иначе моя колонка таблицы varchar

  • Решение, которое я сделал, я проверил, есть некоторые символы, подобные этим, и удали их перед запуском команды sql

  • например: - preg_replace ('/ \ D /', '', $ myParameter);

...