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的問題不再出現。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM