web-dev-qa-db-ja.com

MySQLに漢字を挿入できません

Cookieはbig5セットを使用してエンコードされ、MySQLに挿入できません。この問題を解決するのを手伝ってくれませんか。

フィールド:username is eng、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

テーブルを作成するときは、UTF-8を使用します。

create table table_name () CHARACTER SET = utf8;

テーブルに挿入するときはUTF-8を使用します

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

続きを読む

その他

詳細コード

以下のコードはテスト済みのコードです。次の作業を行ってください。

すでにデータベースを作成している場合は、以下のコードのように変更してください。また、データベースを作成していない場合は、データベースを作成し、照合順序をutf8_unicode_ciに設定します。

また、テーブルの場合も同様に、中国語の文字を格納するテーブルフィールドの照合順序を「utf8_unicode_ci」として定義します。

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

25
Dipesh Parmar

中国語の場合、本当に必要なのはutf8mb4ではなくutf8です。これは、MySQLのutf8がサポートしていない4バイトのUTF8文字を必要とする少数の漢字が原因です。

2
Rick James

テーブル文字セットとともにutf8を使用して、テーブル列の文字セットも更新します。 MysqlワークベンチのALTERTABLEをチェックインして、漢字をサポートする列の文字セットを確認できます。

0
phvish

本当の問題は、エンコードされているCookieについてです_big5_?残りのデータはクライアント内 _utf8_としてエンコードされていますか?両方に「はい」の場合、.。

接続を_big5_に変更し、CookieのINSERT/SELECTを実行してから、utf8(または、アップグレード後はutf8mb4)に戻します。

_SET NAMES big5_を実行するか、使用しているAPIに対してcharset('big5')関数を呼び出すことは、前後に切り替えるための推奨される方法です。

(その間、_mysql_*_インターフェースから離れて_mysqli_*_またはPDOに切り替えてください。)

クライアント内のすべてが_big5_の場合、前後に切り替える必要はありません。クライアントがbig5を使用していることを宣言するだけです。注:テーブル/列もbig5であるかどうかは関係ありません。 MySQLはそれらの間で変換します。

0
Rick James