使用big5集编码cookie,它无法插入MySQL。你能帮我解决这个问题吗?
字段:username
为eng,date1
为日期,reason1
为中文字符。
$reason1 = $_COOKIE["reason"];
$sql2="INSERT INTO
attendance_count(username,date,count_time,appendix)
VALUES ('$username','$date1','0','$reason1')";
mysql_query($sql2);
答案 0 :(得分:23)
创建表时使用 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”,用于表示要存储中文字符的表字段。
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>
查看结果和步骤,如下所示。
答案 1 :(得分:2)
对于中文,您确实需要utf8mb4
,而不是utf8
。这是因为少数中文字符需要4字节的UTF8字符,MySQL utf8
不支持这些字符。
答案 2 :(得分:0)
真正的问题是关于编码的cookie big5
?客户端中的其余数据是否编码为utf8
?如果“是”&#39;两者,......
将连接更改为big5
,执行Cookie的INSERT
/ SELECT
,然后更改回utf8(或更好,升级后的utf8mb4)。
执行SET NAMES big5
或为您正在使用的API调用charset('big5')
函数是来回切换的首选方式。
(同时,离开mysql_*
界面;切换到mysqli_*
或PDO
。)
如果客户端中的所有内容都是big5
,则无需来回切换。只需声明客户端正在使用big5。注意:表/列是否也是big5并不重要; MySQL将在它们之间进行转换。
答案 3 :(得分:0)
更新表列的字符集以及utf8和表字符集。可以在Mysql workbench alter table中查看并查看要支持中文字符的列的字符集。