sql >> Database >  >> RDS >> Mysql

vreemde karaktercodering van opgeslagen gegevens, oud script laat ze goed zien, nieuwe niet

Kortom, omdat dit al duizend keer eerder is besproken:

  1. PHP bevat een string, zeg "漢字" , gecodeerd in UTF-8. De bytes hiervoor zijn E6 BC A2 E5 AD 97 .
  2. Het verzendt deze string via een databaseverbinding die is ingesteld op latin1 .
  3. De database ontvangt de bytes E6 BC A2 E5 AD 97 , denkend dat die latin1 vertegenwoordigen tekens.
  4. De database slaat de karakters op æ¼¢å­ (de tekens die E6 BC A2 E5 AD 97 verwijst naar in latin1 ).
  5. Het omgekeerde proces zorgt ervoor dat PHP dezelfde bytes ontvangt, die het vervolgens behandelt als UTF-8. De roundtrip werkt prima voor PHP, ook al behandelt de database de karakters niet zoals het hoort.

Het probleem hier was dus dat de databaseverbinding verkeerd was ingesteld toen de gegevens in de database werden ingevoerd. U moet de gegevens in de database omzetten naar de juiste tekens. Probeer dit:

SELECT CONVERT(BINARY CONVERT(field_name USING latin1) USING utf8) FROM table_name

Misschien utf8 is niet wat je hier nodig hebt, experimenteer. Als dat werkt, verander dit dan in een UPDATE verklaring om de gegevens permanent bij te werken.



  1. Uw ultieme gids voor SQL Join:INNER JOIN - Deel 1

  2. SQL Unieke beperking voor meerdere tabellen

  3. hoe de opgeslagen procedure in SQL Developer uit te voeren?

  4. Bindende parameters voor Oracle Dynamic SQL