Navicat下使用creatTable正常,C# 下'utf8mb3'如何解決(MariaDB10.6)
阿新 • • 發佈:2022-01-03
最近在使用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_ci9 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的問題不再出現。