在閱讀O'Reilly的“高性能MySQL”時,我偶然發現了以下情況另一個常見的垃圾查詢是SET NAMES UTF8,這是一種錯誤的做事方式(它不會改變客戶端庫的字符集;它只影響服務器)。我有點困惑,因為我曾經在每個腳本的頂部放置“SET NAMES utf8”讓db知道我的查詢是utf8編碼的。任何人都可以評論上述引用,或者,更正式地說,您的建議/最佳實踐是什么,以確保我的數據庫工作流是unicode意識。如果這是相關的,我的目標語言是php和python。
3 回答

繁花不似錦
TA貢獻1851條經驗 獲得超4個贊
mysql_set_charset()將是一個選擇 - 但一個選項僅限于ext/mysql。對于ext/mysqli它是mysqli_set_charset和你需要指定一個連接參數。PDO::mysql
由于使用此函數會導致MySQL API調用,因此應該將其視為比發出查詢快得多。
在性能方面,確保腳本和MySQL服務器之間基于UTF-8的通信的最快方法是正確設置MySQL服務器。由于SET NAMES x是等同于
SET character_set_client = x;
SET character_set_results = x;
SET character_set_connection = x;
而在SET character_set_connection = x內部也執行,SET collation_connection = <<default_collation_of_character_set_x>>您也可以靜態設置這些服務器變量my.ini/cnf。
請注意在同一MySQL服務器實例上運行的其他應用程序可能存在的問題,并且需要其他一些字符集。
添加回答
舉報
0/150
提交
取消