MySQL Error Code: 1366. Incorrect string value解决 & 存储过程模糊查询LIKE语句

本文介绍了一个使用MySQL存储过程实现模糊查询的例子。通过定义输入参数并在存储过程中使用LIKE语句进行匹配,可以有效地进行数据搜索。此外,还提到了在遇到错误代码1366时的解决方案,强调了字符集一致性的重要性。

存储过程模糊查询LIKE语句示例如下。

PROCEDURE `[ProcedureName]`(in @search varchar(20) charset utf8)

BEGIN
SELECT * FROM [TableName] where [ColumnName] like CONCAT('%',@search,'%');
END

 

MySQL Error Code: 1366. Incorrect string value解决参照下面的链接。

https://blog.youkuaiyun.com/ch717828/article/details/41357431

总之注意所有可能涉及字符集的地方都要查看设置是否一致。

11:24:49 insert into student (sno,sname,sex,sbirthdate,smajor) values('20180001','张三','男','2000-3-8','信息安全'), ('20180002','刘晨','女','1999-9-1','计算机科学与技术'), ('20180003','王敏','女','2001-8-1','计算机科学与技术'), ('20180004','张立','男','2000-1-8','计算机科学与技术'), ('20180005','陈新奇','男','2001-11-1','信息管理与信息系统'), ('20180006','赵明','男','2000-6-12','数据科学与大数据技术'), ('20180007','王佳佳','女','2001-12-7','数据科学与大数据技术'), ('20180008','李娇洋','女','2004-12-15','计算机科学与技术'), ('20180009','谢慧莲','女','2004-11-11','计算机科学与技术'), ('20180010','何亚楠','女','2004-9-11','计算机科学与技术'), ('20180011','余秋蓓','女','2005-8-1','计算机科学与技术'), ('20180012','向悦','女','2004-10-1','计算机科学与技术'), ('20180013','陈圳','女','2004-1-2','计算机科学与技术') Error Code: 1366. Incorrect string value: '\xE5\xBC\xA0\xE4\xB8\x89' for column 'sname' at row 1 0.000 sec
10-09
<think>嗯,用户遇到了MySQLError 1366,关于decimal值不正确的问题。首先,我需要回忆一下这个错误通常是什么原因引起的。Error 1366通常和字符集或排序规则有关,但用户提到的是decimal类型的问题,可能涉及到数值格式或者字段定义的问题。 首先,我应该检查用户提到的列'score'的结构。可能的数据类型问题,比如decimal列的精度和小数位数设置是否正确。如果插入的值超过了定义的范围,比如整数部分太多或者小数位数过多,就会报错。例如,如果score定义为DECIMAL(3,1),那么最大只能存储99.9,如果插入100.0就会出错。 接下来,考虑数据输入的格式。用户可能在插入时使用了不正确的格式,比如逗号作为小数点分隔符,而MySQL期望的是点号。例如,输入"12,5"而不是"12.5"会导致错误。 然后,字符集的问题也不能完全排除。虽然Error 1366常见于字符集不匹配,但引用的资料里提到了utf8mb4的配置。如果客户端和服务器字符集不一致,可能在传输过程中导致数据被错误转换,进而影响数值的解析。不过这种情况可能较少见,但需要检查连接设置是否正确,比如init_connect和skip-character-set-client-handshake的配置是否正确。 另外,引用[2]提到适当的列长度能提高查询效率,虽然主要针对字符类型,但数值类型的正确设置也很重要。用户需要确认decimal列的精度设置是否合理,是否足够容纳插入的数据。 可能的解决方案包括:检查并调整decimal列的定义,确保插入的值在允许范围内;验证数据格式是否正确;检查字符集配置是否一致,避免转换问题;以及使用预处理语句来确保数据格式正确。此外,启用严格模式可以帮助更早地发现数据类型不匹配的问题。 用户可能需要逐步排查这些方面,先检查表结构,再验证输入数据,然后检查字符集配置,最后考虑使用预处理语句或调整SQL模式。同时,提供具体的示例会有助于用户理解如何修改表结构或调整插入语句</think>### Error Code 1366 解决方案分步说明 #### 1. 检查列定义精度范围 - **现象**:当插入的数值超出$DECIMAL(M,D)$定义的精度时触发错误 - **验证方法**: ```sql SHOW CREATE TABLE your_table_name; -- 检查score列定义 ``` 示例定义:`score DECIMAL(4,2)`表示最大存储`99.99`,若插入`100.00`会报错[^2] #### 2. 验证数据输入格式 - **常见错误格式**: - 使用逗号作为小数点:`12,5`(应为`12.5`) - 包含非数字字符:`$12.5`或`12.5元` - **解决方案**: ```sql INSERT INTO table (score) VALUES (12.5); -- 规范格式 ``` #### 3. 检查字符集兼容性(关联引用[1]) - **字符集冲突**可能导致数值解析异常 - **验证步骤**: ```sql SHOW VARIABLES LIKE 'character_set%'; ``` 确保客户端、连接、结果集字符集统一为`utf8mb4`(如引用[1]配置) #### 4. 启用严格模式验证 - **修改SQL模式**增强类型校验: ```sql SET GLOBAL sql_mode = 'STRICT_ALL_TABLES'; ``` 该模式会立即终止包含非法值的操作 #### 5. 使用预处理语句(Python示例) ```python import mysql.connector db = mysql.connector.connect( charset='utf8mb4', # 关联引用[1]配置 ...) cursor = db.prepare("INSERT INTO table (score) VALUES (?)") cursor.execute(None, (Decimal('12.5'),)) # 强制类型转换 ``` #### 6. 特殊值处理 - 允许空值时修改列定义: ```sql ALTER TABLE your_table MODIFY score DECIMAL(10,2) DEFAULT NULL; ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陶晨毅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值