Почему PHP / MySQL вставляет мои китайские символы по-другому? - PullRequest
3 голосов
/ 12 августа 2010

Gday All,

У меня непонятная проблема при попытке вставить некоторые китайские символы в мою базу данных MySQL из PHP с помощью mysqlnd.

У меня есть форма, которая принимает некоторые детали, например, внутреннее имя, внешнее имя, имя выстрела и т. Д. *

Я ввожу «语言 测试» (Языковое тестирование) во все три поля формы.

Я отправляю информацию, используя внутреннее соединение, например:

UPDATE table1 INNER JOIN table2(table1.name = "value1", table2.ext_name = "value2", table2.ext_name = "value3")

Где для обеих таблиц и соответствующих полей установлено значение utf8_general_ci (я также пробовал utf8_bin)

Вставка работает правильно, однако я вижу два значения, вставленных в базу данных.

В первой таблице я вижу "è¯è¨ € ‹µ‹ è¯ • ", а во второй таблице я вижу" 语言 测试 ".

Что может быть причиной того, что моя вставка абсолютно одинаковых данных из одной и той же формы php по-разному отображается в двух отдельных таблицах базы данных MySQL?

Ответы [ 2 ]

3 голосов
/ 12 августа 2010
  1. Попробуйте сохранить все файлы в UTF-8 без спецификации.

    См. метка порядка байтов (BOM)

  2. Выполните с MySQL следующие операции:

    SET NAMES UTF-8
    SET CHARACTER SET UTF-8
    

    См. 10.1.5.Настройка набора символов и сопоставления для приложений

  3. В корневой папке создайте файл .htaccess со следующим содержимым:

    AddDefaultCharset utf-8
    AddCharset utf-8 *
    <IfModule mod_charset.c>
      CharsetSourceEnc utf-8
      CharsetDefault utf-8
    </IfModule>
    

    См. Настройка кодировкив htaccess

2 голосов
/ 12 августа 2010

В MySQL вам нужно не только установить кодировку символов таблицы (или ее столбцов), но вы также должны установить кодировку символов вашего соединения между PHP и базой данных, что делается при каждом подключении.

В PHP вы можете использовать mysql_set_charset(), или, если вы используете PDO, включите charset=UTF-8 в имя вашего источника данных.

Это заменяет (и PHP рекомендует это в пользу) SET NAMES в MySQL. В более старых версиях PHP вы использовали команду MySQL SET NAMES UTF8 каждый раз при подключении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...