Mysql:一般错误:1366 字符串值不正确

2024-03-21

今天,我在开发基于 PHP、MySql 和 Zend Framework 的应用程序时遇到错误。此外,我正在使用phpseclib http://phpseclib.sourceforge.net/使用加密数据AES算法 http://en.wikipedia.org/wiki/Advanced_Encryption_Standard问题来了。 AES 算法的输出形式似乎是 MySql 不喜欢的。事实上,当我尝试将数据插入数据库时​​,出现了 Sql 异常。错误是:

SQLSTATE[HY000]: General error: 1366 Incorrect string value: '\xE4\xD5\xABtZM...' for column 'Name'

我已经阅读了 Stackoverflow 上发布的所有答案,并且还用 Google 搜索了该问题,但所有建议的解决方案都已在我的代码中。数据库、表和所有列都有排序规则utf8_general_ci。下面你可以看到相关代码:

  1. Application.ini 查看如何建立连接
  2. Database.php 查看如何检索数据库连接
  3. Model.php 看看我如何尝试将数据插入数据库
  4. encrypt() 看看我如何使用 AES 类来加密数据
  5. 表定义(如果知道全部都是 utf8 格式还不够)

应用程序.ini

resources.db.adapter = "Pdo_Mysql"
resources.db.params.charset = "utf8"
resources.db.params.host = "localhost"
resources.db.params.username = "********"
resources.db.params.password = "********"
resources.db.params.dbname = "dbname"

数据库.php

public static function getDb()
{
   if (self::$Db === NULL)
      self::$Db = Zend_Db_Table::getDefaultAdapter();
   return self::$Db;
}

模型.php

$Values = array(
   'Id' => $this->Id,
   'Name' => $this->Name,
   'CreationDate' => $this->CreationDate,
);
$RowChanged = $Db->insert('TABLENAME', $Values);

加密()

public static function encrypt($Data, $EncryptionKey)
{
   $AES = new Crypt_AES();
   $AES->setKey($EncryptionKey);
   return $AES->encrypt($Data);
}

table

