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

最近在使用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);
        }

 

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

 于是查看配置文件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,没找到问题,查看设置后的相关编码:

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

 

我们发现除了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;
            }
        }

编译运行,如下:

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

 

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

 

上一篇:Android 深入Http(4)从OkHttp源码来看Http,2021年你与字节跳动只差这份笔记


下一篇:SQL79 牛客的课程订单分析(三)