首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在MySQL中插入中文字符

问无法在MySQL中插入中文字符
EN

Stack Overflow用户
提问于 2013-01-22 18:24:51
回答 4查看 51.5K关注 0票数 12

cookie使用big5集进行编码,并且无法插入到MySQL中。你能帮我解决这个问题吗?

字段:username为英文,date1为日期,reason1为中文。

代码语言:javascript
复制
$reason1 = $_COOKIE["reason"];
$sql2="INSERT INTO 
    attendance_count(username,date,count_time,appendix) 
    VALUES ('$username','$date1','0','$reason1')";
mysql_query($sql2);
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-01-22 18:28:41

创建表时使用UTF-8。

代码语言:javascript
复制
create table table_name () CHARACTER SET = utf8;

插入到表时使用UTF-8

代码语言:javascript
复制
set username utf8; INSERT INTO table_name (ABC,VAL);

详细代码

下面的代码是测试代码,请做以下它的工作。

如果你已经创建了数据库,请按照下面的代码修改它。如果您没有创建数据库,则创建它并将排序规则设置为utf8_unicode_ci

和same for table定义排序规则为"utf8_unicode_ci“,用于存储chines字符的表字段。

代码语言:javascript
复制
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;
代码语言:javascript
复制
<?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>

查看结果和步骤可视化,如下所示。

​

​

票数 29
EN

Stack Overflow用户

发布于 2016-07-24 10:02:29

对于中文来说,你真的需要utf8mb4,而不是utf8。这是因为少数中文字符需要4字节的UTF8字符,而MySQL的utf8不支持这些字符。

票数 4
EN

Stack Overflow用户

发布于 2016-12-08 03:25:54

真正的问题是cookie被编码为big5吗?客户端中的其余数据是否编码为utf8?如果两者都是肯定的,..。

将连接更改为big5,执行cookie的INSERT/SELECT,然后更改回utf8 (或者,更好的做法是在升级后更改为utf8mb4 )。

对于正在使用的接口,执行SET NAMES big5或调用charset('big5')函数是来回切换的首选方式。

(同时,远离mysql_*界面;切换到mysqli_*或PDO。)

如果客户端中的所有内容都是big5,那么就不需要来回切换。只需声明客户端正在使用big5。注意:表/列是否也是big5并不重要;MySQL将在它们之间进行转换。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14456313

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档