sql >> Database >  >> RDS >> Mysql

Opgeslagen niet-Engelse karakters, heb '?????' - Probleem met MySQL-tekenset

Slecht nieuws. Maar controleer eerst:

SELECT col, HEX(col)...

om te zien wat er in de tabel staat. Als de hex 3F . toont , dan zijn de gegevens weg. Correct opgeslagen, de dal teken moet hexadecimaal zijn D8AF; hah is hex D8AD .

Wat is er gebeurd:

  • u had utf8-gecodeerde gegevens (goed)
  • SET NAMES latin1 was van kracht (standaard, maar verkeerd)
  • de kolom is verklaard CHARACTER SET latin1 (standaard, maar fout)

Zoals je INSERTed de gegevens, het is geconverteerd naar latin1, die geen waarden heeft voor Farsi-tekens, dus vraagtekens hebben ze vervangen.

De remedie (voor toekomstige `INSERT's):

  • Hercodeer uw toepassing met de mysqli_*-interface in plaats van de verouderde mysql_*-interface.
  • utf8-gecodeerde gegevens (goed)
  • mysqli_set_charset('utf8')
  • controleer of de standaardkolom(men) en/of tabel CHARACTER SET utf8 zijn
  • Als u op een webpagina weergeeft, <meta...utf8> zou bovenaan moeten staan.

De bovenstaande discussie gaat over CHARACTER SET , de codering van tekens. Nu voor een tip over COLLATION , die wordt gebruikt voor het vergelijken en sorteren.

Als u wilt dat deze gelijk worden behandeld:'بِسْمِ' ='بسم', gebruik dan utf8_unicode_ci (in plaats van utf8_general_ci) voor de COLLATION .




  1. Startnummer automatisch verhogen wijzigen?

  2. Android Room - Lijst met objecten in een object verwerken en resultaten opvragen

  3. Geen Entity Framework-provider gevonden voor 'MySql.Data.MySqlClient' ADO.NET-provider

  4. Waarom is SELECT zonder kolommen geldig?