【问题标题】:Can't insert Chinese character into MySQL无法将汉字插入MySQL
【发布时间】:2013-01-05 13:13:24
【问题描述】:

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);

【问题讨论】:

标签: php javascript mysql character-encoding


【解决方案1】:

更新表格列的字符集以及 utf8 以及表格字符集。可以在 Mysql 工作台 alter table 中检查并查看要支持汉字的列的字符集。

【讨论】:

    【解决方案2】:

    真正的问题是关于被编码的 cookie big5客户端中的其余数据是否编码为utf8?如果两者都“是”,...

    把连接改成big5,做cookie的INSERT/SELECT,然后改回utf8(或者升级后更好的utf8mb4)。

    为您正在使用的 API 执行 SET NAMES big5 或调用 charset('big5') 函数是来回切换的首选方式。

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

    如果客户端中的所有内容都是big5,则无需来回切换。只需声明客户端正在使用 big5。注意:table/column是否也是big5无关紧要; MySQL 将在它们之间进行转换。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • mysql 在这里说(1115, "Unknown character set: 'utf8mb4'"),mysql-v5.1.71。
      • 那么你必须至少更新到 5.5。 (5.5.3 是 utf8mb4 可用的时候——大约十年前)。
      • 一位朋友发给我这个并在谷歌搜索数小时后救了我,谢谢
      【解决方案4】:

      创建表时使用 UTF-8

      create table table_name () CHARACTER SET = utf8;

      插入表格时使用 UTF-8

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

      Read More

      And More

      详细代码

      以下代码是经过测试的代码,请按以下方式操作。

      如果您已经创建了数据库,请将其更改为以下代码。 如果您没有创建数据库,则创建它并将 Collat​​ion 设置为 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>

      查看结果和步骤视觉如下。

      【讨论】:

      • mysqli_query("SET character_set_results=utf8", $db);
      • 或者您可以通过更改 phpmyadmin 中的表字段并将类型设置为 UTF-8...example .. ALTER TABLE t MODIFY col1 CHAR(50) CHARACTER SET utf8;
      • mysql_query("SET character_set_client=utf8", $dbLink); mysql_query("SET character_set_connection=utf8", $dbLink);
      • tanzilo.com/2008/10/13/… 请按照此链接中的每一步操作,这将有助于我同时编写代码。
      • @DipeshParmar,嗨,Dipesh,它在 mysql 数据库中工作正常,我想在 oracle 数据库中使用 php 做同样的概念。我需要做什么?请帮我解决这个问题。我提出了问题,请看link
      猜你喜欢
      • 2015-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-29
      相关资源
      最近更新 更多