精品軟體與實用教程
在資料收集輸入的過程中,常會遇到SQLSTATE[22007]: Invalid datetime format: 1366 Incorrect string value錯誤,這是資料庫或程式編碼的問題。
許多程式採用預設的utf-8編碼將utf-8編碼改成utf8mb4就可以解決大部分問題。
怎麼在mysql設定強制使用utf8mb4
在MySQL 中強制使用utf8mb4 字元集,可以透過以下簡單步驟配置資料庫、表格和連接的字元集為utf8mb4。以下是最簡潔的方法:
1. 修改MySQL 設定檔
- 找到MySQL 的設定檔(通常是my.cnf 或my.ini,位置可能在/etc/mysql/my.cnf 或/etc/my.cnf 等,Windows 下可能在MySQL 安裝目錄)。
- 在設定檔中新增或修改以下內容:
[client] default-character-set = utf8mb4 [mysql] default-character-set = utf8mb4 [mysqld] character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci init_connect = 'SET N4ut server = utf8mb4_unicode_ci init_connect = 'SET N4
- 儲存後,重新啟動MySQL 服務:sudo service mysql restart
或(Windows 下)在服務管理中重新啟動MySQL。
2. 設定新資料庫和表格的預設字元集
- 建立新資料庫時指定utf8mb4:CREATE DATABASE my_database CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
- 為現有資料庫變更字元集:ALTER DATABASE my_database CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
- 為現有表變更字元集:ALTER TABLE my_table CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
3. 確保客戶端連線使用utf8mb4
- 在連接MySQL 時,設定連接字元集:SET NAMES utf8mb4;
- 如果使用程式語言(如PHP、Python),請確保連線配置指定utf8mb4:
- PHP (PDO):$pdo = new PDO("mysql:host=localhost;dbname=my_database;charset=utf8mb4", "username", "password");
- Python (MySQL Connector):import mysql.connectorconn = mysql.connector.connect(host="localhost", database="my_database", user="username", password="password", charset="utf8mb4")
- PHP (PDO):
4. 驗證字元集設定
- 檢查全域字元集:SHOW VARIABLES LIKE 'character_set%';SHOW VARIABLES LIKE 'collation%';
- 確保character_set_server、character_set_database 等顯示為utf8mb4,collation_server 為utf8mb4_unicode_ci。
最簡單方法總結
- 一步到位:修改my.cnf 文件,新增上述[client]、[mysql] 和[mysqld] 配置,重啟MySQL。這樣所有新建立的資料庫和表格預設使用utf8mb4,客戶端連線也自動適配。
- 快速修復現有表:對已有資料庫和表格執行ALTER 語句,確保所有資料儲存為utf8mb4。
- 注意:如果資料庫中已有數據,運行ALTER TABLE 前備份數據,以防字元轉換導致資料遺失。
如果遇到具體問題(如配置無效或資料亂碼),請提供更多細節,我可以進一步幫你排查!
在蘋果cms中遇到SQLSTATE[22007]: Invalid datetime format: 1366怎麼辦?
使用pgcms進行採集的時候會遇到SQLSTATE[22007]: Invalid datetime format: 1366錯誤。
解決方法很簡單。在程式的/application目錄下,編輯database.php文件
將資料庫編碼預設採用utf8修改成utf8mb4就可以了!
// 資料庫編碼預設採用utf8
'charset' => 'utf8mb4',