首页 > 数据库 >易优CMS 中出现 SQLSTATE[HY000]: General error: 1366 Incorrect string value 错误的原因是什么?如何解决?

易优CMS 中出现 SQLSTATE[HY000]: General error: 1366 Incorrect string value 错误的原因是什么?如何解决?

时间:2024-12-02 09:03:41浏览次数:12  
标签:Incorrect 易优 string utf8mb4 数据库 修改 SQL CMS

在使用易优CMS时,如果遇到 SQLSTATE[HY000]: General error: 1366 Incorrect string value 错误,通常是因为数据库字段不支持某些特殊字符或表情符号。这些字符在UTF-8编码中占用4个字节,而易优CMS默认的数据库编码是UTF-8,只能支持最多3个字节的字符。因此,需要将数据库编码从UTF-8更改为UTF-8mb4,以支持完整的Unicode字符集,包括特殊表情符号。

以下是详细的解决步骤和说明:

  1. 识别问题原因

    • 错误信息 SQLSTATE[HY000]: General error: 1366 Incorrect string value 通常出现在插入或更新包含特殊字符(如Emoji表情)的内容时。
    • 例如,当从微信公众号复制带有表情的文章内容到易优CMS时,可能会触发此错误。
  2. 修改数据库配置文件

    • 打开易优CMS的数据库配置文件 application/database.php
    • 找到数据库连接参数部分,通常类似于以下代码: php   return [ // 其他配置项... 'params' => array(), // 其他配置项... ];
    • 将 'params' 数组修改为: php   'params' => [ PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8mb4", ],
    • 这个修改确保数据库连接使用UTF-8mb4编码。
  3. 修改数据库和表的字符集

    • 使用数据库管理工具(如phpMyAdmin、Navicat等)登录到您的MySQL数据库。
    • 选择易优CMS使用的数据库,然后执行以下SQL语句,将数据库的字符集和排序规则更改为 utf8mb4 和 utf8mb4_general_ci: sql   ALTER DATABASE 你的数据库名 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci;
    • 接下来,将所有相关的表和字段也更改为 utf8mb4 编码。例如,对于 ey_content 表中的 content 字段,执行以下SQL语句: sql   ALTER TABLE ey_content CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; ALTER TABLE ey_content MODIFY content TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
  4. 批量修改所有表和字段

    • 如果数据库中有大量表和字段需要修改,可以使用以下SQL脚本批量更改: sql   -- 修改数据库字符集 ALTER DATABASE 你的数据库名 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci; -- 修改所有表的字符集 USE 你的数据库名; SELECT CONCAT('ALTER TABLE ', table_name, ' CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;') FROM information_schema.tables WHERE table_schema = '你的数据库名'; -- 修改所有字段的字符集 SELECT CONCAT('ALTER TABLE ', table_name, ' MODIFY ', column_name, ' ', column_type, ' CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;', ';') FROM information_schema.columns WHERE table_schema = '你的数据库名' AND data_type IN ('char', 'varchar', 'text', 'tinytext', 'mediumtext', 'longtext');
    • 将上述查询结果生成的SQL语句执行,以批量修改所有表和字段的字符集。
  5. 使用工具或插件

    • 如果不熟悉手动修改SQL语句,可以使用易优CMS提供的工具或插件来完成这些操作。
    • 下载包含SQL脚本的压缩包(如 content.zip),解压后将SQL文件导入到易优CMS的【易优系统助手】插件中执行。
  6. 验证修改结果

    • 完成上述修改后,重新尝试插入或更新包含特殊字符的内容。
    • 确认不再出现 SQLSTATE[HY000]: General error: 1366 Incorrect string value 错误。

标签:Incorrect,易优,string,utf8mb4,数据库,修改,SQL,CMS
From: https://www.cnblogs.com/hwrex/p/18580747

相关文章

  • String常见面试题
    第一题:打印的结果是true还是false呢?在之前我们就说过这题,执行s1时,检查字符串常量池,发现没有“abc”,于是创建“abc”,执行s2时,接着检查常量池,发现有“abc”,直接复用,所以s1和s2地址一致,打印出来是true第二题:trueorfalse1.主方法自动进栈,执行s1,双引号“abc”,检查常量池发现没......
  • string 的基本用法
    前言string是一个非常常见的数据类型,用于表示文本或字符序列。以下是关于它的详细介绍:string(字符串)是由零个或多个字符组成的有限序列。字符可以是字母、数字、标点符号、空格或其他符号。例如,“Hello”、“123”、“!@#$”等都是字符串。在C++中,string是标准库(<stri......
  • String类的三种常见构造方法
    1.根据构造方法创建字符串对象1.publicString()创建一个空字符串,里面不包含任何内容2.publicString(char[]chs)创建一个字符数组,将其拼接成字符串对象3.publicString(Stringoriginal)根据输入的字符串,创建字符串对象2.疑惑:1.我们原来创建了对象,将其直接打印,出来的是一......
  • How can I fix that my variable goes into the formatted string of my html code in
    题意:我该如何修复我的变量正确地插入到Python中HTML代码的格式化字符串中?问题背景:ForaprojectI'mrunningaraspberrypiPicowhbasedwebserverthatshouldgettheinputsofthetemperaturesensoranddisplayitonthewebsite.Iamhowevernotvery......
  • Type definition error: [array type, component type: [simple type, class java.lan
     详细报错信息:Typedefinitionerror:[arraytype,componenttype:[simpletype,classjava.lang.String]];nestedexceptioniscom.fasterxml.jackson.databind.exc.InvalidDefinitionException:Cannotconstructinstanceof`java.lang.String[]`:noString-argu......
  • 0day圣乔E*P系统NamedParameterSingleRowQueryConvertor.queryForString.dwr存在SQL注
         0x01产品概述    圣乔E*P系统NamedParameterSingleRowQueryConvertor.queryForString.dwr存在SQL注入漏洞 通用描述管理和发布于一体的智能化平台,广泛应用于新闻、媒体和各类内容创作机构。该平台支持多终端、多渠道的内容分发,具备素材管理、编辑加工、智......
  • String类的特点
    1.String类的特点1.java程序中,只要是双引号字符串,就都是String类的对象如图只有String这一个类有这种特殊的创建对象方法我们知道,只有对象才可以通过点什么来调用方法,而图中s.toString等方法都可以调用,所以s就是String的对象.2.字符串在创建之后,内容不可更改如图这该......
  • [C++][CMake][Error] set_target_properties called with incorrect number of argume
    1简介这篇文章将探讨了在使用CMake构建C++项目时,调用set_target_properties函数时参数数量不正确所引发的问题。2错误案例以下为可能发生错误的案例include_directories(${CMAKE_SOURCE_DIR}/common)find_package(Threads)add_library(libusbmuxdSHAREDlibusbm......
  • CComboBox的SelectString函数有弊端-m_combo_xxx_.SelectString(0, strTxt); 重复
    CComboBox的SelectString函数有弊端CComboBox中字符串通过AddString添加后,比如天气1、天气2、天气222,天气234 CComboBox调用SelectString(0,_T("天气2"))函数有弊端。可能会选择的是 天气222应该用for循环判断m_comBoText.GetWindowText(strText);if(strText==你要选择......
  • java小工具封装-给定es客户端和SearchSourceBuilder和es索引名直接用scroll方式查询出
    封装类:传参1esClient传参2自定义searchSourceBuilder传参3索引名(可直接复制粘贴使用)publicstaticList<Map<String,Object>>getEsResultData(RestHighLevelClientesClient,SearchSourceBuildersearchSourceBuilder,Stringindex_name)throwsIOException{......