Can't insert Chinese character into MySQL

后端 未结 4 1686
闹比i
闹比i 2020-11-28 13:23

The cookie is encoded using the big5 set, and it cannot insert into MySQL. Could you help me to solve this problem?

Fields: username is eng, date1

相关标签:
4条回答
  • 2020-11-28 13:27

    Use UTF-8 when you create table.

    create table table_name () CHARACTER SET = utf8;

    Use UTF-8 when you insert to table

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

    Read More

    And More

    Detailed Code

    Below code is tested code please do the following its works.

    If you have already created database please ALTER it as below code. And if you didn't created database then create it and set Collation to utf8_unicode_ci

    And same for table define Collation as "utf8_unicode_ci" for table fields in which you want to store chines chars.

    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>

    See the result and step visual as below.

    enter image description here

    0 讨论(0)
  • 2020-11-28 13:48

    The real problem is about the cookie being encoded big5? Is the rest of the data in the client encoded as utf8? If 'yes' to both, ...

    Change the connection to be big5, do the INSERT/SELECT of the cookie, then change back to utf8 (or, better, utf8mb4 after upgrading).

    Executing SET NAMES big5 or calling the charset('big5') function for the API you are using is the preferred way to switch back and forth.

    (Meanwhile, get away from the mysql_* interface; switch to mysqli_* or PDO.)

    If everything in the client is big5, then there is no need to switch back and forth. Simply declare that the client is using big5. Note: It does not matter whether the table/column is also big5; MySQL will convert between them.

    0 讨论(0)
  • 2020-11-28 13:49

    update character set of table columns as well with utf8 along with table character set. May be check in Mysql workbench alter table and see character set of columns you want to support Chinese characters.

    0 讨论(0)
  • 2020-11-28 13:50

    For Chinese, you really need utf8mb4, not utf8. This is because of a small number of Chinese characters that require 4-byte UTF8 characters, which MySQL's utf8 does not support.

    0 讨论(0)
提交回复
热议问题