Mysql
 sql >> Base de données >  >> RDS >> Mysql

Pourquoi la migration Rails Active Record a-t-elle généré COLLATE utf8_bin sur les colonnes varchar de mysql

Le utf8_bin le classement est utilisé pour comparer les chaînes dans un mode sensible à la casse, par la valeur binaire de chaque caractère. Cela peut dépendre de vos paramètres locaux de votre base de données, quel jeu de caractères ou classement est utilisé. Par exemple pour une base de données MySQL, vous pouvez vérifier le mode de classement de votre base de données MySQL par la commande MySQL suivante

mysql> SELECT COLLATION(VERSION());
+----------------------+
| COLLATION(VERSION()) |
+----------------------+
| utf8_general_ci      |
+----------------------+

..ou en utilisant celui-ci..

mysql> show variables like '%collation%';
+----------------------+-------------------+
| Variable_name        | Value             |
+----------------------+-------------------+
| collation_connection | utf8_general_ci   |
| collation_database   | latin1_swedish_ci |
| collation_server     | latin1_swedish_ci |
+----------------------+-------------------+

Dans votre cas, l'une de ces valeurs doit être utf8_bin . Les valeurs générales de la base de données peuvent être définies dans votre fichier de configuration, probablement my.cnf pour MySQL. Afin de créer une table MySQL avec un moteur, un charset ou un classement spécifique, vous pouvez utiliser les options de migration :

create_table :users, 
        :options => 'ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci'
        ...

Selon la documentation, le jeu de caractères et collation de table sont des extensions MySQL, il n'y a rien de tel dans le SQL standard.