1. 程式人生 > >記錄PHP post提交表單匯入mysql中文亂碼的問題

記錄PHP post提交表單匯入mysql中文亂碼的問題

# 記錄記錄PHP post提交表單匯入mysql中文亂碼的問題 關於亂碼,這是個糟糕的問題!涉及到很多地方 解決思路:程式所涉及的環境字符集不一致導致 1. mysql出現亂碼一般是mysql資料庫內部的字符集出現問題 為了防止出現一些後續的問題 在建庫的時候就要設定預設字符集 ```mysql CREATE DATABASE 庫名 DEFAULT CHARSET=UTF8; ``` 其他的一些操作 檢視mysql各個地方的字符集設定情況 ```mysql SHOW VARIABLES LIKE 'character%'; ``` * 順便記錄一下mysql資料庫 各個字符集的作用 ![](https://i.loli.net/2021/03/06/SIcjlnP6d7uHiV1.png) 1. **character_set_client** 解析客戶端sql語句的字符集 2. **character_set_connection** 通常與character_set_client保持一致,當進入查詢時,會將sql語句 由character_set_client轉變為 character_set_connection字符集 3. **character_set_database** 新建資料庫的預設字符集,通常建庫的時候就指定一下預設的字符集 預設資料庫的字符集決定了新建表的預設字符集 預設表的字符集又決定了欄位的預設字符集 換句話說,如果我們建庫指定了預設字符集,建表的時候就不用去指定預設字元集了 如果建表,建庫都不指定預設字符集,預設就會用character_set_database初始的字符集去建表, 而通常情況下,初始的character_set_database字符集是西歐的字符集,對英文友好,對中文不友好! 4. **character_set_filesystem** 檔案系統字符集編碼,主要用於解析檔名稱的字串字面值(預設就好) 5. **character_set_results** 返回給客戶端的查詢結果或者錯誤提示的字符集 6. **character_set_server** 伺服器端的預設編碼字符集 7. **character_set_system** mysqlsever儲存元資料的編碼字符集(預設就好) 8. **character_set_dir** mysql字符集編碼儲存的資料夾 如果需要改動某個字符集,可以用以下類似的語句 ```mysql SET character_set_server = utf8; ``` 如果以上都改了,還是出現問題,那說明mysql內部的字符集是沒有問題的,剩下的應該就是外部環境的字符集的問題 ![](https://i.loli.net/2021/03/06/vc4DV3fU9j5iYTB.png) 2. 網上找了很久,發現可能是作業系統字符集的問題 開啟cmd 輸入 chcp 檢視活動內碼表 ![](https://i.loli.net/2021/03/06/IPb9ix813wt5MSh.jpg) win10預設用的GBK字符集,修改字符集為 UTF-8 ![](https://i.loli.net/2021/03/06/pBmeivsI7LzjunM.png) 修改重啟後,檢視字元活動內碼表 ![](https://i.loli.net/2021/03/06/NRy1ShMKw5HTlAB.png) 這時候再次POST提交表單,匯入資料庫中文就可以正常顯