sql >> Databasteknik >  >> RDS >> Mysql

Varför genererade Rails Active Record-migrering COLLATE utf8_bin på varchar-kolumner i mysql

utf8_bin sortering används för att jämföra strängar i ett skiftlägeskänsligt läge, med det binära värdet för varje tecken. Det kan bero på dina lokala inställningar för din databas vilken teckenuppsättning eller sortering som används. Till exempel för en MySQL-databas kan du kontrollera sorteringsläget för din MySQL-databas med följande MySQL-kommando

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

..eller genom att använda den här..

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

I ditt fall bör ett av dessa värden vara utf8_bin . De allmänna värdena för databasen kan ställas in i din konfigurationsfil, förmodligen my.cnf för MySQL. För att skapa en MySQL-tabell med en specifik motor, teckenuppsättning eller sortering kan du använda migreringsalternativ:

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

Enligt dokumentationen, tabellteckenuppsättning och sortering är MySQL-tillägg, det finns inga sådana saker i standard SQL.




  1. Vad är det säkraste sättet att lägga till html/css/js till mysql?

  2. SQL Server Interns:Problematiska operatörer Pt. II – Hashing

  3. Fel:pg_config körbar fil hittades inte vid installation av psycopg2 på Alpine i Docker

  4. Mysql dynamisk trigger skapande i lagrad procedur