CREATE TABLE IF NOT EXISTS `table` (
  `Id` mediumint(8) unsigned NOT NULL,
  `Name` varchar(200) DEFAULT NULL,
  `CreationDate` date NOT NULL,
  PRIMARY KEY (`Id`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

问题:如何解决问题并将数据存储到数据库中?


我意识到这是一个参考 http://thinkdiff.net/mysql/encrypt-mysql-data-using-aes-techniques/对于 MySQL 的 AES_ENCRYPT,但是看起来您可能需要更改您的varchar(200) to a varbinary(200)(或更大),因为 AES 似乎返回二进制字符串。

有一个不太清楚的解释 http://dev.mysql.com/doc/refman/5.5/en/encryption-functions.html在 MySQL 网站上。

许多加密和压缩函数返回字符串 结果可能包含任意字节值。如果你想存储这些 结果,使用包含 VARBINARY 或 BLOB 二进制字符串数据的列 类型。这将避免尾随空格删除的潜在问题 或字符集转换会改变数据值,例如可能 如果您使用非二进制字符串数据类型(CHAR、VARCHAR、TEXT),则会发生这种情况。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mysql:一般错误:1366 字符串值不正确 的相关文章

随机推荐

  • 使用 ember 评估车把中的两个条件

    我想知道是否可以做这样的事情 if ClientController Client number PhoneController hasLinesToInstall if Thanks Juanitos 我认为不可能在车把中链接这样的条件
  • 真正的缩放是什么?

    我听说人们说他们已经制作了一个可扩展的 Web 应用程序 真正的缩放是什么 开发人员可以采取哪些措施来使其应用程序具有可扩展性 开发人员在扩展过程中会考虑哪些因素 有关使用 ASP NET 和 SQL Server 扩展 Web 应用程序的
  • 回购协议中的 TWIG 查询生成器

    我尝试将其放入referralentity php public function getTotalReferrals qb this gt createQueryBuilder r qb gt select COUNT r id AS t
  • 将语言名称转换为区域设置代码

    PHP 中是否有规范的方法来执行此操作 Java 问题 区域设置 语言名称到国家 语言代码 https stackoverflow com questions 20518000 locale language name to country
  • Android Studio:多模块项目中外部 JAR 的链接

    我有一个 Android 应用程序 在 Android Studio 上运行 它由 2 个模块组成 有一个低级纯java模块 我们称之为模块A 在它的顶部 有模块 B 它是 Android 应用程序 它依赖于 moduleA 来进行某些处理
  • 使用 PyParsing 解析 Snort 日志

    使用 pyparsing 模块解析 Snort 日志时遇到问题 问题在于分离 Snort 日志 它有多行条目 由空行分隔 并让 pyparsing 将每个条目解析为一个整体块 而不是逐行读取并期望语法适用于每一行 显然 它不是 我尝试将每个
  • 谷歌地图只显示半屏?

    谷歌地图只显示一半的屏幕 我尝试通过调整大小来修复 google maps event trigger map resize 但没有任何运气 有人可以帮忙吗 当它加载时 它只显示一半的屏幕 如下所示 我找啊找啊 没有任何解决办法 funct
  • 使用 AWS CLI 命令添加 SQS 重新驱动策略

    我尝试使用下面的 AWS CLI 命令设置 SQS 的重新驱动策略 但看到与重新驱动 JSON 相关的错误 您能让我知道如何解决这个问题吗 redrive policy RedrivePolicy deadLetterTargetArn d
  • 如何在Android Studio 2020中找到R文件?

    我在这里搜索了如何做到这一点 但我找到了 2015 年的源代码 并且 Android Studio 的布局从那时起就发生了变化 Android Studio 中的 R 文件在哪里 在此输入图像描述 https i stack imgur c
  • 缺少适用于 Windows 的远程 iOS 模拟器选项? [复制]

    这个问题在这里已经有答案了 我一直在使用适用于 Windows 的 Xamarin Remote iOS Simulator 和 Visual Studio Professional 版本 更新到最新版本的 Xamarin for Visu
  • 如何对 ksh 中的变量进行精确的单词匹配?

    我使用以下语法作为 ksh 脚本的一部分来验证该词是否Validation存在于LINE FROM FILE LINE FROM FILE Validation LINE FROM FILE print match Validation 这
  • 反应本机导航给出错误“未定义不是对象”?

    import Platform from react native import Navigation from react native navigation import registerScreens from screens reg
  • 使用扩展运算符和打字进行解构

    我有这个对象 const ABCD a 1 b 2 c 3 d 4 我可以对其进行解构 使用 扩展 运算符收集其余部分 然后输入如下变量 const a b restOfIt a number b number ABCD 但我该如何输入re
  • GitHub 如何在不重新加载页面的情况下更改 URL?

    转到任意 GitHubpage https github com twitter bootstrap单击任意目录 文件 观察 URL 如何变化 但仅更新部分页面 没有整个页面重新加载 我如何使用 jQuery 做类似的事情 这适用于大多数浏
  • 如何在 Python 中将 JSON 字符串转换为字典?

    我已经阅读了有关从 str 到 dic 的 python 转换的不同帖子 但我仍然遇到问题 并且无法在字典中转换我的 str 这是我原来的字符串 faqId 1 isPrivate false question Question 1 ans
  • WCF 绑定配置仅作为默认值应用,但命名失败

    WCF 绑定和流传输模式有一个有趣的问题 我们无法解决 我们有一个配置为流传输模式的 WCF 端点 端点接收到的消息比默认大小 65 KB 大得多 因此 我们在绑定标记的 maxReceivedMessageSize 属性中指定了更大的消息
  • 什么是“分段错误(核心转储)”? [复制]

    这个问题在这里已经有答案了 我正在尝试在 Linux 中编写一个具有 sqrt 参数的 C 程序 代码如下 include
  • 更改 Javascript 警报的标题 [重复]

    这个问题在这里已经有答案了 如何更改 javascript 警报弹出窗口的标题 你不能 https developer mozilla org en US docs DOM window alert 这是由浏览器决定的 为了用户的安全 例如
  • 小吃店不显示

    我继承自BaseActivity对于所有其他活动 public class BaseActivity extends AppCompatActivity public static CoordinatorLayout coordinator
  • Mysql:一般错误:1366 字符串值不正确

    今天 我在开发基于 PHP MySql 和 Zend Framework 的应用程序时遇到错误 此外 我正在使用phpseclib http phpseclib sourceforge net 使用加密数据AES算法 http en wik