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

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

關於亂碼,這是個糟糕的問題!涉及到很多地方

解決思路:程式所涉及的環境字符集不一致導致

  1. mysql出現亂碼一般是mysql資料庫內部的字符集出現問題

    為了防止出現一些後續的問題

    在建庫的時候就要設置默認字符集

    CREATE DATABASE 庫名 DEFAULT CHARSET=UTF8;
    

    其他的一些操作

    查看mysql各個地方的字符集設置情況

    SHOW VARIABLES LIKE 'character%';
    
  • 順便記錄一下mysql資料庫 各個字符集的作用

  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字符集編碼儲存的文件夾

    如果需要改動某個字符集,可以用以下類似的語句

    SET character_set_server = utf8;
    

    如果以上都改了,還是出現問題,那說明mysql內部的字符集是沒有問題的,剩下的應該就是外部環境的字符集的問題

  9. 網上找了很久,發現可能是作業系統字符集的問題

    打開cmd 輸入 chcp 查看活動程式碼頁

    win10默認用的GBK字符集,修改字符集為 UTF-8

修改重啟後,查看字元活動程式碼頁

這時候再次POST提交表單,導入資料庫中文就可以正常顯示了!