ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Navicat下使用creatTable正常,C# 下'utf8mb3'如何解决(MariaDB10.6)

2022-01-03 15:35:37  阅读:197  来源: 互联网

标签:utf8mb3 set MariaDB10.6 utf8mb4 C# builder character DEFAULT client


最近在使用C#开发数据库的过程中遇到utf8的编码问题,经过多次验证,查找资料正与解决问题,再此小计一下,以供后续遇到此类问题的朋友提供快速解决方法。

废话不多说,上干货!

使用insert、update、select、delete语句正常,使用CreatTable报错,如下:

        //actionlog
        private void CreatActionLogTable()
        {
            string strCreat = string.Format(@"CREATE TABLE IF NOT EXISTS actionlog(
                                  `time` datetime DEFAULT NULL,
                                  `user` varchar(24) DEFAULT NULL,
                                  `log` varchar(200) DEFAULT NULL
                                ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_unicode_ci;");

            ExecuteQuery(strCreat);
        }

 

 于是查看配置文件my.ini,配置文件如下:

 1 [mysqld]
 2 datadir=D:/Program Files/MariaDB 10.6/data
 3 port=3306
 4 innodb_buffer_pool_size=2016M
 5 character-set-client-handshake = false 
 6 character_set_server=utf8mb4
 7 character_set_client=utf8mb4
 8 collation-server = utf8mb4_unicode_ci
 9 init_connect='SET_NAMES_utf8mb4'
10 
11 
12 [client]
13 port=3306
14 plugin-dir=D:/Program Files/MariaDB 10.6/lib/plugin
15 default-character-set=utf8mb4
16 
17 #[mysqldump]
18 #character_set_client=utf8mb4
19 #loose-character_set_client=utf8

设置的都是uft8mb4,没找到问题,查看设置后的相关编码:

 

我们发现除了charater_set_system为utf8mb3外,其余的全部已经是utf8mb4,猜测可能是由于这个引起的,可是查找资料测试,无论如何也无法将character_set_system修改为utf8mb4,最后只能另外找其他的办法,在open成功以后SET character_set_results=utf8mb4,其他的地方都无需修改,

如下:

        public bool ConnectToSql()
        {

            // 对象转字符串方法
            MySqlConnectionStringBuilder builder = new MySqlConnectionStringBuilder();
            builder.Database = "plc_control";   // 数据库名
            builder.Server = "localhost";     // IP
            builder.Port = 3306;                // 端口号
            builder.UserID = "root";            // 用户名
            builder.Password = "root";          // 密码
            builder.CharacterSet = "utf8mb4";   // 编码格式

            if (null == conn)
            {
                conn = new MySqlConnection(builder.ToString());
            }

            try
            {
                conn.Open();

                //在open之后调用就可以避免creatTable报错
                MySqlCommand setcmd = new MySqlCommand("SET character_set_results=utf8mb4", conn);
                int n = setcmd.ExecuteNonQuery();
                setcmd.Dispose();

                Console.WriteLine("连接成功!!!");

                return true;
            }
            catch (Exception e1)
            {
                Console.WriteLine("打印抛出:" + e1.ToString() + builder.ToString());
                return false;
            }
        }

编译运行,如下:

 

 至此,creatTable时报utf8mb3的问题不再出现。

 

标签:utf8mb3,set,MariaDB10.6,utf8mb4,C#,builder,character,DEFAULT,client
来源: https://www.cnblogs.com/wanzaiyimeng/p/15759630.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有