设置使用的字符集的MySQLi设置使用的字符集的MySQLi(Set character set u

2019-05-16 19:02发布

我在阿拉伯语从MySQLi的MySQL表获取数据。 所以我通常在程序风格使用:

mysql_query("SET NAMES 'utf8'"); 
mysql_query('SET CHARACTER SET utf8'); 

现在,我使用的是面向对象的风格,所以我想看看是否有什么我可以设置,而不是上面?

我只找到这个PHP手册中,所以我做到了,但有关名称设置为UTF-8呢?

$mysqli->set_charset("utf8");

Answer 1:

一样的:

$ mysqli->查询( “集名称 'UTF8'”);

从手册:

这是改变字符集的首选方式。 不推荐使用的mysqli ::查询()执行SET NAMES ..。

$mysqli->set_charset("utf8"); 仅仅是不够的,让mysqli的DB驱动程序做的事你。



Answer 2:

您应该使用

$mysqli->set_charset("utf8");

不要使用SET NAMESSET CHARACTER SET使用的MySQLi时明确,肯定不喜欢这个问题提问者在这里使用这两个原本是。 原因这是一个坏主意:

  • 调用SET CHARACTER SET utf8SET NAMES utf8实际上只是撤销了一些工作SET NAMES做了 。
  • PHP手册中明确地警告我们使用mysqli_set_charset ,而不是SET NAMES

    这是改变字符集的首选方式。 使用mysqli_query()来设置(如SET NAMES UTF8)不推荐。 更多信息请参见MySQL的字符集的概念部分。

  • 引擎盖下, mysqli_set_charset是只为一个包装mysql_set_character_set从MySQL C API(或其mysqlnd当量)。 望着文档该功能 ,我们可以看到它之间的区别SET NAMES

    该功能的工作方式与SET NAMES语句,但也设置的值mysql->charset ,从而影响所使用的字符集mysql_real_escape_string()

    换句话说, $mysqli->set_charset('foo')将尽一切SET NAMES foo确保mysqli_real_escape_string尊重新的编码。 诚然,如果你只使用像拉丁1编码和UTF-8是严格扩展ASCII(也就是,这正是编码所有的ASCII字符串,因为他们将在ASCII编码),然后使用SET NAMES ,而不是set_charset不会打破任何东西。 但是,如果你使用更不寻常的编码方式,如GBK,那么你可能最终错乱你的字符串甚至引入绕过SQL注入漏洞mysqli_real_escape_string

这是很好的这样的做法是只使用set_charset ,而不是SET NAMES 。 没有什么是SET NAMES确实是set_charset不和set_charset避免风险mysqli_real_escape_string行为不当(甚至不安全的)。



Answer 3:

您可以使用此。 它真的很好了mysqli的字符集

$dbhost     = "localhost";
$dbuser     = "root";
$dbpass     = "dbpass";
$dbname     = "dbname";

$conn = mysqli_connect($dbhost,$dbuser,$dbpass,$dbname);
mysqli_query($conn,"SET CHARACTER SET 'utf8'");
mysqli_query($conn,"SET SESSION collation_connection ='utf8_unicode_ci'");


Answer 4:

对于程序的风格爱好者。

// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);

/* change character set to utf8 */
mysqli_set_charset($conn,"utf8");


Answer 5:

mysqli_query($conn,"SET NAMES 'latin5'");

$康恩=连接字符串



文章来源: Set character set using MySQLi
标签: php mysqli