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%!
果然如此,执行到
Sql 语句时,此刻在数据库中查询结果为空!而程序在一直处于等待状态!可见,自己的业务逻辑出现了严重漏洞!
捕获到以下错误:
java.sql.SQLException: Incorrect string value: '\xA2\x97\xE7\xB2\x92' for column 'medname' at row 1
找了半天,原来是自己在网数据库中写数据时不知何时将特殊字符加进去了,以至于读表时出现了意想不到的异常。
版权声明: 本文为 InfoQ 作者【No Silver Bullet】的原创文章。
原文链接:【http://xie.infoq.cn/article/b1732284f6ca5138756a31297】。文章转载请联系作者。
评论