2011-10-18 7 views
53

używam MySQL 5.5.10, a jego character_sets sąJak wstawić znak utf-8 mb4 (emoji w ios5) w mysql?

| character_set_client  | utf8mb4     | 
| character_set_connection | utf8mb4     | 
| character_set_database | utf8mb4     | 
| character_set_filesystem | binary      | 
| character_set_results | utf8mb4     | 
| character_set_server  | utf8mb4     | 
| character_set_system  | utf8      | 
| character_sets_dir  | /usr/share/mysql/charsets/ | 
| collation_connection  | utf8mb4_general_ci   | 
| collation_database  | utf8mb4_general_ci   | 
| collation_server   | utf8mb4_general_ci   | 

Zmieniłem utf8mb4 z utf8 dla emotikonom iOS5 użytkownika. Są one reprezentowane przez kod 4-bajtowy.

Ale kiedy wstawiłem 3 emotikony emotikonów, "???" jest w mysql.

Są to 3F 3F 3F (Hex).

Mogę dobrze przechowywać emotikony w iOS4, ale nie iOS5.

Jak mogę przechowywać emotikony iOS5?

Proszę, pomóż mi.

+1

mysql phpadmin pokazuje ???, ale aplikacja na iOS może wyświetlać emoji. –

+0

Zobacz także http://stackoverflow.com/questions/38363566/trouble-with-utf8-characters-what-i-see-is-not-what-i-stored/, zwłaszcza omówienie "znaków zapytania". –

Odpowiedz

91

4-bajtowe znaki Unicode nie są jeszcze szeroko stosowane, więc nie każda aplikacja w pełni je obsługuje. MySQL 5.5 działa poprawnie z 4-bajtowymi znakami, gdy jest poprawnie skonfigurowany - sprawdź, czy inne komponenty mogą z nimi pracować.

Oto kilka innych rzeczy, aby sprawdzić:

  • Upewnij zestawy znak domyślny wszystkie tabele i pola tekstowe są konwertowane na utf8mb4, oprócz ustawiania klient & zestawów znaków serwera, na przykład ALTER TABLE mytable charset=utf8mb4, MODIFY COLUMN textfield1 VARCHAR(255) CHARACTER SET utf8mb4,MODIFY COLUMN textfield2 VARCHAR(255) CHARACTER SET utf8mb4; i tak dalej.

    Jeśli dane znajdują się już w zestawie znaków utf8, powinien on zostać bez problemu przekształcony w utf8mb4. Jak zawsze, wykonaj kopię zapasową danych przed próbą!

  • Upewnij się również, że warstwa aplikacji ustawia zestaw znaków połączenia z bazą danych na utf8mb4. Sprawdź dokładnie, czy tak się dzieje - jeśli używasz starszej wersji biblioteki mysql wybranego przez ciebie środowiska, to może nie zostać skompilowana z obsługą utf8mb4 i nie ustawi poprawnie zestawu znaków. Jeśli nie, możesz go zaktualizować lub skompilować samodzielnie.

  • Podczas przeglądania danych za pośrednictwem klienta mysql, upewnij się, że korzystasz z komputera, na którym można wyświetlać emoji, i uruchom przed wykonaniem jakichkolwiek zapytań numer SET NAMES utf8mb4.

Po każdym poziomie aplikacji można wspierać nowe postacie, powinieneś być w stanie z nich korzystać bez korupcji.

+1

Jak zweryfikować drugi krok? – BufferStack

+0

'grep -R" SET NAMES "*' – redolent

+0

Jeśli 'textfield1' jest indeksowany, możesz mieć problemy, ponieważ indeksy są ograniczone do 767 bajtów. (Omówiono wiele wątków, szukaj "191".) –

63
+0

Witam, w kroku 3, czy muszę to zrobić dla każdej tabeli, kolumny w mojej db? lub po prostu do tabeli i kolumny Chcę przechowywać emotikony w? ponieważ w tej chwili zmieniam tylko jedną kolumnę i jak tylko ustawię 'SET character_set_results = utf8mb4;' Nie mogę wykonać żadnych zapytań na żadnych tabelach. Docieram 'Serwer wysłany przez nieznany charsetnr. Proszę zgłosić błąd! (nawet dla wybranych zapytań) – iamserious

+0

@iamserious - Nie ustawiaj tylko '... wyników', ustaw wszystkie 3 rzeczy, tak jak w' SET NAMES' lub parametrach połączenia. –

+0

Świetny samouczek! Czy wiesz, dlaczego po ustawieniu 'character-set-server = utf8mb4' w my.cnf, po uruchomieniu zapytania w bazie danych wynik jest taki, że serwer zestawu znaków jest faktycznie łaciński1? Czy wiesz, dlaczego nie aktualizujesz? Dziękuję Ci bardzo! – johnnyfittizio