【问题标题】:MySQL text data got truncated by some symbolMySQL 文本数据被某些符号截断
【发布时间】:2015-09-24 09:37:36
【问题描述】:

我的移动应用程序在 Android 下运行 HTML5。用户可以使用标准<textarea /> 发送短信,这将通过 $.post() 函数发送。然后我的 PHP 脚本序列化消息并使用 Zend 库将其放入 MySQL。我现在拥有的:1000 条消息正常,26 条消息被截断存储在数据库中。所有关于俄语的消息。 F.e.:

a:3:{s:11:"show_telnum";s:6:"author";s:8:"show_gps";s:3:"all";s:7:"message";s: 39:“Интересная штука

a:3:{s:11:"show_telnum";s:6:"author";s:8:"show_gps";s:6:"author";s:7:"message";s: 18:“Канечна

a:3:{s:11:"show_telnum";s:6:"author";s:8:"show_gps";s:6:"author";s:7:"message";s: 34:“你 будемзнакомы

所以这是完整的单词,然后是截断的数据。我真的不知道发生了什么,因为所有的俄语文本都被正确处理了。 在 Zend 配置数组中,我设置了选项 'charset' => 'UTF8', 请问有什么建议吗?

【问题讨论】:

标签: php mysql zend-framework


【解决方案1】:

这应该不是答案,但是对于可读的评论来说太长了:

就像你提到的,我真的认为问题出在某些字符上,无法正确编码。 MySQL此时截断,或许你能找出这是哪个字符。

来自 utf-8 文档的输入且数据库使用 utf-8 字符集和排序规则?

您是否在数据库中尝试过SHOW WARNINGS

您也可以尝试将数组另存为BLOB 在您的数据库中,您可能会遇到更少的问题。

var_dump() 序列化后的字符串看看是否OK。

你可以尝试的是 base64_encode/base_64_decode 只是为了测试。

// serialize
$stringToStore = base64_encode( serialize( $your_string ) );

//to unserialize...
$arrayFromStringStoredInDB = unserialize( base64_decode( $your_db_string ) );

【讨论】:

    【解决方案2】:

    好的,这是完整的答案:How to insert utf-8 mb4 character(emoji in ios5) in mysql? 此外,在 Zend 中,我必须修改配置 'charset' => 'utf8mb4',现在一切正常。

    附:一个微笑就能杀死utf8行中的一部分数据!!!什么鬼???

    【讨论】:

      猜你喜欢
      • 2014-04-29
      • 2023-03-27
      • 1970-01-01
      • 1970-01-01
      • 2010-12-03
      • 2015-08-28
      • 2011-09-17
      • 1970-01-01
      相关资源
      最近更新 更多