Mysql
 sql >> Baza danych >  >> RDS >> Mysql

java.sql.SQLException:Nieprawidłowa wartość ciągu:'\xF0\x9F\x91\xBD\xF0\x9F...'

To, co masz, to POZAZIEMSKI OBCY (U+1F47D) i ZŁAMANE SERCE (U+1F494) które nie znajdują się na podstawowej płaszczyźnie wielojęzycznej. Nie mogą być nawet reprezentowane w java jako jeden znak, "👽💔".length() ==4 . Na pewno nie są to znaki zerowe i jeśli nie używasz czcionek, które je obsługują, zobaczysz kwadraty.

utf8 MySQL obsługuje tylko podstawowy samolot wielojęzyczny i musisz użyć utf8mb4 zamiast tego :

W przypadku znaku uzupełniającego utf8 nie może w ogóle przechowywać znaku, podczas gdy utf8mb4 wymaga czterech bajtów do jego przechowywania. Ponieważ utf8 nie może w ogóle przechowywać znaku, nie masz żadnych dodatkowych znaków w kolumnach inutf8 i nie musisz się martwić o konwersję znaków lub utratę danych podczas aktualizacji danych utf8 ze starszych wersji MySQL.

Więc aby obsługiwać te znaki, twój MySQL musi mieć 5.5+ i musisz użyć utf8mb4 wszędzie. Kodowanie połączenia musi być utf8mb4 , zestaw znaków musi mieć postać utf8mb4 a zestawienie musi być utf8mb4 . W przypadku javy to wciąż tylko "utf-8" , ale MySQL wymaga rozróżnienia.

Nie wiem, jakiego sterownika używasz, ale niezależnym od sterownika sposobem ustawienia zestawu znaków połączenia jest wysłanie zapytania:

SET NAMES 'utf8mb4'

Zaraz po nawiązaniu połączenia.

Zobacz też dla Connector/J :

14.14:Jak mogę używać 4-bajtowego UTF8, utf8mb4 ze złączem/J?

Aby użyć 4-bajtowego UTF8 ze złączem/J, skonfiguruj serwer MySQL withcharacter_set_server=utf8mb4. Connector/J użyje wtedy tego ustawieniao ile characterEncoding nie została ustawiona w ciągu połączeń . Jest to równoważne automatycznemu wykrywaniu zestawu znaków.

Dostosuj również kolumny i bazę danych:

var1 varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL

Ponownie, Twoja wersja MySQL musi być stosunkowo aktualna, aby obsługiwać utf8mb4.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak utworzyć nowy diagram bazy danych za pomocą środowiska pracy MySQL?

  2. 60 milionów wpisów, wybierz wpisy z określonego miesiąca. Jak zoptymalizować bazę danych?

  3. Odmowa dostępu dla użytkownika 'root'@'localhost' (przy użyciu hasła:TAK) (Mysql::Błąd)

  4. connect ECONNREFUSED - węzeł js , sql

  5. Jakie są różnice między INSERT i UPDATE w MySQL?