Mysql
 sql >> база данни >  >> RDS >> Mysql

Съхранени неанглийски знаци, получих '?????' - Проблем с набора от символи в MySQL

Лоши новини. Но първо проверете:

SELECT col, HEX(col)...

за да видите какво има в таблицата. Ако шестнадесетичният показва 3F , тогава данните са изчезнали. Правилно съхранен, dal символът трябва да бъде шестнадесетичен D8AF; hah е шестнадесетичен D8AD .

Какво се случи:

  • имахте данни, кодирани в utf8 (добри)
  • SET NAMES latin1 беше в сила (по подразбиране, но погрешно)
  • колоната е декларирана CHARACTER SET latin1 (по подразбиране, но погрешно)

Както сте INSERTed данните бяха преобразувани в latin1, което няма стойности за фарси знаци, така че въпросителни знаци ги замениха.

Лечението (за бъдещи `INSERTs):

  • Прекодирайте приложението си, като използвате интерфейса mysqli_* вместо отхвърления интерфейс mysql_*.
  • utf8-кодирани данни (добри)
  • mysqli_set_charset('utf8')
  • проверете дали колоната(ите) и/или таблицата по подразбиране са CHARACTER SET utf8
  • Ако показвате на уеб страница, <meta...utf8> трябва да е близо до върха.

Дискусията по-горе е за CHARACTER SET , кодиране на знаци. Сега за съвет относно COLLATION , който се използва за сравняване и сортиране.

Ако искате те да бъдат третирани еднакво:'بِسْمِ' ='بسم', тогава използвайте utf8_unicode_ci (вместо utf8_general_ci) за COLLATION .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL Използвате безопасен режим на актуализиране и сте се опитали да актуализирате таблица без WHERE

  2. MySQL ::Изберете от разделен със запетая низ

  3. Как да инсталирам pdo драйвер в php docker изображение?

  4. Разлика в датата между два записа в една и съща таблица

  5. Как да направя псевдоним на база данни в MySQL?