【问题标题】:Cyrillic symbols in INSERT queryINSERT 查询中的西里尔符号
【发布时间】:2011-09-08 03:13:01
【问题描述】:
$dblocation = "localhost";
$dbname = "xx";
$dbuser = "xx";
$dbpasswd = "xx";
$dbcnx = @mysql_connect($dblocation,$dbuser,$dbpasswd);
mysql_select_db($dbname, $dbcnx);
mysql_query("SET NAMES utf8");
mysql_query("SET COLLATION_CONNECTION=utf8_bin"); 
$name = mysql_real_escape_string($name);
$about = mysql_real_escape_string($about);
mysql_query("INSERT INTO votes 
(name, about, active) VALUES('".$name."', '".$about."', 1 ) ") 
or die(mysql_error());

当 $name 和 $about 不是西里尔字母时,它可以正常工作。但是当它是西里尔文时 - 脚本只需添加一行空白名称和关于字段。做什么?
DB 是 UTF-8,使用带有西里尔符号的 phpMyAdmin 手动添加行效果很好,PHP 脚本是 UTF-8,一切都是 UTF-8。

【问题讨论】:

  • 试试 mysqli_set_charset($dbcnx, 'utf8'); $dbcnx = @mysql_connect($dblocation,$dbuser,$dbpasswd); (或 mysql_set_charset 如果你有旧的 PHP 版本)
  • 向我们展示SHOW CREATE TABLE votes 命令的结果。
  • @Johan,错了,SET NAMES utf8 这只是他需要的。
  • $name 来自哪里?如果来自网页,那么您应该检查带有表单的页面的Content-type 是否设置为text/html;charset=UTF-8 之类的东西(可以在HTTP 标头或元标记中更改)。看看this question 在 PHP 中设置编码。

标签: php mysql character-encoding collation


【解决方案1】:

你应该有:

1.header ("Content-Type: text/html; charset=utf-8");<meta http-equiv="content-type" content="text/html; charset=utf-8" />

2.mysql_query("SET NAMES 'utf8'");

3.将文件的编码设置为utf-8,不带BOM

【讨论】:

    【解决方案2】:

    指定与mysql_set_charset(...') 的连接应使用的字符集。见http://php.net/manual/en/function.mysql-set-charset.php

    【讨论】:

    【解决方案3】:

    我已经处理了很多西里尔字母,这确实很棘手。到目前为止,根据我的经验,我没有使用任何 COLLATION_CONNECTION。正如你所做的那样,我所做的只是将所有可能的文件放在 utf8 中。然后我放入“utf8_unicode_ci”的数据库中的字段,我只使用 SET NAMES 参数来设置连接编码。这应该足够了。请注意,Set 名称可能很棘手,因为只有一个空格,它不起作用。我用:

    define("DBENCODING", "utf8");
    mysql_query("SET NAMES '".DBENCODING."'", $this->connection);
    

    希望我能帮上忙。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-19
      • 1970-01-01
      • 2016-05-10
      • 1970-01-01
      • 1970-01-01
      • 2011-12-17
      • 2014-06-01
      • 1970-01-01
      相关资源
      最近更新 更多