Mysql
 sql >> Database >  >> RDS >> Mysql

Perché la migrazione di Rails Active Record ha generato COLLATE utf8_bin su colonne varchar di mysql

Il utf8_bin confronto viene utilizzato per confrontare le stringhe in una modalità con distinzione tra maiuscole e minuscole, in base al valore binario di ciascun carattere. Può dipendere dalle impostazioni locali del database quale set di caratteri o confronto viene utilizzato. Ad esempio, per un database MySQL, puoi controllare la modalità di confronto del tuo database MySQL con il seguente comando MySQL

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

..o usando questo..

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

Nel tuo caso uno di questi valori dovrebbe essere utf8_bin . I valori generali per il database possono essere impostati nel tuo file di configurazione, probabilmente my.cnf per MySQL. Per creare una tabella MySQL con un motore, un set di caratteri o un confronto specifico puoi utilizzare le opzioni di migrazione:

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

Secondo la documentazione, il set di caratteri della tabella e regole di confronto sono estensioni MySQL, non ci sono cose del genere nell'SQL standard.