导言
倒腾了一上午终于简简单单的完成了增删改查,查了很多帖子,总是和自己想要的不一样,希望自己的可以精辟一些
链接数据库
链接数据库的形式:
db, err := gorm.Open(“mysql”, “root:0402@(localhost)/test?charset=utf8&parseTime=True&loc=Local”)
if err != nil {
fmt.Println(“我出错啦”)
panic(err)
}`
首先需要明确的是Open(“mysql”, “用户名:密码@/数据库名?charset=字符集”),其中@之后的内容可写可不写,但是@一定要存在,@(localhost),@tcp(localhost),@tcp(localhost:3306)皆可。
创建数据库
生成的表的数据结构如下:
但是我声明了autoIncrement,并不会自增,emmm,auto_increment和auto increment都尝试过了。
gorm官方文档
对于gorm,会把错误通过Error参数返回,而Find()、Create()函数返回的是*gorm.db,需要注意:
表名字的问题
gorm默认是表名是复数形式,逻辑上很好理解。但是我一开始创建的表名叫"friend",但是下面这段代码,执行起来就是false:
if db.HasTable(&Friend{}){
fmt.Println("该表不存在")
}
后来查证发现,可以通过手动更改,使用单数名称的表的形式:
//设置单一表
db.SingularTable(true)
if !db.HasTable(&Friend{}){
//当表不存在时,创建表,Set函数是这是表的各种属性
db.Set("gorm:table_options", "CHARSET=utf8").AutoMigrate(&Friend{})
}
令人纠结的字符编码
我用的是windows系统、maria db,众所周知是gbk格式,但是golang是utf-8格式,所以插进去的时候是乱码的。所以需要手动改一下数据库的配置文件,以我的数据库为例:在C:\Program Files\MariaDB 10.3\data的my.ini文件增加5、6、8、12,无非就是改变数据库之前的编码格式为utf8,之后重启数据库:
右键“此电脑”,选择管理,之后再选择服务,然后找到mysql,右键该条目进行重启服务:
之后重新进入数据库命令行界面,输入status,显示如下:
然后链接的时候,也指定了utf8,本以为万无一失:
但结果:
在命令行中还是乱码,这就很奇怪了,我就试了各种格式,各种改数据库配置文件,还是出错,后来在查看命令行的结构的时候发现了问题:
命令行是GBK的格式,所以显示UTF-8的内容必然是乱码的,但是你从程序里取数据据就可以了:
###参考:
不小心都被我关了,找不到参考文献了。。。