Файл cookie кодируется с использованием набора big5 и не может быть вставлен в MySQL. Не могли бы вы помочь мне решить эту проблему?

Поля: username - это англ, date1 - это дата, reason1 - это китайский символ.

$reason1 = $_COOKIE["reason"];
$sql2="INSERT INTO 
    attendance_count(username,date,count_time,appendix) 
    VALUES ('$username','$date1','0','$reason1')";
mysql_query($sql2);
10
user1902899 22 Янв 2013 в 14:24

4 ответа

Лучший ответ

Используйте UTF-8 при создании таблицы.

create table table_name () CHARACTER SET = utf8;

Используйте UTF-8 при вставке в таблицу

set username utf8; INSERT INTO table_name (ABC,VAL);

Прочитайте больше

И больше

Подробный код

Ниже код тестируемый код, пожалуйста, выполните следующие его работы.

Если вы уже создали базу данных, пожалуйста, измените ее, как показано ниже. А если вы не создали базу данных, создайте ее и установите для параметра Collation значение utf8_unicode_ci.

И то же самое для таблицы определите Collation как "utf8_unicode_ci" для полей таблицы, в которых вы хотите хранить символы chines.

ALTER DATABASE `stackoverflow` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

CREATE TABLE `stackoverflow`.`chines`
(
    `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
    `words` VARCHAR( 200 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL
) ENGINE = InnoDB;
<?php

    define('HOSTNAME', 'localhost');
    define('USERNAME', 'root');
    define('PASSWORD', '');
    define('DATABASE', 'stackoverflow');

    $dbLink = mysql_connect(HOSTNAME, USERNAME, PASSWORD)or die(mysql_error());
    mysql_query("SET character_set_results=utf8", $dbLink)or die(mysql_error());
    mb_language('uni'); 
    mb_internal_encoding('UTF-8');
    mysql_select_db(DATABASE, $dbLink)or die(mysql_error());
    mysql_query("set names 'utf8'",$dbLink)or die(mysql_error());

    if(isset($_POST['addWord']))
    {
        mysql_query("SET character_set_client=utf8", $dbLink)or die(mysql_error());
        mysql_query("SET character_set_connection=utf8", $dbLink)or die(mysql_error());

        $sql_query = "INSERT INTO chines(words) VALUES('".$_POST['words']."')";
        mysql_query($sql_query, $dbLink)or die(mysql_error());
    }

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
    <title></title>
</head>
<body>
    <?php
        mysql_query("SET character_set_results=utf8", $dbLink);
        $sql_query = "SELECT * FROM chines";
        $dbResult = mysql_query( $sql_query, $dbLink)or die(mysql_error());

    ?>

    <form action="" method="post">

        <p>Word : <input type="text" name="words" /></p>
        <p><input type="submit" name="addWord" /></p>

    </form>
    <?php
        while($row = mysql_fetch_assoc($dbResult))
        {
            echo $row['words']. '<br />';
        }
    ?>
</body>
</html>

Смотрите результат и шаг визуально, как показано ниже.

enter image description here

26
Dipesh Parmar 23 Янв 2013 в 05:07

Обновить набор символов столбцов таблицы, а также utf8 вместе с набором символов таблицы. Может быть, проверьте в таблице изменения Mysql Workbench и посмотрите набор символов столбцов, которые вы хотите поддерживать китайские символы.

0
phvish 13 Апр 2017 в 10:23

Для китайцев вам действительно нужно utf8mb4, а не utf8. Это связано с небольшим количеством китайских символов, для которых требуются 4-байтовые символы UTF8, которые MySQL utf8 не поддерживает.

2
Rick James 24 Июл 2016 в 02:02

Реальная проблема в том, что cookie кодируется big5? Остальные данные на клиенте закодированы как utf8? Если «да» обоим, ...

Измените соединение на big5, выполните INSERT / SELECT файла cookie, затем вернитесь к utf8 (или, лучше, utf8mb4 после обновления).

Выполнение SET NAMES big5 или вызов функции charset('big5') для используемого вами API - это предпочтительный способ переключения туда и обратно.

(Между тем, отойдите от интерфейса mysql_*; переключитесь на mysqli_* или PDO.)

Если все в клиенте big5, тогда нет необходимости переключаться назад и вперед. Просто объявите, что клиент использует big5. Примечание: не имеет значения, является ли таблица / столбец тоже большой5; MySQL будет конвертировать между ними.

0
Rick James 7 Дек 2016 в 19:25