sql >> Database teknologi >  >> RDS >> Mysql

Gemte ikke-engelske tegn, fik '?????' - Problem med MySQL Character Set

Dårlige nyheder. Men først, dobbelttjek:

SELECT col, HEX(col)...

for at se, hvad der står i tabellen. Hvis hex viser 3F , så er dataene væk. Korrekt gemt, dal karakter skal være hex D8AF; hah er hex D8AD .

Hvad skete der:

  • du havde utf8-kodede data (godt)
  • SET NAMES latin1 var i kraft (standard, men forkert)
  • kolonnen blev erklæret CHARACTER SET latin1 (standard, men forkert)

Som du INSERTed dataene blev de konverteret til latin1, som ikke har værdier for farsi-tegn, så spørgsmålstegn erstattede dem.

Kuren (for fremtidige `INDSÆTNINGER):

  • Omkod din applikation ved hjælp af mysqli_*-grænsefladen i stedet for den forældede mysql_*-grænseflade.
  • utf8-kodede data (godt)
  • mysqli_set_charset('utf8')
  • tjek, at kolonnen(erne) og/eller tabellens standard er CHARACTER SET utf8
  • Hvis du viser på en webside, <meta...utf8> skal være tæt på toppen.

Diskussionen ovenfor handler om CHARACTER SET , indkodning af tegn. Nu til et tip om COLLATION , som bruges til at sammenligne og sortere.

Hvis du ønsker at disse skal behandles ens:'بِسْمِ' ='بسم', så brug utf8_unicode_ci (i stedet for utf8_general_ci) til COLLATION .




  1. Hvordan vælger man to kolonner som én?

  2. php - Gør det muligt for brugere at foretrukne indlæg

  3. Er det muligt at angive skemaet, når der oprettes forbindelse til postgres med JDBC?

  4. Indsætte flere tabulator-separerede tekstfiler i MySQL med Python?