Mysql:常规错误:1366字符串值不正确

Aur*_*osa 12 php mysql zend-framework

今天我在开发基于PHP,MySql和Zend Framework的应用程序时遇到了错误.此外,我正在使用phpseclib使用AES算法加密数据,这就出现了问题.AES算法的输出形式似乎是MySql不喜欢的形式.事实上,当我尝试将数据插入数据库时​​,得到了一个Sql异常.错误是:

SQLSTATE[HY000]: General error: 1366 Incorrect string value: '\xE4\xD5\xABtZM...' for column 'Name'
Run Code Online (Sandbox Code Playgroud)

我已经阅读了Stackoverflow上发布的所有答案,并且还搜索了问题,但所有提议的解决方案都已经在我的代码中了.数据库,表和所有列都有Collat​​ion 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"
Run Code Online (Sandbox Code Playgroud)

为database.php

public static function getDb()
{
   if (self::$Db === NULL)
      self::$Db = Zend_Db_Table::getDefaultAdapter();
   return self::$Db;
}
Run Code Online (Sandbox Code Playgroud)

model.php

$Values = array(
   'Id' => $this->Id,
   'Name' => $this->Name,
   'CreationDate' => $this->CreationDate,
);
$RowChanged = $Db->insert('TABLENAME', $Values);
Run Code Online (Sandbox Code Playgroud)

加密()

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

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;
Run Code Online (Sandbox Code Playgroud)

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

haf*_*huk 11

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

MySQL网站上有一个不太清楚的解释.

许多加密和压缩函数返回结果可能包含任意字节值的字符串.如果要存储这些结果,请使用具有VARBINARY或BLOB二进制字符串数据类型的列.这将避免可能会更改数据值的尾随空格删除或字符集转换的潜在问题,例如,如果使用非二进制字符串数据类型(CHAR,VARCHAR,TEXT),则可能会出现此问题.