gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-29 00:16:51 25 4
gpt4 key购买 nike

今天,我在开发基于 PHP、MySql 和 Zend Framework 的应用程序时遇到错误。此外,我正在使用 phpseclib使用 AES algorithm 加密数据问题来了。 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是不够的)

application.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);
}

表格

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;

问题:如何解决问题并将数据存入数据库?

最佳答案

我意识到这是一个 reference对于 MySQL 的 AES_ENCRYPT,但是看起来您可能需要将 varchar(200) 更改为 varbinary(200)(或更大),因为 AES 似乎返回二进制字符串。

还有一个不太清楚explanation在 MySQL 网站上。

Many encryption and compression functions return strings for which the result might contain arbitrary byte values. If you want to store these results, use a column with a VARBINARY or BLOB binary string data type. This will avoid potential problems with trailing space removal or character set conversion that would change data values, such as may occur if you use a nonbinary string data type (CHAR, VARCHAR, TEXT).

关于php - Mysql:一般错误:1366 字符串值不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8291184/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com