sql >> Base de Datos >  >> RDS >> Mysql

¿Por qué la migración de Rails Active Record generó COLLATE utf8_bin en las columnas varchar de mysql?

El utf8_bin La intercalación se usa para comparar cadenas en un modo sensible a mayúsculas y minúsculas, por el valor binario de cada carácter. Puede depender de la configuración local de su base de datos, qué juego de caracteres o intercalación se utiliza. Por ejemplo, para una base de datos MySQL, puede comprobar el modo de intercalación de su base de datos MySQL mediante el siguiente comando MySQL

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

..o usando este..

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

En su caso, uno de estos valores debería ser utf8_bin . Los valores generales para la base de datos se pueden establecer en su archivo de configuración, probablemente my.cnf para MySQL. Para crear una tabla MySQL con un motor, conjunto de caracteres o intercalación específicos, puede usar las opciones de migración:

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

De acuerdo con la documentación, el conjunto de caracteres y colación de la tabla son extensiones de MySQL, no existen tales cosas en SQL estándar.