Код ошибки: 1267. Недопустимое сочетание сортировок (latin1_swedish_ci, IMPLICIT) и (utf8_general_ci, COERCIBLE) [дубликат]

Для пользователей Mac: Шаг 1: Установите Android Studio

Шаг2: Откройте терминал и введите

cd

Шаг 3. Введите ниже указанную команду, изменив имя пользователя:

export PATH = "/ Users / userName / Library / Android / sdk / platform-tools": $ PATH

86
задан OMG Ponies 27 February 2012 в 06:20
поделиться

7 ответов

SET collation_connection = 'utf8_general_ci';

, затем для ваших баз данных

ALTER DATABASE your_database_name CHARACTER SET utf8 COLLATE utf8_general_ci;

ALTER TABLE your_table_name CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;

MySQL иногда пробирается туда, где нет разумной причины.

212
ответ дан FreshPow 19 August 2018 в 00:02
поделиться
  • 1
    работает как шарм :) – Shiv Deepak 28 November 2012 в 21:25
  • 2
    Фантастический друг. он отлично работает. Благодарю. – Sagotharan 14 March 2013 в 12:31
  • 3
    @Ben: Спасибо за прямое решение для копирования. Сэкономил много времени. – Pistos 3 October 2013 в 17:57
  • 4
    @Ben: Первоначально он был разработан шведской компанией ... Вот причина, вызывающая раздражающую настройку latin1_swedish_ci .. :( – Vajk Hermecz 29 September 2014 в 08:45
  • 5
    У меня не было разрешений на выполнение первого оператора, но он работал только с таблицей – Rob Sedgwick 4 March 2015 в 15:04

У меня была таблица, первоначально созданная с помощью CHARSET = latin1. После преобразования таблицы в utf8 некоторые столбцы не были преобразованы, однако это было не совсем очевидно. Вы можете попробовать запустить SHOW CREATE TABLE my_table; и посмотреть, какой столбец не был преобразован, или просто исправить неверный набор символов в проблемном столбце с запросом ниже (изменить длину varchar и CHARSET и COLLATE в соответствии с вашими потребностями):

 ALTER TABLE `my_table` CHANGE `my_column` `my_column` VARCHAR(10) CHARSET utf8 
 COLLATE utf8_general_ci NULL;
0
ответ дан A Kunin 19 August 2018 в 00:02
поделиться
CONVERT(column1 USING utf8)

Решает мою проблему. Где column1 - столбец, который дает мне эту ошибку.

1
ответ дан Binaya Shrestha 19 August 2018 в 00:02
поделиться

После внесения исправлений, перечисленных в верхнем ответе, измените настройки вашего сервера по умолчанию.

В вашем файле /etc/my.cnf.d/server.cnf или где он находится, добавьте по умолчанию используется раздел [mysqld], поэтому он выглядит так:

[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci

Источник: https://dev.mysql.com/doc/refman/5.7/en/charset-applications .html

0
ответ дан ITI 19 August 2018 в 00:02
поделиться

Вы должны установить для вашей кодировки таблицы и кодирования соединения значение UTF-8:

ALTER TABLE keywords CHARACTER SET UTF8; -- run once

и

SET NAMES 'UTF8';
SET CHARACTER SET 'UTF8';
11
ответ дан Quassnoi 19 August 2018 в 00:02
поделиться
  • 1
    Нужны ли они оба, или я могу просто сделать один из них? – Click Upvote 17 June 2009 в 19:23
  • 2
    ALTER DATABASE myDb ПАРАМЕТР ПО УМОЛЧАНИЮ УСТАНОВИТЬ utf8 COLLATE utf8_bin. Будет ли это работать? Это делается так, чтобы это повлияло на все мои таблицы, а не только на одну из них – Click Upvote 17 June 2009 в 19:32
  • 3
    ALTER DATABASE не изменит ваши текущие настройки таблицы, только новые. Это, однако, не помешает изменить кодировку по умолчанию для базы данных. – Quassnoi 17 June 2009 в 20:03
  • 4
    SET NAMES и SET CHARACTER SET изменят кодировку соединения. Вам нужно выдать эти команды каждый раз при подключении. Ваша клиентская библиотека может поддерживать более элегантный способ сделать это (php :: mysqli does, php :: mysql does not). – Quassnoi 17 June 2009 в 20:04
  • 5
    Кажется, сейчас работает, я буду принимать еще несколько тестов. Нужно ли выполнять второй запрос один раз или в начале каждого сценария? – Click Upvote 17 June 2009 в 20:06

В общем, лучший способ - изменить сортировку таблицы. Однако у меня есть старое приложение и на самом деле не могу оценить результат, имеет ли это побочные эффекты. Поэтому я попытался каким-то образом преобразовать строку в другой формат, который решил проблему сортировки. То, что я нашел, - это выполнить сравнение строк, преобразуя строки в шестнадцатеричное представление его символов. В базе данных это делается с помощью HEX(column).. Для PHP вы можете использовать эту функцию:

public static function strToHex($string)
{
    $hex = '';
    for ($i=0; $i<strlen($string); $i++){
        $ord = ord($string[$i]);
        $hexCode = dechex($ord);
        $hex .= substr('0'.$hexCode, -2);
    }
    return strToUpper($hex);
}

При выполнении запроса базы данных исходная строка UTF8 должна быть сначала преобразована в строку iso (например, с помощью utf8_decode() в PHP), прежде чем использовать его в БД. Из-за типа сопоставления база данных не может содержать символы UTF8 внутри, поэтому сравнение должно работать, хотя это изменяет исходную строку (преобразование символов UTF8, которые не встречаются в символьной кодировке ISO, приводит к? Или они полностью удаляются). Просто убедитесь, что при записи данных в базу данных вы используете одно и то же преобразование UTF8 в ISO.

0
ответ дан Stephan 19 August 2018 в 00:02
поделиться

Используйте следующую инструкцию для ошибки

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

 ALTER TABLE your_table_name CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
2
ответ дан vpgodara 19 August 2018 в 00:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: