最近在使用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的问题不再出现。