我將我的php應用程序移至新服務器。我使用mysql5分貝。當我更新或插入某些數據庫時,每個"
和-
標誌更改爲?
。我使用SET NAMES UTF8
和SET CHARACTER SET
,但它不起作用。有任何想法嗎?mysql和編碼
mysql和編碼
回答
我的猜測是,你從它轉化成"
有角度的漂亮報價有些文本編輯器粘貼,並且將您的-
成MDASH,這是造成兩者被表示爲?
。
雖然您將數據庫設置爲接受UTF8字符,但您可能未設置Web服務器/ PHP以接受這些字符。嘗試玩mbstring
函數,但請檢查以確保您未使用傾斜的引號或破折號。
SET NAMES UTF8
應該在每個頁面上使用,當選擇以及更新或插入時。
實際上,每次連接到數據庫時都必須使用此查詢。只需添加它即可連接代碼。
它是everywere,我有我的db_connect.php文件,我包括無處不在。 – qqryq 2010-05-13 11:31:30
您需要UTF-8全部貫通,使智能引號和破折號的方式(「」 - )其他非ASCII字符和可靠地工作:
(1)確保瀏覽器會將您編碼成UTF字符-8。通過聲明,包括形式爲UTF-8的頁面操作:
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
...
(忽略<form accept-encoding>
,這並不在IE右鍵工作)
(2)與原始字節PHP交易和不關心他們在編碼什麼,但數據庫確實在意,所以你必須告訴它什麼編碼來自PHP的字節進來。這就是SET NAMES
正在做什麼,但mysql_set_charset可能更可取。
(3)一旦正確的字符到達數據庫,它將需要將它們存儲在Unicode編碼中以確保所有字符都適合。每列可以有不同的編碼,但當您使用UTF-8編碼時,您可以使用DEFAULT CHARACTER SET utf8
來使CREATE table
中的所有文本列都可用。如果您願意,也可以將數據庫或整個服務器的默認字符集設置爲utf8
。
如果您已經有CREATE
d表並且它們是非UTF-8歸類,則必須重新創建表或alter表。您可以使用SHOW FULL COLUMNS FROM sometable;
來檢查當前的排序規則。 (4)請確保您使用htmlspecialchars()
而不是htmlentities()
來自PHP輸出的HTML編碼文本,默認情況下會混淆非ASCII字符。 [作爲(2)和(3)的替代方法,只需使用連接和表存儲的默認Latin-1編碼,但仍然可以將UTF-8字節放入其中。這種方法的缺點是,看着數據庫的其他工具看起來不對,而小寫/大寫字符不會以預期的不區分大小寫的方式相互比較。]
- 1. PHP和MySQL編碼
- 2. MYSQL命令和編碼
- 3. Django和MySql - 編碼困難
- 4. 改變編碼,rails和mysql
- 5. MySQL編碼utf8_general_ci
- 6. mysql php編碼
- 7. mysql + php編碼
- 8. 編碼PHP/MySQL
- 9. MySQL/Html編碼
- 10. Django和MySQL utf8編碼問題
- 11. Flash和MySQL的UTF-8編碼問題
- 12. linux和mysql的字符編碼問題
- 13. Grails和默認的mysql編碼
- 14. 使用mysql和php進行Android編碼
- 15. MySQL的utf8編碼和獨特的鍵
- 16. 從MySQL數據庫編碼和拉
- 17. Rails,Redmine,Mysql和SQL Server編碼問題
- 18. PDO + MySQL和破碎UTF-8編碼
- 19. MySQL和編碼數據庫,以UTF-8
- 20. python和mysql之間的編碼問題
- 21. PHP和MySQL的希伯來編碼
- 22. 編碼問題wirh JDBC和MySQL
- 23. UTF-16編碼彈簧MVC和MySQL
- 24. Mysql和PHP編碼不匹配
- 25. MySQL編碼問題
- 26. Mysql編碼問題
- 27. 解密MySQL編碼
- 28. MySQL UTF-8編碼
- 29. PHP + MYSQL編碼,utf8_polish_ci
- 30. MySQL編碼問題
還有其他方法去做這個?我無法安裝任何額外的軟件包到我的PHP發行版,似乎沒有安裝mbstring – qqryq 2010-05-13 01:13:01
我不確定。你可以嘗試運行一個HTML編碼來轉換引號......但這可能不是最好的解決方法。 – 2010-05-13 01:14:59