MYSQL使用存储过程插入中文数据的疑似bug(UTF8)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介:
数据库Connection和字段的字符集都采用utf-8.
开始使用存储过程插入数据,代码大约如下
               MySqlCommand cmd = new MySqlCommand("apend_testproject",
                   new MySqlConnection(cConnectMySqlHelp.GetConnectStr().ConnectionString));
                commonfunc.logfile(cmd.Connection.ConnectionString);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add(new MySqlParameter("_PM", _PM));
                cmd.Parameters.Add(new MySqlParameter("_PUBLISH_TIME", _PUBLISH_TIME));
                cmd.Parameters.Add(new MySqlParameter("_PRODUCT_LINE", _PRODUCT_LINE));
                cmd.Parameters.Add(new MySqlParameter("_NAME", HttpUtility.UrlDecode(_NAME)));
                cmd.Parameters.Add(new MySqlParameter("_PROGRESS", 100));
                cmd.Parameters.Add(new MySqlParameter("_TEST_SUB_TIME", _TEST_SUB_TIME));
                cmd.Parameters.Add(new MySqlParameter("_PROJECT_TYPE", _PROJECT_TYPE));
结果数据库表中显示乱码,很郁闷,以为是字符集编码的问题,去网上找了些资料说可以如下操作,意思是
在connectstring里边加入字符集说明utf-8
         public static MySqlConnectionStringBuilder GetConnectStr()
        {
            MySqlConnectionStringBuilder connBuilder =
            new MySqlConnectionStringBuilder();
            connBuilder.Add("Database", "testplat");
            connBuilder.Add("Data Source", "10.2.226.20");
            connBuilder.Add("User Id", "root");
            connBuilder.Add("Password", "");
            //connBuilder.Add("charset", "utf8");
            return connBuilder;
        }
结果还是错误。实在没有办法,根据测试直觉,是不是由于存储过程是在数据库端,所以,,,,那么直接写Sql调用试试,
代码如下
  MySqlCommand cmd = new MySqlCommand();
                cmd.CommandType = CommandType.Text;
                cmd.Connection = new MySqlConnection(cConnectMySqlHelp.GetConnectStr().ConnectionString);
                cmd.CommandText = "insert `testplat`.`TESTPROJECT` (PM,PUBLISH_TIME,PRODUCT_LINE,NAME,PROGRESS,TEST_SUB_TIME,PROJECT_TYPE) "+
                                "values('" + _PM + "','" + _PUBLISH_TIME + "','" + _PRODUCT_LINE + "','" + _NAME + "'," + 100 + ",'" + _TEST_SUB_TIME + "'," + _PROJECT_TYPE + ")";
中文不再显示乱码,于是可以断言是存储过程的问题。为了验证,直接到Mysql客户端工具中
执行存储过程:
CALL apend_testproject('elbert', '2009-11-30', 0, '木牛流马',2, '2009-10-30', 2);
报:
Incorrect string value: '\xE6\x9C\xA8\xE7\x89\x9B...' for column '_NAME' at row 1                
至此可以断言MySql有b ug;虽然经过验证,但是毕竟不是mysql方面专家,所以标题加上疑似!
附mysql版本 
mysql  Ver 14.12 Distrib 5.0.81, for pc-linux-gnu (i686) using readline 5.1


