zoukankan      html  css  js  c++  java
  • 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);
            }

     于是查看配置文件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的问题不再出现。

     

  • 相关阅读:
    Sketch or Figma谁才是UI设计软件的未来?
    2020年网站首屏设计:最佳实践和例子
    为设计工具付费到底值不值得?
    社交网站原型模板分享
    摹客PS插件,支持自定切图尺寸!
    UI设计适合女生学吗?会不会很难?
    mysql数据操作之单表查询
    表操作
    库操作
    数据库
  • 原文地址:https://www.cnblogs.com/wanzaiyimeng/p/15759630.html
Copyright © 2011-2022 走看看