1. 程式人生 > 其它 >Navicat下使用creatTable正常,C# 下'utf8mb3'如何解決(MariaDB10.6)

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