写点什么

mysql 进阶 (二十二)MySQL 错误之 Incorrect string value 中文字符输入错误问题分析

  • 2022 年 8 月 01 日
  • 本文字数:1284 字

    阅读完需:约 4 分钟

mysql进阶(二十二)MySQL错误之Incorrect string value中文字符输入错误问题分析

一、问题分析

在实验过程中需要将输出参数写入数据库,在写的过程中执行到 lab_dynamic_order.upd_upd()语句时出现了错误,自己起初还不明白到底是哪里出现了错误。尝试性求助度娘,网上有人说是因为输入中文字符的缘故。故自己将待写入的包含中文字的字符串复制到 mysql 中,保存时出现了Incorrect string value: '\xE7\x81\xAB\xE7\x8B\x90...' for column 'tout' at row 1的错误提示。接着又是一番搜索,解决方法如下:

      将相应的列改为utf8-utf8_general_ci即可。

 


      处理后的结果如下



二、MySQL 支持的数据类型

 MySQL 提供了 8 个基本的字符串类型,分别:CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM 各 SET 等多种字符串类型。

可以存储的范围从简单的一个字符到巨大的文本块或二进制字符串数据。

  字符串类型     字节大小         描述及存储需求

    CHAR         0-255 字节          定长字符串

    VARCHAR      0-255 字节          变长字符串

    TINYBLOB     0-255 字节        不超过 255 个字符的二进制字符串

    TINYTEXT     0-255 字节        短文本字符串

    BLOB         0-65535 字节      二进制形式的长文本数据

    TEXT         0-65535 字节      长文本数据

    MEDIUMBLOB   0-16 777 215 字节 二进制形式的中等长度文本数据

    MEDIUMTEXT   0-16 777 215 字节 中等长度文本数据

    LOGNGBLOB    0-4 294 967 295 字节 二进制形式的极大文本数据

    LONGTEXT     0-4 294 967 295 字节 极大文本数据

    VARBINARY(M)                   允许长度 0-M 个字节的定长字节符串,值的长度+1 个字节

    BINARY(M)    M                 允许长度 0-M 个字节的定长字节符串

三、CPU 超负荷异常情况

      项目部署阶段,提交订单时总是出现 cpu 超负荷工作情况,导致机器卡死,订单提交失败。通过任务管理器可见下图所示:

 


      通过任务管理器中进程信息(见下图)进行查看,可见正是由于项目运行的原因导致 CPU 超负荷工作。元凶究竟是谁?难道是因为输出的测试语句太多导致的,尝试减少测试输出语句。

 


经查,是在进行提交订单即执行 3002 交易时发生的错误。再次运行查看到底是那一步造成的,难道是操作数据表的缘故?用事实说话。如下图所示在执行到操作订单主表 lm_bill 时,程序便停止运行了,此时 CPU 已达到 100%!

      果然如此,执行到

SELECT * FROM lmapp.lm_addr where uid='U18353102068' AND addrid='1' limit 0,1000;
复制代码

      Sql 语句时,此刻在数据库中查询结果为空!而程序在一直处于等待状态!可见,自己的业务逻辑出现了严重漏洞!

      捕获到以下错误:

  java.sql.SQLException: Incorrect string value: '\xA2\x97\xE7\xB2\x92' for column 'medname' at row 1

     找了半天,原来是自己在网数据库中写数据时不知何时将特殊字符加进去了,以至于读表时出现了意想不到的异常。


发布于: 刚刚阅读数: 4
用户头像

No Silver Bullet 2021.07.09 加入

岂曰无衣 与子同袍

评论

发布
暂无评论
mysql进阶(二十二)MySQL错误之Incorrect string value中文字符输入错误问题分析_MySQL_No Silver Bullet_InfoQ写作社区