La mia applicazione web principale asp.net sta colpendo è il database MySQL. Genero migrazione e aggiornamento del database, quindi vedo le regole di confronto della tabella che è diversa su macchine diverse. Sulla mia macchina latin1 - collation di default e su una macchina diversa, è utf8 - collation di default .
Quindi, a causa di questo comportamento, sto ricevendo un'eccezione mentre inserisco giapponese o altri linguaggi come æ- ¥ 本語, Espaà ± ol Mà © xico o ç® € ä½ "䏿- ‡ in un tavolo che ha una colonna varchar (64). Funziona bene su un'altra macchina che ha utf8 - regole di confronto predefinite su questa tabella.
EF Core Version: 2.0.1
MySql: 5.7.22 **
È questo il problema di EF Core? O c'è qualche soluzione per generare il database con le regole di confronto o codifica appropriate?
Non è un problema di EF Core, se nel tuo MySql hai configurato regole di confronto predefinite che saranno selezionate da MySql. Quindi la collazione è cosa di configurazione del sistema di database. Probabilmente devi modificare le regole di confronto predefinite sulla tua macchina.
Un'altra opzione è aggiungere dopo aver creato la dichiarazione della tabella nella migrazione:
Sql('alter table <some_table> convert to character set utf8 collate utf8_unicode_ci');
In MySQL "latin1 - default collation" non è utile per l'inserimento di parole Unicode e non inglesi, è necessario utilizzare le regole di confronto Utf8Mb4 (versione migliore di utf8).
Sul tavolo puoi impostare il set di caratteri della tabella in questo modo
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
Ecco un post che fornisce dettagli sul perché utf8mb4 è migliore