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,我們可以安全地使用帶有 mysql_escape_string($var) 的 INSERT 或 SELECT,而無需任何編碼函數。
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() 或其他函式手動將文字編碼為 UTF8。阿拉伯文(或任何 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