php mysql 字段被截断_PHP截取字符长度导入MySQL限长的字段

最近写了几段PHP程序,给同事来导入数据到MySQL数据库,同事偶尔反映遇到这样类似的报错:

PDOException: SQLSTATE[22001]: String data, right truncated: 1406 Data too long for column 'state' at row 1: UPDATE `table` SET `address` = 'xxx', `state` = '过长内容', `id` = '141124' WHERE `ziduan` = 'xxx';; Array

很明显,这是某个需要导入的内容超过了字段设置的长度。处理的办法:

如果这种情况极少,可以人工根据情况对导入内容进行缩减后再运行;

如果这种情况比较多,又觉得不用修改字段长度,也可以修改PHP程序来自动截取一定长度并导入;

如果这种情况太多,说明字段设置的长度太短,可以修改字段长度再运行。

第二种情况下,需要考虑截取多少长度,特别是包含中文字符、英文字符、标点符号、数字等情况下,如何设置截取长度是一个问题,之前对MySQL中的字符包含的字节没有深究。

昨天详细查看了资料并进行试验:

MySQL中表使用了UTF-8 MB4字符集,假设某个字段长度设置为1024,那么指的是1024个字符(可能是汉字、英文、标点或数字等),包含多少个字节是不定的。

PHP里面substr是截取字符串的子字符串,参数是单个英文字符数,而中文字符串截取最好用mb_substr,这个函数不管字节数,各种字符(可能是汉字、英文、标点或数字等)都算一个字符。

于是就用mb_substr来截取$new_string = mb_substr($string, 0, 1024);来处理,再导入数据库就没有问题了,而且经过反复测试验证,这样的限制是准确的,多一个字符就不能导入,少一个字符就限制多了。

后面还有其它字段、其它程序遇到类似问题都可以修改PHP程序增加截取来同样进行处理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值