sql >> Database >  >> RDS >> Mysql

Waarom heeft Rails Active Record-migratie COLLATE utf8_bin gegenereerd op varchar-kolommen van mysql

De utf8_bin sortering wordt gebruikt om strings te vergelijken in een hoofdlettergevoelige modus, door de binaire waarde van elk teken. Het kan afhankelijk zijn van uw lokale instellingen van uw database welke tekenset of sortering wordt gebruikt. Voor een MySQL-database kunt u bijvoorbeeld de sorteermodus van uw MySQL-database controleren met het volgende MySQL-commando

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

..of door deze te gebruiken..

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

In jouw geval zou een van deze waarden utf8_bin . moeten zijn . De algemene waarden voor de database kunnen worden ingesteld in uw configuratiebestand, waarschijnlijk my.cnf voor MySQL. Om een ​​MySQL-tabel met een specifieke engine, tekenset of sortering te maken, kunt u migratie-opties gebruiken:

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

Volgens de documentatie is de tabeltekenset en sortering zijn MySQL-extensies, dergelijke dingen zijn er niet in standaard SQL.




  1. mysql select records groter dan 3 maanden

  2. Snapshots van SQL Server-database -3

  3. Een ORA 02063 DG4ODBC-fout onderzoeken

  4. (poor man's) implementatie van productaanbevelingen