MySql報錯(持續更新)


MySql報錯

1. 重復鍵報錯1062- duplicate entry '0' for key 'xxx'

1.1 報錯場景

在建立索引的時候報此錯誤。

1.2 報錯原因

索引或者主鍵有重復鍵

1.3 解決方法

刪除重復的索引或者主鍵條目,即可。

1.4 具體舉例

給MAC建立索引表的時候,會報此錯誤,原因是原表中有重復鍵0,刪除一個即可。

2. VS2019 nuget控制台類型不匹配報錯

2.1 報錯描述如下

Could not find type mapping for column 'alarms.id' with data type 'int unsigned zerofill'. Skipping column.
Could not scaffold the primary key for 'alarms'. The following columns in the primary key could not be scaffolded: id.
Unable to generate entity type for table 'alarms'.

2.2 報錯場景

對接數據庫是Mysql,使用VS2019 nuget控制台指令進行Dbfirst。在Dbfirst生成字段的時候,報此錯誤,無法生成對應表的字段。

2.3 報錯原因

數據庫側對主鍵設置了無符號,填充零。

2.4 解決方法

使用Navicat管理Mysql,取消無符號,填充零。

3 數據庫Varchar類型為空返回DBnull與服務端string類型不匹配報錯

3.1 報錯描述如下

System.InvalidCastException: Unable to cast object of type 'System.DBNull' to type 'System.String'.

3.2 報錯場景

服務程序字段類型為string, 數據庫類型為varchar。當數據庫為空的時候,返回DBnNull,與服務端String類型不匹配報錯。

3.3 報錯原因

類型不匹配

3.4 解決方法1

3.4.1 將數據庫中為空的字段寫入數據

3.4.2 當數據庫返回DBNull時,將返回數據改成Null,網上有很多類似例子。

return (accountNumber == DBNull.Value) ? string.Empty : accountNumber.ToString()
備注:適合單條對象不匹配

3.4.3 配置文件Map里取消非空設置

            builder.Property(c => c.AlarmName)
                .HasColumnType("varchar(40)")
                .HasMaxLength(40);
              //  .IsRequired();

            builder.Property(c => c.AlarmType)
                .HasColumnType("varchar(20)")
                .HasMaxLength(20);
            //    .IsRequired();

備注:適合整個集合的不匹配

3.5 解決方法2(最優)

2019/8/6日更新。
public string? HKID { get; set; }
C#中加個可空類型即可完美解決問題。


免責聲明!

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



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