Сохранение китайского символа в oracle с использованием ajax не работает

Я хочу хранить китайские символы с html-страницы в базе данных оракула, используя концепцию ajax.

Front end : HTML & PHP.
Back end  : Oracle 11G.

Характеристики Oracle:

NLS_LANGUAGE = AMERICA
NLS_CHARACTERSET = WE8MSWIN1252
NLS_NCHAR_CHARACTERSET = AL16UTF16

когда я пытаюсь сохранить китайский символ, используя форму, он сохраняет его успешно, если я пытаюсь сохранить через ajax, я получаю странные символы в базе данных.

На странице ajax я добавил эту строку:

header("Content-type: text/html; charset=utf-8");

а на странице html добавлена ​​следующая строка:

<meta http-equiv="Content-type" value="text/html; charset=utf-8">

Я просмотрел множество предложений, но не повезло.

Пожалуйста, посоветуйте мне, как это решить.

Спасибо заранее.

Код: HTML-код.

<html>
  <head>
    <meta http-equiv="Content-type" value="text/html; charset=utf-8">
    <title>Test</title>
    <script src="jquery.min.js"></script>
    <script>
    function addForm()
    {
      var english=document.getElementById('txt_english').value;
      var id=document.getElementById('txt_id').value;
      var chinese=document.getElementById('txt_chinese').value;
      $.ajax({
          type: "POST",
          async: false,
          url: "ajax/ajax_add_form.php",
          data:
          {
            english: english,
            chinese: chinese,
            id: id
          }
        }).done(
        function (html){
            alert(html);
        });
      }
    </script>
  </head>
  <body>
    <input type='text' name='txt_id' id='txt_id' value='' /><br>
    <input type='text' name='txt_english' id='txt_english' value='' />                          
    <input type='text' name='txt_chinese' id='txt_chinese' value='' /> 
    <button type="button" onclick="addForm()">Click Me!</button> 
  </body>
</html>

Код PHP: ajax/ajax_add_form.php

<?php
header("Content-type: text/html; charset=utf-8");
include("../config.php");
extract($_REQUEST);
$sql=oci_parse($conn,"insert into  test(id,english,chinese1)values(:id,:english,:chinese)");
oci_bind_by_name($sql, ':id', $id); 
oci_bind_by_name($sql, ':english', $english); 
oci_bind_by_name($sql, ':chinese', $chinese);
oci_execute($sql);
echo "success";
?>

введите описание изображения здесь

Мой вопрос:

Даже если он хранится в другом формате, когда я возвращаюсь на веб-страницу, он работает и отображается правильно.

Моя проблема - это еще один инструмент под названием agile, который также получает доступ к тем же данным, поэтому преобразование не происходит, он показывает, какой формат данных хранится в базе данных.

Следовательно, я хочу хранить точно по мере ввода пользователя, не нужно никакого преобразования.

Ответ 1

Убедитесь, что вы установили соединение OCI для использования UTF-8:

oci_connect($username, $password, $connection_string, 'UTF8');

Это сообщает Oracle кодировку кодировки, которую вы отправляете и ожидаете получить. Затем Oracle берет на себя "перевод" между сервером и клиентом автоматически. Из документации (внимание мое):

Определяет набор символов, используемый библиотеками Oracle Client. Набор символов не обязательно должен соответствовать набору символов, используемому базой данных. Если это не соответствует, Oracle сделает все возможное, чтобы преобразовать данные в и из набора символов базы данных. В зависимости от набора символов это может не дать полезные результаты. Преобразование также добавляет некоторые накладные расходы.

Единственное, что вам нужно позаботиться, это то, что ваше приложение PHP рассматривает все как UTF-8.

Ответ 2

Try

<meta http-equiv="content-type" content="text/html; charset=UTF-8" />

вместо

<meta http-equiv="Content-type" value="text/html; charset=utf-8">