本文转自elbertchen 51CTO博客,原文链接:http://blog.51cto.com/linkyou/283252,如需转载请自行联系原作者
相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
打赏
0
0
0
0
69
分享
相关文章
java调用mysql存储过程
在 Java 中调用 MySQL 存储过程主要借助 JDBC(Java Database Connectivity)。其核心原理是通过 JDBC 与 MySQL 建立连接,调用存储过程并处理结果。具体步骤包括:加载 JDBC 驱动、建立数据库连接、创建 CallableStatement 对象、设置存储过程参数并执行调用。此过程实现了 Java 程序与 MySQL 数据库的高效交互。
【YashanDB知识库】MySQL迁移至崖山char类型数据自动补空格问题
**简介**:在MySQL迁移到崖山环境时,若字段类型为char(2),而应用存储的数据仅为'0'或'1',查询时崖山会自动补空格。原因是mysql的sql_mode可能启用了PAD_CHAR_TO_FULL_LENGTH模式,导致保留CHAR类型尾随空格。解决方法是与应用确认数据需求,可将崖山环境中的char类型改为varchar类型以规避补空格问题,适用于所有版本。
【YashanDB知识库】字符集latin1的MySQL中文数据如何迁移到YashanDB
本文探讨了在使用YMP 23.2.1.3迁移MySQL Server字符集为latin1的中文数据至YashanDB时出现乱码的问题。问题根源在于MySQL latin1字符集存放的是实际utf8编码的数据,而YMP尚未支持此类场景。文章提供了两种解决方法:一是通过DBeaver直接迁移表数据;二是将MySQL表数据转换为Insert语句后手动插入YashanDB。同时指出,这两种方法适合单张表迁移,多表迁移可能存在兼容性问题,建议对问题表单独处理。
【YashanDB知识库】字符集latin1的MySQL中文数据如何迁移到YashanDB
Redis和Mysql如何保证数据⼀致?
1. 先更新Mysql,再更新Redis,如果更新Redis失败,可能仍然不⼀致 2. 先删除Redis缓存数据,再更新Mysql,再次查询的时候在将数据添加到缓存中 这种⽅案能解决1 ⽅案的问题,但是在⾼并发下性能较低,⽽且仍然会出现数据不⼀致的问题,⽐如线程1删除了 Redis缓存数据,正在更新Mysql,此时另外⼀个查询再查询,那么就会把Mysql中⽼数据⼜查到 Redis中 1. 使用MQ异步同步, 保证数据的最终一致性 我们项目中会根据业务情况 , 使用不同的方案来解决Redis和Mysql的一致性问题 : 1. 对于一些一致性要求不高的场景 , 不做处理例如 : 用户行为数据 ,
SpringBoot 通过集成 Flink CDC 来实时追踪 MySql 数据变动
通过详细的步骤和示例代码,您可以在 SpringBoot 项目中成功集成 Flink CDC,并实时追踪 MySQL 数据库的变动。
431 43
MySQL底层概述—4.InnoDB数据文件
本文介绍了InnoDB表空间文件结构及其组成部分,包括表空间、段、区、页和行。表空间是最高逻辑层,包含多个段;段由若干个区组成,每个区包含64个连续的页,页用于存储多条行记录。文章还详细解析了Page结构,分为通用部分(文件头与文件尾)、数据记录部分和页目录部分。此外,文中探讨了行记录格式,包括四种行格式(Redundant、Compact、Dynamic和Compressed),重点介绍了Compact行记录格式及其溢出机制。最后,文章解释了不同行格式的特点及应用场景,帮助理解InnoDB存储引擎的工作原理。
MySQL底层概述—4.InnoDB数据文件
基于SQL Server / MySQL进行百万条数据过滤优化方案
对百万级别数据进行高效过滤查询,需要综合使用索引、查询优化、表分区、统计信息和视图等技术手段。通过合理的数据库设计和查询优化,可以显著提升查询性能,确保系统的高效稳定运行。
73 9
【YashanDB知识库】MySQL返回结果集的存储过程的改写方法
本文介绍了将MySQL存储过程改写至YashanDB的解决方案。由于MySQL存储过程可直接返回结果集,而YashanDB需通过返回SYS_REF_CURSOR的函数实现类似功能,因此需要对代码进行转换。示例中展示了如何将MySQL存储过程`proc1`改写为YashanDB函数,并调整JDBC应用代码以适配REF_CURSOR输出参数,从而正确获取查询结果。此方法确保了跨数据库场景下的兼容性与功能性。
MySQL和SQLSugar百万条数据查询分页优化
在面对百万条数据的查询时,优化MySQL和SQLSugar的分页性能是非常重要的。通过合理使用索引、调整查询语句、使用缓存以及采用高效的分页策略,可以显著提高查询效率。本文介绍的技巧和方法,可以为开发人员在数据处理和查询优化中提供有效的指导,提升系统的性能和用户体验。掌握这些技巧后,您可以在处理海量数据时更加游刃有余。
188 9
MySQL进阶突击系列(09)数据磁盘存储模型 | 一行数据怎么存?
文中详细介绍了MySQL数据库中一行数据在磁盘上的存储机制,包括表空间、段、区、页和行的具体结构,以及如何设计和优化行数据存储以提高性能。
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等