2013-05-03 20 views
8

Zbudowałem więc skrobaczkę i wciągam niektóre przedmioty. Problem polega na tym, że niektóre z nich są językami obcymi i nieco potrącają mysql db. To jest błąd, który mam. Masz pomysł, co mogę z tym zrobić? Dzięki!Mysql - Mysql2 :: Błąd: Niepoprawna wartość ciągu:

Mysql2::Error: Incorrect string value: '\xC5\x8Dga, ...' for column 'description' at row 1: INSERT INTO sammiches (country , created_at , description , image , name , updated_at) VALUES ('Japan', '2013-05-03 01:17:06', 'A hot dog bun stuffed with fried noodles, frequently topped with pickles, such as beni shōga, with mayonnaise', '/wiki/File:Yakisoba_sandwich_by_kaex0r.jpg', 'Yakisoba-pan', '2013-05-03

+0

Użyj UTF-8 w bazie danych? – michaelb958

Odpowiedz

5

Możesz znaleźć odpowiedź tutaj. Nie wiem, jak zgłosić duplikat. Mysql2::Error: Incorrect string value Rails 3 UTF8

Dla Państwa wygody, pozwól mi powtórzyć moją odpowiedź


zetknąłem ten problem niedawno. Zasadniczo domyślny typ sortowania mysql to nie utf8_unicode_ci.

Wykonaj następujące czynności. Wykonaj kopię zapasową danych, jeśli musisz. musiałem usunąć bazę danych i utwórz ją

rake db:drop 
rake db:create 

Zmień sortowanie bazy danych MySQL do utf8_unicode_ci (phpMyAdmin może się przydać tutaj) Wreszcie przywrócić migracji.

rake db:migrate 

Ciesz się.

9

Prawdopodobnie twoja tabela jest ustawiona na zestaw znaków CHARACTER non Utf8. Można to zmienić w tym SQL:

ALTER TABLE `your_database_name`.`your_table` CONVERT TO CHARACTER SET utf8 
+0

Wewnątrz użycia migracji: 'ModelName.connection.execute ('ALTER TABLE model_name CONVERT TO CHARACTER SET utf8')' –

+2

Widzę ten problem, a moja tabela jest już UTF8? –

+0

@ TomRossi może być, ponieważ znajduje się poza płaszczyzną wielojęzyczną (https://dev.mysql.com/doc/refman/5.5/en/faqs-cjk.html#qandaitem-A-11-1-16) –

12

ten może być również wywołany jeśli ciąg próbujesz wstawić zawiera nieprawidłowe UTF-8 sekwencji bajtów. Na przykład, w Ruby można usunąć nieprawidłowe znaki używając

string_with_invalid_sequences.encode('utf-8', 'binary', invalid: :replace, undef: :replace, replace: '') 

String#scrub może być używany w Ruby 2.1 począwszy

string_with_invalid_sequences.scrub 
+2

I nie wiem dlaczego, ale pierwsza sugestia pomogła mi i nie działa dla mnie. – across

+0

@across - czy to działa dla Ciebie: 'string_with_invalid_sequences.scrub ('')'? – Mikey

+1

Nie, to nie działa dla mnie. – across

Powiązane problemy