Неверное смешение параметров для операции 'concat' - PullRequest
10 голосов
/ 13 октября 2011

Я пытаюсь выполнить этот запрос concat в mysql

SELECT CONCAT(if(fName,fName,''),Name) 
From Student

Ошибка:

# 1271 - Недопустимое сочетание параметров сортировки для операции 'concat'

Ответы [ 6 ]

19 голосов
/ 13 октября 2011

Наборы символов и / или параметры сортировки, которые вы используете в своем соединении, не совпадают с набором символов / параметрами сортировки в вашей таблице.

Существует 4 решения:

1- Измените кодировку в вашем соединении:

//find out the charset used in your table.
SHOW TABLES LIKE 'student'
//set the server charset to match
SET NAMES 'charset_name' [COLLATE 'collation_name']

2- Измените кодировку, используемую в вашей таблице, для соответствия кодировке сервера:

//find out the charset used in the server
SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';
//Change the charset used in the table
ALTER TABLE student ......

3- Изменить настройки кодировки по умолчанию и перезапустить MySQL

Отредактируйте My.ini и замените параметры character_set_*, чтобы они соответствовали вашим таблицам.

4- Изменить настройки кодировки для вашего подключения

Ваш клиент может переопределить настройки кодировки и сопоставления.
Если это не вариант 1 или 3, это должно исправить вашу проблему, но если соединение переопределяет эти настройки, вам нужно проверить строку соединения и отредактировать настройки charset / collation, чтобы они соответствовали вашей базе данных.

Несколько советов:

Найти кодировку. Я рекомендую UTF8 и сопоставление: я рекомендую utf8_general_ci. И используйте их постоянно везде.

7 голосов
/ 19 января 2014

Это связано с разницей в коллекциях, которую можно решить путем преобразования двух строк или столбцов на одну коллекцию говорят UTF8

CONCAT(CAST(fName AS CHAR CHARACTER SET utf8),CAST('' AS CHAR CHARACTER SET utf8))

Это решит:)

вы можете проверить больше о приведении в MySQL здесь MySQL Casting

2 голосов
/ 13 апреля 2012

Также может быть ошибка, если ваша клиентская библиотека слишком старая для сервера mysql.
У нас была похожая проблема с LIKE и символом «ő» и использованием библиотеки PHP MySQL версии 5.1.52, но с сервером MySQL версии 5.5.22.
Проблема исчезла после обновления клиентской библиотеки.

2 голосов
/ 13 октября 2011

Объединение может работать только в том случае, если сопоставление всех используемых значений соответствует ИЛИ вы используете сопоставление, для которого все сопоставления являются подмножеством (с логической точки зрения).

Если вы хотите объединить текст, каждый текст должен быть одинаковым. Взгляните на сопоставление, которое использует база данных, а затем посмотрите на сопоставление, которое использует ваше соединение:

show variables like '%coll%'

Значение collation_connection должно соответствовать параметрам сортировки таблицы, которую вы пытаетесь объединить. Если этого не произойдет, появится сообщение об ошибке.

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

2 голосов
/ 13 октября 2011

Похоже, что вы неправильно используете оператор if, потому что он приведет к типу данных undefined, поэтому операция concat завершится неудачно, поскольку отличается типом данных. Попробуйте изменить запрос, используя вместо него ifnull.

Попробуйте вместо этого запрос:

SELECT concat(ifnull(fName,''),Name) From Student

см. Демо здесь http://www.sqlize.com/kfy85j8f1e

для другой ссылки читайте также http://forums.mysql.com/read.php?10,225982,225982#msg-225982

0 голосов
/ 14 июля 2015

Попробуйте это ..

 CONCAT(CAST(fName AS CHAR CHARACTER SET utf8),CAST('' AS CHAR CHARACTER SET utf8))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...