該系統是一個訪問MySQL數據庫的PHP應用程序。第一個表格使用標準的latin1編碼創建,並通過PHP中的mysqli填充,但不設置任何編碼。 PHP腳本和數據都以UTF-8工作。如何清理MySQL表中的編碼
較新的表格已將編碼設置爲utf8_bin,並在每個事務前發送SET CHARACTER SET utf8
。
如果我看一下mysql數據庫中的新表(通過像HeidiSQL這樣的SQL資源管理器),每個特殊字符都可以正確顯示。但是,在每個舊錶中,典型的latin1-utf8錯誤都可以看到,例如ü。
是否有一個簡單的方法來解決這個問題就像在下列方式之一:
- 固定的編碼爲每個表,以便在SQL Explorer中正常顯示,但保留PHP代碼,因爲它是(
SET CHARACTER SET utf8
或latin1
在每個語句前面,適合表格編碼(僅僅是一種解決方法) - 將編碼切換到utf8所有表格 - >現在
SET CHARACTER SET utf8
必須在每個mysqli連接的開始時發送(或者可能有一種方法可以將其設置爲標準?) - 開關e爲所有表填入latin1 - >不需要在事務前發送
SET CHARACTER SET utf8
,但在數據庫瀏覽器中編碼錯誤。
看起來好像數據庫將所有表格視爲utf8並顯示latin1表格,因此具有錯誤的字符。如果沒有告訴別人,Mysqli會將所有表格視爲latin1。
該應用程序是高效的,編碼問題對用戶不可見,因爲正確的編碼被告知mysqli在每個語句前面。但我覺得這不是一個好習慣。
我意識到數據庫的設置存在問題,我希望能夠學習解決這個問題的最佳實踐。