精品软件与实用教程
在数据采集录入的过程中,经常会遇到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 NAMES utf8mb4'
- 保存后,重启 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',