PHP Conference Japan 2024

mysql_set_charset

(PHP 5 >= 5.2.3)

mysql_set_charset设置客户端字符集

警告

此扩展在 PHP 5.5.0 中已弃用,并在 PHP 7.0.0 中移除。应改用 MySQLiPDO_MySQL 扩展。另请参阅 MySQL:选择 API 指南。此函数的替代方案包括

描述

mysql_set_charset(字符串 $charset, 资源 $link_identifier = NULL): 布尔值

设置当前连接的默认字符集。

参数

charset

有效的字符集名称。

link_identifier

MySQL 连接。如果未指定链接标识符,则假定为 mysql_connect() 最近打开的链接。如果找不到此类链接,它将尝试创建一个链接,就像 mysql_connect() 已被调用且没有任何参数一样。如果未找到或建立连接,则会生成 E_WARNING 级别错误。

返回值

成功时返回 true,失败时返回 false

备注

注意:

此函数需要 MySQL 5.0.7 或更高版本。

注意:

这是更改字符集的首选方法。不建议使用 mysql_query() 来设置它(例如 SET NAMES utf8)。有关更多信息,请参阅 MySQL 字符集概念 部分。

添加注释

用户贡献的注释 3 条注释

33
Ashus
16 年前
我需要从一个特定的网络托管服务中访问数据库。页面以 UTF-8 编码,并且表单接收到的数据应插入数据库而不更改编码。数据库也使用 UTF-8。

此处 SET character set 'utf8' 或 SET names 'utf8' 均无法正常工作,因此此解决方法确保所有变量都设置为 utf-8。

<?php

// ... (创建与 mysql 的连接) ...

mysql_query("SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'", $conn);

$re = mysql_query('SHOW VARIABLES LIKE "%character_set%";')or die(mysql_error());
while (
$r = mysql_fetch_assoc($re)) {var_dump ($r); echo "<br />";} exit;

?>

现在所有重要的变量都是 utf-8,我们可以安全地使用 INSERT 或 SELECT 与 mysql_escape_string($var) 而无需任何编码函数。
15
nabeelmoidu at gmail dot com
16 年前
以下是如何使用此功能的示例

我正在使用来自 http://oss.oracle.com/projects/php/ 的 PHP 5.2.5

我想将阿拉伯字符作为 UTF8 存储在数据库中,正如 Google 搜索结果中建议的那样,我尝试使用

mysql_query("SET NAMES 'utf8'");



mysql_query("SET CHARACTER SET utf8 ");

但它不起作用。

使用以下方法,它完美地工作了

$link = mysql_connect('localhost', 'user', 'password');
mysql_set_charset('utf8',$link);

设置此项后,我们无需手动使用 utf8_encode() 或其他函数将文本编码为 utf。阿拉伯语(或任何 UTF8 支持的)文本可以直接传递给数据库,并且 PHP 会自动将其转换。
例如。
<?php
$link
= mysql_connect('localhost', 'user', 'password');
mysql_set_charset('utf8',$link);
$db_selected = mysql_select_db('emp_feedback', $link);
if (!
$db_selected) { die ('数据库访问错误:' . mysql_error());}
$query = "INSERT INTO feedback ( EmpName, Message ) VALUES ('$_empName','$_message')";
mysql_query($query) or die('错误,反馈插入数据库失败');
?>
请注意,此处 $_empName 以英语存储,而 $_message 以阿拉伯语存储。
1
Janez R.
17 年前
我认为这是 PHP 以前版本中的等效项(尽管添加了一些参数验证和默认值!)
<?
if (!function_exists('mysql_set_charset')) {
function mysql_set_charset($charset,$dbh)
{
return mysql_query("set names $charset",$dbh);
}
}
?>
To Top