Pourquoi suis-je en voyant “CLASSEMENT 'xxx' est pas valide pour le JEU de CARACTÈRES 'yyy'”

Je suis sur MySQL 5.6.22 (InnoDB) sur Amazon RDS. J'ai essayé de mettre toutes mes tables, des colonnes, de la connexion et de la base de données de jeu de caractères et les paramètres de classement de utf8mb4 /utf8mb4_unicode_ci. Je peux trouver aucune preuve de l'existence que tout ce qui a charset latin1, mais quand j'exécute le code suivant (par nœud-mysql, ou directement dans "Sequel Pro" de l'application sur mon Mac):

update MyTable m 
set m.Column8 = 1
where m.Column3 = 26 and m.Column4 = 76
collate utf8mb4_unicode_ci

J'obtiens ce message d'erreur:

COLLATION 'utf8mb4_unicode_ci' is not valid for CHARACTER SET 'latin1'

Je ne trouve pas rien ensemble de latin1 dans ma configuration.

Sortie de show variables like "char%":

character_set_client        utf8mb4
character_set_connection    utf8mb4
character_set_database      utf8mb4
character_set_filesystem    utf8mb4
character_set_results       utf8mb4
character_set_server        utf8mb4
character_set_system        utf8
character_sets_dir          /rdsdbbin/mysql-5.6.22.R1/share/charsets/

Sortie de show variables like "collation%":

collation_connection        utf8mb4_unicode_ci
collation_database          utf8mb4_unicode_ci
collation_server            utf8mb4_unicode_ci

MyTable CRÉER une TABLE info:

CREATE TABLE `MyTable` (
`Column1` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`Column2` varchar(12) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`Column3` bigint(20) unsigned NOT NULL,
`Column4` bigint(20) unsigned NOT NULL,
`Column5` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
`Column6` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
`Column7` varchar(112) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
`Column8` tinyint(1) unsigned NOT NULL,
`Column9` decimal(16,14) DEFAULT NULL,
`Column10` decimal(17,14) DEFAULT NULL,
`Column11` bigint(20) unsigned DEFAULT NULL,
`Column12` bigint(20) unsigned DEFAULT NULL,
`Column13` timestamp(6) NULL DEFAULT NULL,
`Column14` timestamp(6) NULL DEFAULT NULL,
`Column15` tinyint(4) NOT NULL DEFAULT '1',
`Column16` tinyint(4) NOT NULL DEFAULT '1',
`Column17` varchar(15) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`Column18` varchar(200) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`Column19` bigint(20) unsigned DEFAULT NULL,
PRIMARY KEY (`Column1`),
KEY `IX_Reevues_Column3` (`Column3`),
KEY `IX_Reevues_Column4` (`Column4`),
KEY `IX_Reevues_Column6` (`Column6`),
KEY `IX_Reevues_Column8` (`Column8`),
KEY `IX_Reevues_Column2` (`Column2`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
Peut être de l'aide.
Vous utilisez des champs de caractère dans la clause where. Quel est le but de " rassembler , à la sortie de la curiosité?
Cette instruction SQL est la version la plus simple de mon véritable déclaration que j'ai pu montrer que encore déclenché l'erreur. Le véritable déclaration n'a normalement contenir une comparaison de deux valeurs de chaîne, c'est pourquoi le COLLATE déclaration a été ajoutée. Suggérez-vous que si aucune chaîne de valeurs sont comparées, les ASSEMBLER déclaration doit être enlevé, ou il va générer ce type d'erreur?

OriginalL'auteur Mason G. Zhwiti | 2015-02-23